From de5c9b5646a901b0c51ed4f3aa2e471f3086e659 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Tue, 31 Aug 2010 18:26:27 +0300 Subject: [PATCH] 2300b14 --- blkdev.cpp | 15 ++-- disk.cpp | 49 ++++++------ epsonprinter.cpp | 5 +- gencpu.cpp | 3 +- hardfile.cpp | 2 + include/cpu_prefetch.h | 40 +--------- include/newcpu.h | 6 +- include/options.h | 1 + newcpu.cpp | 97 +++++++++++++++++++----- od-win32/lib/prowizard.lib | Bin 1140414 -> 1139948 bytes od-win32/resources/resource | 2 + od-win32/resources/winuae.rc | 18 +++-- od-win32/win32.cpp | 32 +++++++- od-win32/win32.h | 4 +- od-win32/win32gfx.cpp | 8 +- od-win32/win32gui.cpp | 44 ++++++++--- od-win32/winuaechangelog.txt | 22 +++++- prowizard/rippers/EurekaPacker.c | 16 ++-- prowizard/rippers/KefrensSoundMachine.c | 22 +++--- prowizard/rippers/NoisePacker1.c | 5 +- 20 files changed, 256 insertions(+), 135 deletions(-) diff --git a/blkdev.cpp b/blkdev.cpp index 38573421..8c549f59 100644 --- a/blkdev.cpp +++ b/blkdev.cpp @@ -336,13 +336,16 @@ static int get_standard_cd_unit2 (cd_standard_unit csu) int unitnum = 0; int isaudio = 0; if (currprefs.cdslots[unitnum].name[0] || currprefs.cdslots[unitnum].inuse) { - device_func_init (SCSI_UNIT_IOCTL); - if (!sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name, csu)) { - device_func_init (SCSI_UNIT_IMAGE); - if (!sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name, csu)) - goto fallback; + if (currprefs.cdslots[unitnum].name[0]) { + device_func_init (SCSI_UNIT_IOCTL); + if (!sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name, csu)) { + device_func_init (SCSI_UNIT_IMAGE); + if (!sys_command_open_internal (unitnum, currprefs.cdslots[unitnum].name, csu)) + goto fallback; + } + } else { + goto fallback; } - getunitinfo (unitnum, 0, csu, &isaudio); return unitnum; } device_func_init (SCSI_UNIT_IOCTL); diff --git a/disk.cpp b/disk.cpp index 1c7c0343..e80be580 100644 --- a/disk.cpp +++ b/disk.cpp @@ -633,7 +633,7 @@ static void reset_drive (int num) static void update_drive_gui (int num) { drive *drv = floppy + num; - bool writ = dskdmaen == 3 && drv->state && !(selected & (1 << num)); + bool writ = dskdmaen == 3 && drv->state && !((selected | disabled) & (1 << num)); if (drv->state == gui_data.drive_motor[num] && drv->cyl == gui_data.drive_track[num] @@ -1151,7 +1151,7 @@ static int drive_empty (drive * drv) return drv->diskfile == 0; } -static void drive_step (drive * drv) +static void drive_step (drive * drv, int step_direction) { #ifdef CATWEASEL if (drv->catweasel) { @@ -1164,6 +1164,8 @@ static void drive_step (drive * drv) return; } #endif + if (!drive_empty (drv)) + drv->dskchange = 0; if (drv->steplimit && get_cycles() - drv->steplimitcycle < MIN_STEPLIMIT_CYCLE) { if (disk_debug_logging > 1) write_log (L" step ignored drive %d, %d", @@ -1175,9 +1177,7 @@ static void drive_step (drive * drv) * (stupid trackloaders with CPU delay loops) */ set_steplimit (drv); - if (!drive_empty (drv)) - drv->dskchange = 0; - if (direction) { + if (step_direction) { if (drv->cyl) { drv->cyl--; #ifdef DRIVESOUND @@ -2376,11 +2376,12 @@ static TCHAR *tobin (uae_u8 v) void DISK_select (uae_u8 data) { - int step_pulse, lastselected, dr; - static uae_u8 prevdata; - static int step; + int step_pulse, prev_selected, dr; + static uae_u8 prev_data; + static int prev_step; + + prev_selected = selected; - lastselected = selected; selected = (data >> 3) & 15; side = 1 - ((data >> 2) & 1); direction = (data >> 1) & 1; @@ -2391,10 +2392,10 @@ void DISK_select (uae_u8 data) #ifdef AMAX if (currprefs.amaxromfile[0]) - amax_disk_select (data, prevdata); + amax_disk_select (data, prev_data); #endif - if ((prevdata & 0x80) != (data & 0x80)) { + if ((prev_data & 0x80) != (data & 0x80)) { for (dr = 0; dr < 4; dr++) { if (floppy[dr].indexhackmode > 1 && !(selected & (1 << dr))) { floppy[dr].indexhack = 1; @@ -2406,42 +2407,44 @@ void DISK_select (uae_u8 data) if (disk_debug_logging > 1) { write_log (L" %d%d%d%d% ", (selected & 1) ? 0 : 1, (selected & 2) ? 0 : 1, (selected & 4) ? 0 : 1, (selected & 8) ? 0 : 1); - if ((prevdata & 0x80) != (data & 0x80)) + if ((prev_data & 0x80) != (data & 0x80)) write_log (L" dskmotor %d ", (data & 0x80) ? 1 : 0); - if ((prevdata & 0x02) != (data & 0x02)) + if ((prev_data & 0x02) != (data & 0x02)) write_log (L" direct %d ", (data & 0x02) ? 1 : 0); - if ((prevdata & 0x04) != (data & 0x04)) + if ((prev_data & 0x04) != (data & 0x04)) write_log (L" side %d ", (data & 0x04) ? 1 : 0); } - if (step != step_pulse) { + // step goes high and drive was selected when step pulse changes: step + if (prev_step != step_pulse) { if (disk_debug_logging > 1) write_log (L" dskstep %d ", step_pulse); - step = step_pulse; - if (step && !savestate_state) { + prev_step = step_pulse; + if (prev_step && !savestate_state) { for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { - if (!((selected | disabled) & (1 << dr))) { - drive_step (floppy + dr); + if (!((prev_selected | disabled) & (1 << dr))) { + drive_step (floppy + dr, direction); if (floppy[dr].indexhackmode > 1 && (data & 0x80)) floppy[dr].indexhack = 1; } } } } + if (!savestate_state) { for (dr = 0; dr < MAX_FLOPPY_DRIVES; dr++) { drive *drv = floppy + dr; /* motor on/off workings tested with small assembler code on real Amiga 1200. */ /* motor/id flipflop is set only when drive select goes from high to low */ - if (!(selected & (1 << dr)) && (lastselected & (1 << dr)) ) { + if (!(selected & (1 << dr)) && (prev_selected & (1 << dr)) ) { drv->drive_id_scnt++; drv->drive_id_scnt &= 31; drv->idbit = (drv->drive_id & (1L << (31 - drv->drive_id_scnt))) ? 1 : 0; if (!(disabled & (1 << dr))) { - if ((prevdata & 0x80) == 0 || (data & 0x80) == 0) { + if ((prev_data & 0x80) == 0 || (data & 0x80) == 0) { /* motor off: if motor bit = 0 in prevdata or data -> turn motor on */ drive_motor (drv, 0); - } else if (prevdata & 0x80) { + } else if (prev_data & 0x80) { /* motor on: if motor bit = 1 in prevdata only (motor flag state in data has no effect) -> turn motor off */ drive_motor (drv, 1); @@ -2461,7 +2464,7 @@ void DISK_select (uae_u8 data) floppy[dr].state = (!(selected & (1 << dr))) | !floppy[dr].motoroff; update_drive_gui (dr); } - prevdata = data; + prev_data = data; if (disk_debug_logging > 1) write_log (L"\n"); } diff --git a/epsonprinter.cpp b/epsonprinter.cpp index a390bec4..c75fd8fd 100644 --- a/epsonprinter.cpp +++ b/epsonprinter.cpp @@ -36,7 +36,7 @@ #include -//#define DEBUGPRINT L"c:\\d\\data_epsonq_raw_fixed_superscript_subscript_multi-strike.bin" +//#define DEBUGPRINT L"C:\\Users\\twilen\\Desktop\\pages_1+2_raw.bin" int pngprint = 0; #ifdef C_LIBPNG @@ -893,6 +893,9 @@ static void outputPage(void) printerDC = NULL; page = NULL; cpage = NULL; + if (curFont) + DeleteObject (curFont); + curFont = NULL; } } diff --git a/gencpu.cpp b/gencpu.cpp index a15a5655..55502e44 100644 --- a/gencpu.cpp +++ b/gencpu.cpp @@ -2321,7 +2321,8 @@ static void gen_opcode (unsigned long int opcode) fill_prefetch_full (); break; case i_Bcc: - // bcc.s and bcc.w cycles confirmed + // bcc.b branch: idle cycle, prefetch, prefetch + // bcc.b not branch: 2 idle cycles, prefetch if (curi->size == sz_long) { if (cpu_level < 2) { addcycles000 (2); diff --git a/hardfile.cpp b/hardfile.cpp index 86c8585d..1d38ce3d 100644 --- a/hardfile.cpp +++ b/hardfile.cpp @@ -982,6 +982,7 @@ int scsi_emulate (struct hardfiledata *hfd, struct hd_hardfiledata *hdhfd, uae_u case 0x00: /* TEST UNIT READY */ if (nodisk (hfd)) goto nodisk; + scsi_len = 0; break; case 0x08: /* READ (6) */ if (nodisk (hfd)) @@ -1209,6 +1210,7 @@ int scsi_emulate (struct hardfiledata *hfd, struct hd_hardfiledata *hdhfd, uae_u case 0x35: /* SYNCRONIZE CACHE (10) */ if (nodisk (hfd)) goto nodisk; + scsi_len = 0; break; case 0xa8: /* READ (12) */ if (nodisk (hfd)) diff --git a/include/cpu_prefetch.h b/include/cpu_prefetch.h index d3596ebc..db273c79 100644 --- a/include/cpu_prefetch.h +++ b/include/cpu_prefetch.h @@ -225,25 +225,7 @@ STATIC_INLINE void put_byte_ce020 (uaecptr addr, uae_u32 v) mem_access_delay_byte_write_ce020 (addr, v); } -extern void fill_icache020 (uae_u32); - -STATIC_INLINE uae_u32 get_word_ce020_prefetch (int o) -{ - uae_u32 pc = m68k_getpc () + o; - - for (;;) { - if (pc == regs.prefetch020addr) { - uae_u32 v = regs.prefetch020data >> 16; - return v; - } - if (pc == regs.prefetch020addr + 2) { - uae_u32 v = regs.prefetch020data & 0xffff; - fill_icache020 (pc + 2); - return v; - } - fill_icache020 (pc); - } -} +extern uae_u32 get_word_ce020_prefetch (int); STATIC_INLINE uae_u32 get_long_ce020_prefetch (int o) { @@ -281,7 +263,7 @@ STATIC_INLINE void m68k_do_rts_ce020 (void) #ifdef CPUEMU_21 -extern void fill_icache030 (uae_u32 addr); +extern uae_u32 get_word_ce030_prefetch (int); extern void write_dcache030 (uaecptr, uae_u32, int); extern uae_u32 read_dcache030 (uaecptr, int); @@ -313,24 +295,6 @@ STATIC_INLINE uae_u32 get_byte_ce030 (uaecptr addr) return read_dcache030 (addr, 0); } -STATIC_INLINE uae_u32 get_word_ce030_prefetch (int o) -{ - uae_u32 pc = m68k_getpc () + o; - - for (;;) { - if (pc == regs.prefetch020addr) { - uae_u32 v = regs.prefetch020data >> 16; - return v; - } - if (pc == regs.prefetch020addr + 2) { - uae_u32 v = regs.prefetch020data & 0xffff; - fill_icache030 (pc + 2); - return v; - } - fill_icache030 (pc); - } -} - STATIC_INLINE uae_u32 get_long_ce030_prefetch (int o) { uae_u32 v; diff --git a/include/newcpu.h b/include/newcpu.h index 011f76b5..a81f8a1b 100644 --- a/include/newcpu.h +++ b/include/newcpu.h @@ -84,6 +84,7 @@ typedef double fptype; #endif #endif +#define CPU_PIPELINE_MAX 2 #define CPU000_MEM_CYCLE 4 #define CPU000_CLOCK_MULT 2 #define CPU020_MEM_CYCLE 3 @@ -114,6 +115,7 @@ struct cache040 uae_u32 tag[CACHELINES040]; }; + struct regstruct { uae_u32 regs[16]; @@ -164,8 +166,8 @@ struct regstruct uae_u8 panic; uae_u32 panic_pc, panic_addr; - uae_u32 prefetch020data; - uae_u32 prefetch020addr; + uae_u32 prefetch020data[CPU_PIPELINE_MAX]; + uae_u32 prefetch020addr[CPU_PIPELINE_MAX]; int ce020memcycles; }; diff --git a/include/options.h b/include/options.h index 6585241e..64a42a31 100644 --- a/include/options.h +++ b/include/options.h @@ -353,6 +353,7 @@ struct uae_prefs { bool win32_alwaysontop; bool win32_powersavedisabled; bool win32_minimize_inactive; + int win32_statusbar; int win32_active_priority; int win32_inactive_priority; diff --git a/newcpu.cpp b/newcpu.cpp index 1917686c..8cffb837 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -208,6 +208,9 @@ static void set_cpu_caches (void) { int i; + for (i = 0; i < CPU_PIPELINE_MAX; i++) + regs.prefetch020addr[i] = 0xffffffff; + #ifdef JIT if (currprefs.cachesize) { if (currprefs.cpu_model < 68040) { @@ -224,7 +227,6 @@ static void set_cpu_caches (void) if (regs.cacr & 0x08) { // clear instr cache for (i = 0; i < CACHELINES020; i++) caches020[i].valid = 0; - regs.prefetch020addr = 0xff000000; } if (regs.cacr & 0x04) { // clear entry in instr cache caches020[(regs.caar >> 2) & (CACHELINES020 - 1)].valid = 0; @@ -239,7 +241,6 @@ static void set_cpu_caches (void) icaches030[i].valid[2] = 0; icaches030[i].valid[3] = 0; } - regs.prefetch020addr = 0xff000000; } if (regs.cacr & 0x04) { // clear entry in instr cache icaches030[(regs.caar >> 4) & (CACHELINES030 - 1)].valid[(regs.caar >> 2) & 3] = 0; @@ -266,7 +267,6 @@ static void set_cpu_caches (void) caches040[i].valid[2] = 0; caches040[i].valid[3] = 0; } - regs.prefetch020addr = 0xff000000; } } } @@ -4268,8 +4268,8 @@ STATIC_INLINE void fill_cache040 (uae_u32 addr) for (i = 0; i < CACHELINES040; i++) { if (c->valid[i] && c->tag[i] == tag) { // cache hit - regs.prefetch020addr = addr; - regs.prefetch020data = c->data[i][lws]; + regs.prefetch020addr[0] = addr; + regs.prefetch020data[0] = c->data[i][lws]; return; } } @@ -4284,12 +4284,12 @@ STATIC_INLINE void fill_cache040 (uae_u32 addr) c->data[i][0] = data; } } - regs.prefetch020addr = addr; - regs.prefetch020data = data; + regs.prefetch020addr[0] = addr; + regs.prefetch020data[0] = data; } // this one is really simple and easy -void fill_icache020 (uae_u32 addr) +STATIC_INLINE void fill_icache020 (uae_u32 addr, int idx) { int index; uae_u32 tag; @@ -4302,8 +4302,8 @@ void fill_icache020 (uae_u32 addr) c = &caches020[index]; if (c->valid && c->tag == tag) { // cache hit - regs.prefetch020addr = addr; - regs.prefetch020data = c->data; + regs.prefetch020addr[idx] = addr; + regs.prefetch020data[idx] = c->data; return; } // cache miss @@ -4313,8 +4313,39 @@ void fill_icache020 (uae_u32 addr) c->valid = !!(regs.cacr & 1); c->data = data; } - regs.prefetch020addr = addr; - regs.prefetch020data = data; + regs.prefetch020addr[idx] = addr; + regs.prefetch020data[idx] = data; +} + +uae_u32 get_word_ce020_prefetch (int o) +{ + uae_u32 pc = m68k_getpc () + o; + + for (;;) { + for (int i = 0; i < 2; i++) { + if (pc == regs.prefetch020addr[0]) { + uae_u32 v = regs.prefetch020data[0] >> 16; + fill_icache020 (regs.prefetch020addr[0] + 4, 1); + return v; + } + if (pc == regs.prefetch020addr[0] + 2) { + uae_u32 v = regs.prefetch020data[0] & 0xffff; + if (regs.prefetch020addr[1] == regs.prefetch020addr[0] + 4) { + regs.prefetch020addr[0] = regs.prefetch020addr[1]; + regs.prefetch020data[0] = regs.prefetch020data[1]; + fill_icache020 (regs.prefetch020addr[0] + 4, 1); + } else { + fill_icache020 (pc + 4, 0); + fill_icache020 (regs.prefetch020addr[0] + 4, 1); + } + return v; + } + regs.prefetch020addr[0] = regs.prefetch020addr[1]; + regs.prefetch020data[0] = regs.prefetch020data[1]; + } + fill_icache020 (pc + 0, 0); + fill_icache020 (pc + 4, 1); + } } // 68030 caches aren't so simple as 68020 cache.. @@ -4343,7 +4374,7 @@ STATIC_INLINE void update_cache030 (struct cache030 *c, uae_u32 val, uae_u32 tag c->data[lws] = val; } -void fill_icache030 (uae_u32 addr) +STATIC_INLINE void fill_icache030 (uae_u32 addr, int idx) { int lws; uae_u32 tag; @@ -4354,8 +4385,8 @@ void fill_icache030 (uae_u32 addr) c = getcache030 (icaches030, addr, &tag, &lws); if (c->valid[lws] && c->tag == tag) { // cache hit - regs.prefetch020addr = addr; - regs.prefetch020data = c->data[lws]; + regs.prefetch020addr[idx] = addr; + regs.prefetch020data[idx] = c->data[lws]; return; } // cache miss @@ -4372,8 +4403,8 @@ void fill_icache030 (uae_u32 addr) } #endif } - regs.prefetch020addr = addr; - regs.prefetch020data = data; + regs.prefetch020addr[idx] = addr; + regs.prefetch020data[idx] = data; } STATIC_INLINE bool cancache030 (uaecptr addr) @@ -4521,6 +4552,38 @@ uae_u32 read_dcache030 (uaecptr addr, int size) return 0; } +uae_u32 get_word_ce030_prefetch (int o) +{ + uae_u32 pc = m68k_getpc () + o; + + for (;;) { + for (int i = 0; i < 2; i++) { + if (pc == regs.prefetch020addr[0]) { + uae_u32 v = regs.prefetch020data[0] >> 16; + fill_icache030 (regs.prefetch020addr[0] + 4, 1); + return v; + } + if (pc == regs.prefetch020addr[0] + 2) { + uae_u32 v = regs.prefetch020data[0] & 0xffff; + if (regs.prefetch020addr[1] == regs.prefetch020addr[0] + 4) { + regs.prefetch020addr[0] = regs.prefetch020addr[1]; + regs.prefetch020data[0] = regs.prefetch020data[1]; + fill_icache030 (regs.prefetch020addr[0] + 4, 1); + } else { + fill_icache030 (pc + 4, 0); + fill_icache030 (regs.prefetch020addr[0] + 4, 1); + } + return v; + } + regs.prefetch020addr[0] = regs.prefetch020addr[1]; + regs.prefetch020data[0] = regs.prefetch020data[1]; + } + fill_icache030 (pc + 0, 0); + fill_icache030 (pc + 4, 1); + } +} + + void flush_dcache (uaecptr addr, int size) { if (!currprefs.cpu_cycle_exact) diff --git a/od-win32/lib/prowizard.lib b/od-win32/lib/prowizard.lib index c2ddc8693fadfd04f4a1029ae67870788dce028f..2881840e8a43366e094f821436693d1009bc1116 100644 GIT binary patch delta 9230 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 1 write_log (L"AWP: %x %x\n", hWnd, message); @@ -868,6 +869,10 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, } dx_check (); break; + case WM_MOUSEACTIVATE: + if (isfocus () == 0) + ignorelbutton = true; + break; case WM_ACTIVATEAPP: if (!wParam && isfullscreen () <= 0 && currprefs.win32_minimize_inactive) minimizewindow (); @@ -890,6 +895,16 @@ static LRESULT CALLBACK AmigaWindowProc (HWND hWnd, UINT message, WPARAM wParam, case WM_LBUTTONDOWN: case WM_LBUTTONDBLCLK: if (!mouseactive && !gui_active && (!mousehack_alive () || currprefs.input_tablet != TABLET_MOUSEHACK || (currprefs.input_tablet == TABLET_MOUSEHACK && !currprefs.input_magic_mouse) || isfullscreen () > 0)) { + // borderless = do not capture with single-click + if (ignorelbutton) { + ignorelbutton = 0; + return 0; + } + if (message == WM_LBUTTONDOWN && isfullscreen () == 0 && currprefs.win32_borderless && !rp_isactive ()) { + // full-window drag + SendMessage (hAmigaWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0); + return 0; + } setmouseactive ((message == WM_LBUTTONDBLCLK || isfullscreen() > 0) ? 2 : 1); } else if (dinput_winmouse () >= 0 && isfocus ()) { setmousebuttonstate (dinput_winmouse (), 0, 1); @@ -1544,7 +1559,12 @@ static LRESULT CALLBACK MainWindowProc (HWND hWnd, UINT message, WPARAM wParam, int port = lpDIS->itemID - 1; int x = (lpDIS->rcItem.right - lpDIS->rcItem.left + 1) / 2 + lpDIS->rcItem.left - 1; int y = (lpDIS->rcItem.bottom - lpDIS->rcItem.top + 1) / 2 + lpDIS->rcItem.top - 1; - FillRect (lpDIS->hDC, &lpDIS->rcItem, (HBRUSH)(COLOR_3DFACE + 1)); + RECT r = lpDIS->rcItem; + r.left++; + r.right--; + r.top++; + r.bottom--; + FillRect (lpDIS->hDC, &r, (HBRUSH)(COLOR_3DFACE + 1)); for (int i = 0; i < 2; i++) { int buttons = guijoybutton[port + i * 2]; int m = i == 0 ? 1 : 2; @@ -1729,7 +1749,7 @@ void handle_events (void) int was_paused = 0; static int cnt; - if (guijoychange && window_led_joy_start > 0) { + if (hStatusWnd && guijoychange && window_led_joy_start > 0) { guijoychange = false; for (int i = 0; i < window_led_joy_start; i++) PostMessage (hStatusWnd, SB_SETTEXT, (WPARAM)((i + 1) | SBT_OWNERDRAW), (LPARAM)L""); @@ -2694,6 +2714,7 @@ void target_default_options (struct uae_prefs *p, int type) p->win32_rtgvblankrate = 0; p->win32_commandpathstart[0] = 0; p->win32_commandpathend[0] = 0; + p->win32_statusbar = 1; } if (type == 1 || type == 0) { p->win32_uaescsimode = UAESCSI_CDEMU; @@ -2708,7 +2729,8 @@ void target_default_options (struct uae_prefs *p, int type) } } -static const TCHAR *scsimode[] = { L"SCSIEMU", L"SPTI", L"SPTI+SCSISCAN", L"AdaptecASPI", L"NeroASPI", L"FrogASPI", 0 }; +static const TCHAR *scsimode[] = { L"SCSIEMU", L"SPTI", L"SPTI+SCSISCAN", L"AdaptecASPI", L"NeroASPI", L"FrogASPI", NULL }; +static const TCHAR *statusbarmode[] = { L"none", L"normal", L"extended", NULL }; void target_save_options (struct zfile *f, struct uae_prefs *p) { @@ -2748,6 +2770,7 @@ void target_save_options (struct zfile *f, struct uae_prefs *p) cfgfile_target_dwrite (f, L"rtg_vblank", L"%d", p->win32_rtgvblankrate); cfgfile_target_dwrite_bool (f, L"borderless", p->win32_borderless); cfgfile_target_dwrite_str (f, L"uaescsimode", scsimode[p->win32_uaescsimode]); + cfgfile_target_dwrite_str (f, L"statusbar", statusbarmode[p->win32_statusbar]); cfgfile_target_dwrite (f, L"soundcard", L"%d", p->win32_soundcard); if (sound_devices[p->win32_soundcard].cfgname) cfgfile_target_dwrite_str (f, L"soundcardname", sound_devices[p->win32_soundcard].cfgname); @@ -2942,6 +2965,9 @@ int target_parse_option (struct uae_prefs *p, const TCHAR *option, const TCHAR * return 1; } + if (cfgfile_strval (option, value, L"statusbar", &p->win32_statusbar, statusbarmode, 0)) + return 1; + if (cfgfile_intval (option, value, L"active_priority", &v, 1)) { p->win32_active_priority = fetchpri (v, 1); return 1; diff --git a/od-win32/win32.h b/od-win32/win32.h index 24ed8879..12184f17 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -18,8 +18,8 @@ #define WINUAEPUBLICBETA 1 #define LANG_DLL 1 -#define WINUAEBETA L"13" -#define WINUAEDATE MAKEBD(2010, 8, 27) +#define WINUAEBETA L"14" +#define WINUAEDATE MAKEBD(2010, 8, 31) #define WINUAEEXTRA L"" #define WINUAEREV L"" diff --git a/od-win32/win32gfx.cpp b/od-win32/win32gfx.cpp index 9aefbd8b..138746c7 100644 --- a/od-win32/win32gfx.cpp +++ b/od-win32/win32gfx.cpp @@ -1308,6 +1308,7 @@ int check_prefs_changed_gfx (void) c |= currprefs.win32_alwaysontop != changed_prefs.win32_alwaysontop ? 32 : 0; c |= currprefs.win32_notaskbarbutton != changed_prefs.win32_notaskbarbutton ? 32 : 0; c |= currprefs.win32_borderless != changed_prefs.win32_borderless ? 32 : 0; + c |= currprefs.win32_statusbar != changed_prefs.win32_statusbar ? 32 : 0; c |= currprefs.win32_rtgmatchdepth != changed_prefs.win32_rtgmatchdepth ? 2 : 0; c |= currprefs.win32_rtgscaleifsmall != changed_prefs.win32_rtgscaleifsmall ? (2 | 8 | 64) : 0; c |= currprefs.win32_rtgallowscaling != changed_prefs.win32_rtgallowscaling ? (2 | 8 | 64) : 0; @@ -1371,6 +1372,7 @@ int check_prefs_changed_gfx (void) currprefs.win32_alwaysontop = changed_prefs.win32_alwaysontop; currprefs.win32_notaskbarbutton = changed_prefs.win32_notaskbarbutton; currprefs.win32_borderless = changed_prefs.win32_borderless; + currprefs.win32_statusbar = changed_prefs.win32_statusbar; currprefs.win32_rtgmatchdepth = changed_prefs.win32_rtgmatchdepth; currprefs.win32_rtgscaleifsmall = changed_prefs.win32_rtgscaleifsmall; currprefs.win32_rtgallowscaling = changed_prefs.win32_rtgallowscaling; @@ -1959,7 +1961,7 @@ static void createstatuswindow (void) HLOCAL hloc; LPINT lpParts; int drive_width, hd_width, cd_width, power_width, fps_width, idle_width, snd_width, joy_width; - int joys = 0; + int joys = currprefs.win32_statusbar > 1 ? 2 : 0; int num_parts = 11 + joys; double scaleX, scaleY; WINDOWINFO wi; @@ -1969,6 +1971,8 @@ static void createstatuswindow (void) ShowWindow (hStatusWnd, SW_HIDE); DestroyWindow (hStatusWnd); } + if (currprefs.win32_statusbar == 0) + return; hStatusWnd = CreateWindowEx ( 0, STATUSCLASSNAME, (LPCTSTR) NULL, SBARS_TOOLTIPS | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hMainWnd, (HMENU) 1, hInst, NULL); @@ -2141,7 +2145,7 @@ static int create_windows_2 (void) DWORD flags = 0; int borderless = currprefs.win32_borderless; DWORD style = NORMAL_WINDOW_STYLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS; - int cymenu = GetSystemMetrics (SM_CYMENU); + int cymenu = currprefs.win32_statusbar == 0 ? 0 : GetSystemMetrics (SM_CYMENU); int cyborder = GetSystemMetrics (SM_CYBORDER); int cxborder = GetSystemMetrics (SM_CXBORDER); int gap = 3; diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index b85ac956..626e0756 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -7342,6 +7342,15 @@ static void values_to_miscdlg (HWND hDlg) SendDlgItemMessage (hDlg, IDC_DXMODE, CB_ADDSTRING, 0, (LPARAM)L"Direct3D"); SendDlgItemMessage (hDlg, IDC_DXMODE, CB_SETCURSEL, workprefs.gfx_api, 0); + SendDlgItemMessage (hDlg, IDC_WINDOWEDMODE, CB_RESETCONTENT, 0, 0); + SendDlgItemMessage (hDlg, IDC_WINDOWEDMODE, CB_ADDSTRING, 0, (LPARAM)L"Borderless"); + SendDlgItemMessage (hDlg, IDC_WINDOWEDMODE, CB_ADDSTRING, 0, (LPARAM)L"Minimal"); + SendDlgItemMessage (hDlg, IDC_WINDOWEDMODE, CB_ADDSTRING, 0, (LPARAM)L"Standard"); + SendDlgItemMessage (hDlg, IDC_WINDOWEDMODE, CB_ADDSTRING, 0, (LPARAM)L"Extended"); + SendDlgItemMessage (hDlg, IDC_WINDOWEDMODE, CB_SETCURSEL, + workprefs.win32_borderless ? 0 : (workprefs.win32_statusbar + 1), + 0); + SendDlgItemMessage (hDlg, IDC_DD_SURFACETYPE, CB_RESETCONTENT, 0, 0); SendDlgItemMessage (hDlg, IDC_DD_SURFACETYPE, CB_ADDSTRING, 0, (LPARAM)L"NonLocalVRAM"); SendDlgItemMessage (hDlg, IDC_DD_SURFACETYPE, CB_ADDSTRING, 0, (LPARAM)L"DefaultRAM *"); @@ -7454,6 +7463,17 @@ static INT_PTR MiscDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) enable_for_miscdlg (hDlg); } break; + case IDC_WINDOWEDMODE: + v = SendDlgItemMessage (hDlg, IDC_WINDOWEDMODE, CB_GETCURSEL, 0, 0L); + if (v != CB_ERR) { + workprefs.win32_borderless = 0; + workprefs.win32_statusbar = 0; + if (v == 0) + workprefs.win32_borderless = 1; + if (v > 0) + workprefs.win32_statusbar = v - 1; + } + break; case IDC_DD_SURFACETYPE: v = SendDlgItemMessage (hDlg, IDC_DD_SURFACETYPE, CB_GETCURSEL, 0, 0L); if (v != CB_ERR) { @@ -13549,17 +13569,19 @@ int dragdrop (HWND hDlg, HDROP hd, struct uae_prefs *prefs, int currentpage) drvdrag = 0; if (currentpage < 0) { GetClientRect (hMainWnd, &r2); - GetClientRect (hStatusWnd, &r); - if (pt.y >= r2.bottom && pt.y < r2.bottom + r.bottom) { - if (pt.x >= window_led_drives && pt.x < window_led_drives_end && window_led_drives > 0) { - drv = pt.x - window_led_drives; - drv /= (window_led_drives_end - window_led_drives) / 4; - drvdrag = 1; - if (drv < 0 || drv > 3) - drv = 0; - } - if (pt.x >= window_led_hd && pt.x < window_led_hd_end && window_led_hd > 0) { - harddrive = 1; + if (hStatusWnd) { + GetClientRect (hStatusWnd, &r); + if (pt.y >= r2.bottom && pt.y < r2.bottom + r.bottom) { + if (pt.x >= window_led_drives && pt.x < window_led_drives_end && window_led_drives > 0) { + drv = pt.x - window_led_drives; + drv /= (window_led_drives_end - window_led_drives) / 4; + drvdrag = 1; + if (drv < 0 || drv > 3) + drv = 0; + } + if (pt.x >= window_led_hd && pt.x < window_led_hd_end && window_led_hd > 0) { + harddrive = 1; + } } } } else if (currentpage == FLOPPY_ID || currentpage == QUICKSTART_ID) { diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 2dbcf6d0..43a758f2 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,23 @@ +Beta 14: + +- DSKSTEP and DSKSELx going inactive at the same time steps the rw-head normally + Fixes Euro Soccer stupid disk change detection. +- uaehf.device HD_SCSICMD TEST UNIT READY returned an error (HDInstTools works again) +- added 68020 CE-mode very approximate 2-stage CPU prefetch pipeline emulation (not that 68020 + don't really have 2-stage prefetch but it still will be more compatible without major changes) + Fixes ATR and (partially) Last Ninja 3 CD32 graphics glitches, (missing blitter waits..) + also more compatible with self-modifying code +- CD32/CDTV empty "image mode" tried to select physical drive +- added windowed mode configuration GUI setting (borderless, minimal, normal, extended) + Extended is WIP and something you (and me?) should ignore +- do not capture mouse if left mouse was clicked and WinUAE window had no focus + (now available via GUI = can't be totally useless anymore..) +- borderless mode can be dragged by clicking mouse button once, only double click captures mouse +- fixed epson printing emulation blank page when printing multiple text pages and later pages + didn't have any font or font style changes +- more prowizard ripper updates + Beta 13: - addaq.x #x,Ax and subaq.x #x,Ax had too long cycle count (this was really stupid bug) @@ -21,9 +40,6 @@ Beta 13: - directories selected via "favorite menu" also sets default path - prowizard updates -- added ugly joystick/mouse direction status bar pointers (design stolen from Vice and - future AF player skin) Not sure if this was good idea.. - Beta 12: - : without '\' in harddrive paths was detected as a relative path, diff --git a/prowizard/rippers/EurekaPacker.c b/prowizard/rippers/EurekaPacker.c index 2893ab9d..7475414e 100644 --- a/prowizard/rippers/EurekaPacker.c +++ b/prowizard/rippers/EurekaPacker.c @@ -1,8 +1,3 @@ -/* (27 dec 2001) - * added some checks to prevent readings outside of input file (in test 1) - * (May 2002) - * added test_smps() -*/ /* testEUREKA() */ /* Rip_EUREKA() */ /* Depack_EUREKA() */ @@ -12,6 +7,13 @@ #include "extern.h" +/* (27 dec 2001) + * added some checks to prevent readings outside of input file (in test 1) + * (May 2002) + * added test_smps() + * (30/08/10) + * changed #4.3 as the "remaining" patternlist isn't always 0x00 +*/ short testEUREKA ( void ) { /* test 1 */ @@ -84,9 +86,9 @@ short testEUREKA ( void ) PW_k += 2; /* to be sure .. */ while ( PW_k != 128 ) { - if ( in_data[PW_Start_Address+952+PW_k] != 0 ) + if ( in_data[PW_Start_Address+952+PW_k] > 0x64 ) { -/*printf ( "#4,3 (Start:%ld)\n" , PW_Start_Address );*/ +/*printf ( "#4,3 (Start:%ld)(PW_k:%ld)\n" , PW_Start_Address,PW_k );*/ return BAD; } PW_k += 1; diff --git a/prowizard/rippers/KefrensSoundMachine.c b/prowizard/rippers/KefrensSoundMachine.c index 3161c4c4..f1e3827a 100644 --- a/prowizard/rippers/KefrensSoundMachine.c +++ b/prowizard/rippers/KefrensSoundMachine.c @@ -71,7 +71,7 @@ void Rip_KSM ( void ) Save_Rip ( "Kefrens Sound Machine module", KSM ); if ( Save_Status == GOOD ) - PW_i += (OutputSize - 2); /* -1 should do but call it "just to be sure" :) */ + PW_i += 2; /* -1 should do but call it "just to be sure" :) */ } @@ -89,6 +89,9 @@ void Rip_KSM ( void ) * - added transciption for sample names * Another Update : 26 nov 2003 * - used htonl() so that use of addy is now portable on 68k archs + * update 30/08/10 + * - patternlist with only one pattern fixed + * - conversion to STK instead of PTK */ #define ON 1 @@ -196,14 +199,13 @@ void Depack_KSM ( void ) } else { - Whatever[1] = 0x01; - fwrite ( Whatever , 2 , 1 , out ); + c1 = 0x00; + c2 = 0x01; + fwrite ( &c1 , 1 , 1 , out ); + fwrite ( &c2 , 1 , 1 , out ); } Where += 32; } - Whatever[129] = 0x01; - for ( i=0 ; i<16 ; i++ ) - fwrite ( &Whatever[100] , 30 , 1 , out ); /*printf ( "ok\n" );*/ /* pattern list */ @@ -308,11 +310,11 @@ void Depack_KSM ( void ) /* write ID */ - Whatever[0] = 'M'; + /*Whatever[0] = 'M'; Whatever[1] = '.'; Whatever[2] = 'K'; - Whatever[3] = '.'; - fwrite ( Whatever , 4 , 1 , out ); + Whatever[3] = '.';*/ + /*fwrite ( Whatever , 4 , 1 , out );*/ /* pattern data */ /*printf ( "Converting pattern datas " );*/ @@ -371,7 +373,7 @@ void Depack_KSM ( void ) /* crap */ - Crap ( "Kefrens SndMachine" , BAD , BAD , out ); + /*Crap ( "Kefrens SndMachine" , BAD , BAD , out );*/ fflush ( out ); fclose ( out ); diff --git a/prowizard/rippers/NoisePacker1.c b/prowizard/rippers/NoisePacker1.c index 7c72c8a9..5a3396b8 100644 --- a/prowizard/rippers/NoisePacker1.c +++ b/prowizard/rippers/NoisePacker1.c @@ -152,7 +152,7 @@ void Rip_Noisepacker1 ( void ) Save_Rip ( "NoisePacker v1 module", Noisepacker1 ); if ( Save_Status == GOOD ) - PW_i += (OutputSize - 16); /* 15 should do but call it "just to be sure" :) */ + PW_i += 16; /* 15 should do but call it "just to be sure" :) */ } @@ -165,6 +165,8 @@ void Rip_Noisepacker1 ( void ) * Speed-up and Binary smaller. * Update:30/11/99 * - removed fopen() and attached funcs. + * update: 30/08/10 + * - Whatever wasn't cleaned up and was harmful when patternlist size was 1 */ void Depack_Noisepacker1 ( void ) { @@ -262,6 +264,7 @@ void Depack_Noisepacker1 ( void ) /* write noisetracker byte */ Whatever[0] = 0x7f; fwrite ( Whatever , 1 , 1 , out ); + BZERO ( Whatever , 1024 ); /* bypass 2 bytes ... seems always the same as in $02 */ /* & bypass 2 other bytes which meaning is beside me */ -- 2.47.3