From 0c4da63d0c03edc5a0055addbc2e6c362b149c2b Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Thu, 31 Jan 2008 20:54:30 +0200 Subject: [PATCH] imported winuaesrc1460b9.zip --- a2091.c | 4 +- akiko.c | 17 +- ar.c | 17 +- cd32_fmv.c | 215 ++++++++++++++++++++++ cfgfile.c | 19 +- drawing.c | 10 +- expansion.c | 38 ++++ include/akiko.h | 2 +- include/cd32_fmv.h | 2 + include/memory.h | 9 +- include/options.h | 5 +- main.c | 18 +- memory.c | 13 +- od-win32/lcd.c | 14 +- od-win32/lcd.h | 1 + od-win32/resources/winuae.rc | 4 +- od-win32/rp.c | 6 +- od-win32/win32.c | 12 +- od-win32/win32.h | 4 +- od-win32/win32_scale2x.c | 6 - od-win32/win32gfx.c | 15 +- od-win32/win32gui.c | 15 +- od-win32/winuae_msvc/winuae_msvc.8.vcproj | 4 + od-win32/winuae_msvc/winuae_msvc.vcproj | 8 +- od-win32/winuaechangelog.txt | 14 ++ sana2.c | 2 +- 26 files changed, 405 insertions(+), 69 deletions(-) create mode 100644 cd32_fmv.c create mode 100644 include/cd32_fmv.h diff --git a/a2091.c b/a2091.c index 589835f1..799a5f9b 100644 --- a/a2091.c +++ b/a2091.c @@ -1317,12 +1317,12 @@ void a2091_init (void) int i; rom_size = 32768; rombankswitcher = 1; - rom = (uae_u8*)xmalloc (rom_size * 2); + rom = xmalloc (rom_size * 2); for (i = 0; i < rom_size; i++) zfile_fread(rom + i * 2, 1, 1, z); } else { rom_size = 16384; - rom = (uae_u8*)xmalloc (rom_size); + rom = xmalloc (rom_size); zfile_fread (rom, rom_size, 1, z); } zfile_fclose(z); diff --git a/akiko.c b/akiko.c index e428cd01..b59cb733 100644 --- a/akiko.c +++ b/akiko.c @@ -348,6 +348,20 @@ static uae_u32 akiko_c2p_read (int offset) #define AUDIO_STATUS_PLAY_ERROR 0x14 #define AUDIO_STATUS_NO_STATUS 0x15 +#define CH_ERR_BADCOMMAND 0x80 // %10000000 +#define CH_ERR_CHECKSUM 0x88 // %10001000 +#define CH_ERR_DRAWERSTUCK 0x90 // %10010000 +#define CH_ERR_DISKUNREADABLE 0x98 // %10011000 +#define CH_ERR_INVALIDADDRESS 0xa0 // %10100000 +#define CH_ERR_WRONGDATA 0xa8 // %10101000 +#define CH_ERR_FOCUSERROR 0xc8 // %11001000 +#define CH_ERR_SPINDLEERROR 0xd0 // %11010000 +#define CH_ERR_TRACKINGERROR 0xd8 // %11011000 +#define CH_ERR_SLEDERROR 0xe0 // %11100000 +#define CH_ERR_TRACKJUMP 0xe8 // %11101000 +#define CH_ERR_ABNORMALSEEK 0xf0 // %11110000 +#define CH_ERR_NODISK 0xf8 // %11111000 + static uae_u32 cdrom_status1, cdrom_status2; static uae_u8 cdrom_status3; static uae_u32 cdrom_address1, cdrom_address2; @@ -941,7 +955,8 @@ static void cdrom_run_read (void) return; } #if AKIKO_DEBUG_IO_CMD - write_log ("read sector=%d, scnt=%d -> %d\n", cdrom_data_offset, cdrom_sector_counter, sector); + write_log ("read sector=%d, scnt=%d -> %d. %08X\n", + cdrom_data_offset, cdrom_sector_counter, sector, cdrom_address1 + j * 4096); #endif cdrom_readmask_w &= ~(1 << j); } diff --git a/ar.c b/ar.c index 49d11159..d10633fd 100644 --- a/ar.c +++ b/ar.c @@ -1625,8 +1625,12 @@ int action_replay_load (void) if (strlen(currprefs.cartfile) == 0) return 0; rd = getromdatabypath(currprefs.cartfile); - if (rd && rd->id == 62) - return superiv_init(rd, NULL); + if (rd) { + if (rd->id == 62) + return superiv_init(rd, NULL); + if (rd->type & ROMTYPE_CD32CART) + return 0; + } f = zfile_fopen(currprefs.cartfile, "rb"); if (!f) { write_log ("failed to load '%s' cartridge ROM\n", currprefs.cartfile); @@ -1775,8 +1779,13 @@ int hrtmon_load (void) cart_type = CART_AR; hrtmem_start = 0xa10000; rd = getromdatabypath(currprefs.cartfile); - if (rd && rd->id == 63) - isinternal = 1; + if (rd) { + if (rd->id == 63) + isinternal = 1; + if (rd->type & ROMTYPE_CD32CART) + return 0; + } + if (!isinternal) { if (strlen(currprefs.cartfile) == 0) return 0; diff --git a/cd32_fmv.c b/cd32_fmv.c new file mode 100644 index 00000000..f6379d31 --- /dev/null +++ b/cd32_fmv.c @@ -0,0 +1,215 @@ + /* + * UAE - The Un*x Amiga Emulator + * + * CD32 FMV cartridge + * + * Copyright 2008 Toni Wilen + * + */ + +#include "sysconfig.h" +#include "sysdeps.h" + +#include "options.h" +#include "memory.h" +#include "custom.h" +#include "newcpu.h" +#include "zfile.h" +#include "cd32_fmv.h" +#include "uae.h" + +//#define FMV_DEBUG + +static int fmv_mask; +static uae_u8 *rom; +static int rom_size = 262144; +static uaecptr fmv_start = 0x00200000; +static int fmv_size = 1048576; + +static uae_u8 fmv_bget2 (uaecptr addr) +{ +#ifdef FMV_DEBUG + write_log ("fmv_bget2 %08X PC=%8X\n", addr, M68K_GETPC); +#endif + if (addr >= rom_size) { + write_log ("fmv_bget2 %08X PC=%8X\n", addr, M68K_GETPC); + return 0; + } + return rom[addr]; +} +static void fmv_bput2 (uaecptr addr, uae_u8 v) +{ + if (addr >= rom_size && addr < 0xf0000) { + ;//write_log ("fmv_bput2 %08X=%02X PC=%8X\n", addr, v & 0xff, M68K_GETPC); + } +} + +static uae_u32 REGPARAM2 fmv_lget (uaecptr addr) +{ + uae_u32 v; +#ifdef JIT + special_mem |= S_READ; +#endif + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; + v = (fmv_bget2 (addr) << 24) | (fmv_bget2 (addr + 1) << 16) | + (fmv_bget2 (addr + 2) << 8) | (fmv_bget2 (addr + 3)); +#ifdef FMV_DEBUG + write_log ("fmv_lget %08X=%08X PC=%08X\n", addr, v, M68K_GETPC); +#endif + return v; +} + +static uae_u32 REGPARAM2 fmv_wget (uaecptr addr) +{ + uae_u32 v; +#ifdef JIT + special_mem |= S_READ; +#endif + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; + v = (fmv_bget2 (addr) << 8) | fmv_bget2 (addr + 1); +#ifdef FMV_DEBUG + write_log ("fmv_wget %08X=%04X PC=%08X\n", addr, v, M68K_GETPC); +#endif + return v; +} + +static uae_u32 REGPARAM2 fmv_bget (uaecptr addr) +{ + uae_u32 v; +#ifdef JIT + special_mem |= S_READ; +#endif + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; + v = fmv_bget2 (addr); + return v; +} + +static void REGPARAM2 fmv_lput (uaecptr addr, uae_u32 l) +{ +#ifdef JIT + special_mem |= S_WRITE; +#endif + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; +#ifdef FMV_DEBUG + write_log ("fmv_lput %08X=%08X PC=%08X\n", addr, l, M68K_GETPC); +#endif + fmv_bput2 (addr, l >> 24); + fmv_bput2 (addr + 1, l >> 16); + fmv_bput2 (addr + 2, l >> 8); + fmv_bput2 (addr + 3, l); +} + +static void REGPARAM2 fmv_wput (uaecptr addr, uae_u32 w) +{ +#ifdef JIT + special_mem |= S_WRITE; +#endif + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; +#ifdef FMV_DEBUG + write_log ("fmv_wput %04X=%04X PC=%08X\n", addr, w & 65535, M68K_GETPC); +#endif + fmv_bput2 (addr, w >> 8); + fmv_bput2 (addr + 1, w); +} + +static addrbank fmv_bank; + +static void REGPARAM2 fmv_bput (uaecptr addr, uae_u32 b) +{ +#ifdef JIT + special_mem |= S_WRITE; +#endif + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; + fmv_bput2 (addr, b); +} + +static uae_u32 REGPARAM2 fmv_wgeti (uaecptr addr) +{ + uae_u32 v = 0; + uae_u8 *m; +#ifdef JIT + special_mem |= S_READ; +#endif + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; + m = rom + addr; + if (addr < rom_size) + return do_get_mem_word ((uae_u16 *)m); +#ifdef FMV_DEBUG + write_log ("fmv_wgeti %08X %08X PC=%08X\n", addr, v, M68K_GETPC); +#endif + return v; +} + +static uae_u32 REGPARAM2 fmv_lgeti (uaecptr addr) +{ + uae_u32 v = 0; + uae_u8 *m; +#ifdef JIT + special_mem |= S_READ; +#endif + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; + m = rom + addr; + if (addr < rom_size) + return do_get_mem_long ((uae_u32 *)m); +#ifdef FMV_DEBUG + write_log ("fmv_lgeti %08X %08X PC=%08X\n", addr, v, M68K_GETPC); +#endif + return v; +} + +static int REGPARAM2 fmv_check (uaecptr addr, uae_u32 size) +{ + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; + return (addr + size) <= fmv_size; +} + +static uae_u8 *REGPARAM2 fmv_xlate (uaecptr addr) +{ + addr -= fmv_start & fmv_mask; + addr &= fmv_mask; + return rom + addr; +} + +static addrbank fmv_bank = { + fmv_lget, fmv_wget, fmv_bget, + fmv_lput, fmv_wput, fmv_bput, + fmv_xlate, fmv_check, NULL, "CD32 FMV module", + fmv_lgeti, fmv_wgeti, ABFLAG_ROM | ABFLAG_IO +}; + + + +void cd32_fmv_init (uaecptr start) +{ + int ids[] = { 72, -1 }; + struct romlist *rl = getromlistbyids (ids); + struct zfile *z; + + write_log ("CD32 FMV mapped @$%lx\n", start); + if (start != fmv_start) + return; + if (!rl) + return; + write_log ("CD32 FMV ROM '%s' %d.%d\n", rl->path, rl->rd->ver, rl->rd->rev); + z = zfile_fopen(rl->path, "rb"); + if (z) { + rom = mapped_malloc (fmv_size, "fast"); + if (rom) { + zfile_fread(rom, rom_size, 1, z); + zfile_fclose (z); + } + } + fmv_mask = fmv_size - 1; + fmv_bank.baseaddr = rom; + rom[0x282] = 0; + map_banks (&fmv_bank, start >> 16, fmv_size >> 16, 0); +} diff --git a/cfgfile.c b/cfgfile.c index 21580576..2741d493 100644 --- a/cfgfile.c +++ b/cfgfile.c @@ -625,7 +625,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write (f, "z3mem_start=0x%x\n", p->z3fastmem_start); cfgfile_write (f, "bogomem_size=%d\n", p->bogomem_size / 0x40000); cfgfile_write (f, "gfxcard_size=%d\n", p->gfxmem_size / 0x100000); - cfgfile_write (f, "chipmem_size=%d\n", (p->chipmem_size == 0x40000) ? 0 : p->chipmem_size / 0x80000); + cfgfile_write (f, "chipmem_size=%d\n", p->chipmem_size == 0x20000 ? -1 : (p->chipmem_size == 0x40000 ? 0 : p->chipmem_size / 0x80000)); if (p->m68k_speed > 0) cfgfile_write (f, "finegrain_cpu_speed=%d\n", p->m68k_speed); @@ -864,8 +864,10 @@ static int cfgfile_parse_host (struct uae_prefs *p, char *option, char *value) || cfgfile_intval (option, value, "gfx_refreshrate", &p->gfx_refreshrate, 1) || cfgfile_intval (option, value, "gfx_autoresolution", &p->gfx_autoresolution, 1) - || cfgfile_intval (option, value, "gfx_center_horizontal_adjust", &p->gfx_xcenter_adjust, 1) - || cfgfile_intval (option, value, "gfx_center_vertical_adjust", &p->gfx_ycenter_adjust, 1) + || cfgfile_intval (option, value, "gfx_center_horizontal_position", &p->gfx_xcenter_pos, 1) + || cfgfile_intval (option, value, "gfx_center_vertical_position", &p->gfx_ycenter_pos, 1) + || cfgfile_intval (option, value, "gfx_center_horizontal_size", &p->gfx_xcenter_size, 1) + || cfgfile_intval (option, value, "gfx_center_vertical_size", &p->gfx_ycenter_size, 1) #ifdef GFXFILTER || cfgfile_intval (option, value, "gfx_filter_vert_zoom", &p->gfx_filter_vert_zoom, 1) @@ -1409,8 +1411,10 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, char *option, char *valu } if (cfgfile_intval (option, value, "chipmem_size", &dummy, 1)) { - if (!dummy) - p->chipmem_size = 0x40000; + if (dummy < 0) + p->chipmem_size = 0x20000; /* 128k, prototype support */ + else if (dummy == 0) + p->chipmem_size = 0x40000; /* 256k */ else p->chipmem_size = dummy * 0x80000; return 1; @@ -2863,8 +2867,9 @@ void default_prefs (struct uae_prefs *p, int type) p->gfx_afullscreen = 0; p->gfx_pfullscreen = 0; p->gfx_correct_aspect = 0; - p->gfx_xcenter = 0; p->gfx_xcenter_adjust = 0; - p->gfx_ycenter = 0; p->gfx_ycenter_adjust = 0; + p->gfx_xcenter = 0; p->gfx_ycenter = 0; + p->gfx_xcenter_pos = -1; p->gfx_ycenter_pos = -1; + p->gfx_xcenter_size = -1; p->gfx_ycenter_size = -1; p->color_mode = 2; p->x11_use_low_bandwidth = 0; diff --git a/drawing.c b/drawing.c index 6d63ad45..b468e224 100644 --- a/drawing.c +++ b/drawing.c @@ -1979,14 +1979,14 @@ static void center_image (void) if (doublescan) visible_left_border = (max_diwlastword - 48) / 2 - gfxvidinfo.width; } - if (currprefs.gfx_xcenter_adjust > 0) - visible_left_border = currprefs.gfx_xcenter_adjust + (DIW_DDF_OFFSET << currprefs.gfx_resolution); - visible_left_border &= ~((xshift (1, lores_shift)) - 1); + if (currprefs.gfx_xcenter_pos >= 0) + visible_left_border = currprefs.gfx_xcenter_pos + (DIW_DDF_OFFSET << currprefs.gfx_resolution) - (DISPLAY_LEFT_SHIFT * 2 - (DISPLAY_LEFT_SHIFT << currprefs.gfx_resolution)); if (visible_left_border > max_diwlastword - 32) visible_left_border = max_diwlastword - 32; if (visible_left_border < 0) visible_left_border = 0; + visible_left_border &= ~((xshift (1, lores_shift)) - 1); linetoscr_x_adjust_bytes = visible_left_border * gfxvidinfo.pixbytes; @@ -2011,8 +2011,8 @@ static void center_image (void) thisframe_y_adjust = prev_y_adjust; } } - if (currprefs.gfx_ycenter_adjust > 0) { - thisframe_y_adjust = currprefs.gfx_ycenter_adjust; + if (currprefs.gfx_ycenter_pos >= 0) { + thisframe_y_adjust = currprefs.gfx_ycenter_pos; if (thisframe_y_adjust + max_drawn_amiga_line > 2 * maxvpos_max) thisframe_y_adjust = 2 * maxvpos_max - max_drawn_amiga_line; if (thisframe_y_adjust < 0) diff --git a/expansion.c b/expansion.c index e9516bac..a4b7c7a6 100644 --- a/expansion.c +++ b/expansion.c @@ -23,6 +23,7 @@ #include "catweasel.h" #include "cdtv.h" #include "a2091.h" +#include "cd32_fmv.h" #include "ncr_scsi.h" #include "debug.h" @@ -339,6 +340,33 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value) } } +#ifdef CD32 + +static void expamem_map_cd32fmv (void) +{ + uaecptr start = ((expamem_hi | (expamem_lo >> 4)) << 16); + cd32_fmv_init (start); +} + +static void expamem_init_cd32fmv (void) +{ + int ids[] = { 72, -1 }; + struct romlist *rl = getromlistbyids (ids); + struct zfile *z; + + expamem_init_clear (); + if (!rl) + return; + write_log ("CD32 FMV ROM '%s' %d.%d\n", rl->path, rl->rd->ver, rl->rd->rev); + z = zfile_fopen(rl->path, "rb"); + if (z) { + zfile_fread (expamem, 128, 1, z); + zfile_fclose (z); + } +} + +#endif + /* ********************************************************** */ /* @@ -1185,6 +1213,16 @@ void expamem_reset (void) card_map[cardno++] = NULL; } #endif +#ifdef CD32 + if (currprefs.cs_cd32cd && currprefs.fastmem_size == 0 && currprefs.chipmem_size <= 0x200000) { + int ids[] = { 72, -1 }; + struct romlist *rl = getromlistbyids (ids); + if (rl && !strcmp (rl->path, currprefs.cartfile)) { + card_init[cardno] = expamem_init_cd32fmv; + card_map[cardno++] = expamem_map_cd32fmv; + } + } +#endif #ifdef NCR if (currprefs.cs_a4091) { card_init[cardno] = expamem_init_a4091; diff --git a/include/akiko.h b/include/akiko.h index 862073d2..a4a6d78c 100644 --- a/include/akiko.h +++ b/include/akiko.h @@ -13,4 +13,4 @@ extern void AKIKO_hsync_handler (void); extern uae_u8 *extendedkickmemory; -extern void rethink_akiko (void); \ No newline at end of file +extern void rethink_akiko (void); diff --git a/include/cd32_fmv.h b/include/cd32_fmv.h new file mode 100644 index 00000000..458f849d --- /dev/null +++ b/include/cd32_fmv.h @@ -0,0 +1,2 @@ + +extern void cd32_fmv_init (uaecptr); diff --git a/include/memory.h b/include/memory.h index 4b41a572..66ba7693 100644 --- a/include/memory.h +++ b/include/memory.h @@ -344,10 +344,11 @@ extern void a3000_fakekick(int); #define ROMTYPE_HRTMON 2048 #define ROMTYPE_NORDIC 4096 #define ROMTYPE_XPOWER 8192 -#define ROMTYPE_EVEN 16384 -#define ROMTYPE_ODD 32768 -#define ROMTYPE_BYTESWAP 65536 -#define ROMTYPE_SCRAMBLED 131072 +#define ROMTYPE_CD32CART 16384 +#define ROMTYPE_EVEN 131072 +#define ROMTYPE_ODD 262144 +#define ROMTYPE_BYTESWAP 524288 +#define ROMTYPE_SCRAMBLED 1048576 struct romheader { char *name; diff --git a/include/options.h b/include/options.h index 61ccfb83..7caf776f 100644 --- a/include/options.h +++ b/include/options.h @@ -164,8 +164,9 @@ struct uae_prefs { int gfx_linedbl; int gfx_correct_aspect; int gfx_afullscreen, gfx_pfullscreen; - int gfx_xcenter, gfx_xcenter_adjust; - int gfx_ycenter, gfx_ycenter_adjust; + int gfx_xcenter, gfx_ycenter; + int gfx_xcenter_pos, gfx_ycenter_pos; + int gfx_xcenter_size, gfx_ycenter_size; int gfx_saturation, gfx_luminance, gfx_contrast, gfx_gamma; int color_mode; diff --git a/main.c b/main.c index 96e8de4e..cd8af1c0 100644 --- a/main.c +++ b/main.c @@ -107,12 +107,12 @@ void discard_prefs (struct uae_prefs *p, int type) static void fixup_prefs_dim2 (struct wh *wh) { - if (wh->width < 320) - wh->width = 320; - if (wh->height < 200) - wh->height = 200; - if (wh->width > 2048) - wh->width = 2048; + if (wh->width < 160) + wh->width = 160; + if (wh->height < 128) + wh->height = 128; + if (wh->width > 3072) + wh->width = 3072; if (wh->height > 2048) wh->height = 2048; wh->width += 7; @@ -121,6 +121,10 @@ static void fixup_prefs_dim2 (struct wh *wh) void fixup_prefs_dimensions (struct uae_prefs *prefs) { + if (prefs->gfx_xcenter_size > 0) + prefs->gfx_size_win.width = prefs->gfx_xcenter_size << prefs->gfx_resolution; + if (prefs->gfx_ycenter_size > 0) + prefs->gfx_size_win.height = prefs->gfx_ycenter_size << (prefs->gfx_linedbl ? 1 : 0); fixup_prefs_dim2 (&prefs->gfx_size_fs); fixup_prefs_dim2 (&prefs->gfx_size_win); } @@ -164,7 +168,7 @@ void fixup_prefs (struct uae_prefs *p) fixup_cpu (p); if ((p->chipmem_size & (p->chipmem_size - 1)) != 0 - || p->chipmem_size < 0x40000 + || p->chipmem_size < 0x20000 || p->chipmem_size > 0x800000) { write_log ("Unsupported chipmem size %x!\n", p->chipmem_size); diff --git a/memory.c b/memory.c index 7b430134..5855d8ba 100644 --- a/memory.c +++ b/memory.c @@ -28,6 +28,7 @@ #include "enforcer.h" #include "a2091.h" #include "gayle.h" +#include "debug.h" int canbang; int candirect = -1; @@ -117,7 +118,7 @@ struct romdata *getromdatabypath(char *path) return NULL; } -#define NEXT_ROM_ID 72 +#define NEXT_ROM_ID 73 static struct romheader romheaders[] = { { "Freezer Cartridges", 1 }, @@ -191,6 +192,8 @@ static struct romdata roms[] = { 0x87746be2, 0x5BEF3D62,0x8CE59CC0,0x2A66E6E4,0xAE0DA48F,0x60E78F7F }, { "CD32 ROM (KS + extended)", 3, 1, 40, 60, "CD32\0", 2 * 524288, 64, 1, 0, ROMTYPE_KICKCD32 | ROMTYPE_EXTCD32, 0, 0, 0xd3837ae4, 0x06807db3,0x18163745,0x5f4d4658,0x2d9972af,0xec8956d9 }, + { "CD32 MPEG Cartridge ROM", 3, 1, 40, 30, "CD32\0", 262144, 72, 1, 0, ROMTYPE_CD32CART, 0, 0, + 0xc35c37bf, 0x03ca81c7,0xa7b259cf,0x64bc9582,0x863eca0f,0x6529f435 }, { "CDTV extended ROM v1.00", 1, 0, 1, 0, "CDTV\0", 262144, 20, 0, 0, ROMTYPE_EXTCDTV, 0, 0, 0x42baa124, 0x7BA40FFA,0x17E500ED,0x9FED041F,0x3424BD81,0xD9C907BE }, @@ -1830,20 +1833,22 @@ uae_u8 *REGPARAM2 default_xlate (uaecptr a) #if defined(ENFORCER) enforcer_disable (); #endif + if (be_cnt < 3) { int i, j; uaecptr a2 = a - 32; uaecptr a3 = m68k_getpc (®s) - 32; - write_log ("Your Amiga program just did something terribly stupid %08.8X PC=%08.8X\n", a, M68K_GETPC); + write_log ("Your Amiga program just did something terribly stupid %08X PC=%08.8X\n", a, M68K_GETPC); m68k_dumpstate (0, 0); for (i = 0; i < 10; i++) { - write_log ("%08.8X ", i >= 5 ? a3 : a2); + write_log ("%08X ", i >= 5 ? a3 : a2); for (j = 0; j < 16; j += 2) { - write_log (" %04.4X", get_word (i >= 5 ? a3 : a2)); + write_log (" %04X", get_word (i >= 5 ? a3 : a2)); if (i >= 5) a3 += 2; else a2 += 2; } write_log ("\n"); } + memory_map_dump (); } be_cnt++; if (be_cnt > 1000) { diff --git a/od-win32/lcd.c b/od-win32/lcd.c index 6ea0f18f..af632e28 100644 --- a/od-win32/lcd.c +++ b/od-win32/lcd.c @@ -20,6 +20,7 @@ static lgLcdBitmapHeader *lbh; static uae_u8 *bitmap, *origbitmap; static uae_u8 *numbers; static int numbers_width = 7, numbers_height = 10; +static int old_pri; void lcd_close(void) { @@ -39,6 +40,7 @@ static int lcd_init(void) HDC dc; int x, y; + old_pri = 0; ret = lgLcdInit(); if (ret != ERROR_SUCCESS) { if (ret == RPC_S_SERVER_UNAVAILABLE || ret == ERROR_OLD_WIN_VERSION) { @@ -145,6 +147,16 @@ static int coords[] = { 2, 2, 30, 10 // POWER }; +void lcd_priority (int priority) +{ + if (!inited) + return; + if (old_pri == priority) + return; + if (lgLcdSetAsLCDForegroundApp(device, priority ? LGLCD_LCD_FOREGROUND_APP_YES : LGLCD_LCD_FOREGROUND_APP_NO) == ERROR_SUCCESS) + old_pri = priority; +} + void lcd_update(int led, int on) { int track, x, y; @@ -173,7 +185,7 @@ void lcd_update(int led, int on) } else if (led == 7) { y = 2; x = 125; - putnumbers(x, y, gui_data.fps <= 999 ? gui_data.fps / 10 : 99, 0); + putnumbers(x, y, gui_data.fps <= 999 ? (gui_data.fps + 5) / 10 : 99, 0); } else if (led == 8) { y = 2; x = 98; diff --git a/od-win32/lcd.h b/od-win32/lcd.h index 087b6d3e..7b8bb25e 100644 --- a/od-win32/lcd.h +++ b/od-win32/lcd.h @@ -1,3 +1,4 @@ extern int lcd_open(void); extern void lcd_close(void); extern void lcd_update(int, int); +extern void lcd_priority(int); \ No newline at end of file diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 6537db95..d99082c7 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -511,8 +511,10 @@ BEGIN GROUPBOX "Chipset",IDC_STATIC,14,11,145,90 CONTROL "OCS [] Original chipset. A1000 and most A500s.",IDC_OCS, "Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,37,26,51,10 - CONTROL "ECS Agnus [] Enhanced chipset (ECS Agnus chip only). Later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS, + CONTROL "ECS Agnus [] Enhanced chipset (ECS Agnus chip only). CDTV and later A500 and A2000 hardware revisions.",IDC_ECS_AGNUS, "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,42,55,10 + CONTROL "ECS Denise [] Enhanced chipset (ECS Denise chip only). Normally paired with ECS Agnus.",IDC_ECS_DENISE, + "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,100,42,55,10 CONTROL "Full ECS [] Full ECS chipset (ECS Agnus and ECS Denise chips). A500+, A600 and A3000.",IDC_ECS, "Button",BS_AUTORADIOBUTTON | WS_TABSTOP,37,58,52,10 CONTROL "AGA [] Advanced Graphics Architecture chipset. A1200, A4000 and CD32.",IDC_AGA, diff --git a/od-win32/rp.c b/od-win32/rp.c index cb8a8a6a..1adf36d0 100644 --- a/od-win32/rp.c +++ b/od-win32/rp.c @@ -234,9 +234,13 @@ static LRESULT CALLBACK RPHostMsgFunction(UINT uMessage, WPARAM wParam, LPARAM l case RPIPCHM_SCREENCAPTURE: { extern int screenshotf (const char *spath, int mode, int doprepare); + extern int screenshotmode; int ok; + int ossm = screenshotmode; char *s = ua ((WCHAR*)pData); + screenshotmode = 0; ok = screenshotf (s, 1, 1); + screenshotmode = ossm; xfree (s); return ok ? TRUE : FALSE; } @@ -303,7 +307,7 @@ void rp_fixup_options (struct uae_prefs *p) RPSendMessagex(RPIPCGM_FEATURES, RP_FEATURE_POWERLED | RP_FEATURE_SCREEN1X | RP_FEATURE_SCREEN2X | RP_FEATURE_FULLSCREEN | - RP_FEATURE_PAUSE | RP_FEATURE_TURBO | RP_FEATURE_INPUTMODE | RP_FEATURE_VOLUME, + RP_FEATURE_PAUSE | RP_FEATURE_TURBO | RP_FEATURE_INPUTMODE | RP_FEATURE_VOLUME | RP_FEATURE_SCREENCAPTURE, 0, NULL, 0, &guestinfo, NULL); /* floppy drives */ v = 0; diff --git a/od-win32/win32.c b/od-win32/win32.c index 2716af95..2924788a 100644 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -658,7 +658,10 @@ static void winuae_active (HWND hWnd, int minimized) if (minimized) rp_minimize (0); #endif - +#ifdef LOGITECHLCD + if (!minimized) + lcd_priority (1); +#endif } static void winuae_inactive (HWND hWnd, int minimized) @@ -705,6 +708,9 @@ static void winuae_inactive (HWND hWnd, int minimized) if (minimized) rp_minimize (1); #endif +#ifdef LOGITECHLCD + lcd_priority (0); +#endif } void minimizewindow (void) @@ -1622,9 +1628,9 @@ HMODULE language_load(WORD language) int fail = 1; if (language == 0x400) - sprintf (dllbuf, "%sguidll.dll", start_path_exe); + strcpy (dllbuf, "guidll.dll"); else - sprintf (dllbuf, "%sWinUAE_%s.dll", start_path_exe, dllname); + sprintf (dllbuf, "WinUAE_%s.dll", dllname); result = WIN32_LoadLibrary (dllbuf); if (result) { dwFileVersionInfoSize = GetFileVersionInfoSize(dllbuf, &dwVersionHandle); diff --git a/od-win32/win32.h b/od-win32/win32.h index 9b02b1dd..caad7074 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -15,9 +15,9 @@ #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100) #define GETBDD(x) ((x) % 100) -#define WINUAEBETA 8 +#define WINUAEBETA 9 #define WINUAEPUBLICBETA 1 -#define WINUAEDATE MAKEBD(2008, 1, 24) +#define WINUAEDATE MAKEBD(2008, 1, 31) #define WINUAEEXTRA "" #define WINUAEREV "" diff --git a/od-win32/win32_scale2x.c b/od-win32/win32_scale2x.c index 349c51dc..4f1b8f73 100644 --- a/od-win32/win32_scale2x.c +++ b/od-win32/win32_scale2x.c @@ -208,12 +208,6 @@ void S2X_render (void) sr.bottom = sr.top + dst_height; } - if (currprefs.gfx_filter_upscale) { - dr.left = dr.top = 0; - dr.right = dst_width; - dr.bottom = dst_height; - } - if (tempsurf && sr.left != 0 || sr.top != 0 || sr.right != dst_width || sr.bottom != dst_height || dr.top != 0 || dr.right != dst_width || dr.left != 0 || dr.bottom != dst_height || currprefs.gfx_filter_upscale) { dds = DirectDrawState.temporary.surface; diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index fe9742be..d9f3906f 100644 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -1200,16 +1200,23 @@ int check_prefs_changed_gfx (void) } if (currprefs.gfx_correct_aspect != changed_prefs.gfx_correct_aspect || - currprefs.gfx_xcenter_adjust != changed_prefs.gfx_xcenter_adjust || - currprefs.gfx_ycenter_adjust != changed_prefs.gfx_ycenter_adjust || + currprefs.gfx_xcenter_pos != changed_prefs.gfx_xcenter_pos || + currprefs.gfx_ycenter_pos != changed_prefs.gfx_ycenter_pos || + currprefs.gfx_xcenter_size != changed_prefs.gfx_xcenter_size || + currprefs.gfx_ycenter_size != changed_prefs.gfx_ycenter_size || currprefs.gfx_xcenter != changed_prefs.gfx_xcenter || currprefs.gfx_ycenter != changed_prefs.gfx_ycenter) { currprefs.gfx_correct_aspect = changed_prefs.gfx_correct_aspect; - currprefs.gfx_xcenter_adjust = changed_prefs.gfx_xcenter_adjust; - currprefs.gfx_ycenter_adjust = changed_prefs.gfx_ycenter_adjust; + currprefs.gfx_xcenter_pos = changed_prefs.gfx_xcenter_pos; + currprefs.gfx_ycenter_pos = changed_prefs.gfx_ycenter_pos; + currprefs.gfx_xcenter_size = changed_prefs.gfx_xcenter_size; + currprefs.gfx_ycenter_size = changed_prefs.gfx_ycenter_size; currprefs.gfx_xcenter = changed_prefs.gfx_xcenter; currprefs.gfx_ycenter = changed_prefs.gfx_ycenter; + + fixup_prefs_dimensions (&changed_prefs); + return 1; } diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index 03385d28..fb70139f 100644 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -4133,11 +4133,9 @@ static void values_to_chipsetdlg (HWND hDlg) case CSMASK_ECS_AGNUS: CheckRadioButton(hDlg, IDC_OCS, IDC_AGA, IDC_OCS + 1); break; -#if 0 case CSMASK_ECS_DENISE: CheckRadioButton(hDlg, IDC_OCS, IDC_AGA, IDC_OCS + 2); break; -#endif case CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE: CheckRadioButton(hDlg, IDC_OCS, IDC_AGA, IDC_OCS + 3); break; @@ -4199,12 +4197,10 @@ static void values_from_chipsetdlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l workprefs.collision_level = IsDlgButtonChecked (hDlg, IDC_COLLISION0) ? 0 : IsDlgButtonChecked (hDlg, IDC_COLLISION1) ? 1 : IsDlgButtonChecked (hDlg, IDC_COLLISION2) ? 2 : 3; - workprefs.chipset_mask = IsDlgButtonChecked( hDlg, IDC_OCS ) ? 0 - : IsDlgButtonChecked( hDlg, IDC_ECS_AGNUS ) ? CSMASK_ECS_AGNUS -#if 0 - : IsDlgButtonChecked( hDlg, IDC_ECS_DENISE ) ? CSMASK_ECS_DENISE -#endif - : IsDlgButtonChecked( hDlg, IDC_ECS ) ? CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE + workprefs.chipset_mask = IsDlgButtonChecked (hDlg, IDC_OCS) ? 0 + : IsDlgButtonChecked (hDlg, IDC_ECS_AGNUS) ? CSMASK_ECS_AGNUS + : IsDlgButtonChecked (hDlg, IDC_ECS_DENISE) ? CSMASK_ECS_DENISE + : IsDlgButtonChecked (hDlg, IDC_ECS) ? CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE : CSMASK_AGA | CSMASK_ECS_AGNUS | CSMASK_ECS_DENISE; n = IsDlgButtonChecked (hDlg, IDC_NTSC) ? 1 : 0; if (workprefs.ntscmode != n) { @@ -4773,7 +4769,7 @@ static void values_to_kickstartdlg (HWND hDlg) addromfiles (fkey, hDlg, IDC_ROMFILE2, workprefs.romextfile, ROMTYPE_EXTCD32 | ROMTYPE_EXTCDTV | ROMTYPE_ARCADIABIOS); addromfiles (fkey, hDlg, IDC_CARTFILE, workprefs.cartfile, - ROMTYPE_AR | ROMTYPE_SUPERIV | ROMTYPE_NORDIC | ROMTYPE_XPOWER | ROMTYPE_ARCADIAGAME | ROMTYPE_HRTMON); + ROMTYPE_AR | ROMTYPE_SUPERIV | ROMTYPE_NORDIC | ROMTYPE_XPOWER | ROMTYPE_ARCADIAGAME | ROMTYPE_HRTMON | ROMTYPE_CD32CART); regclosetree (fkey); SetDlgItemText(hDlg, IDC_FLASHFILE, workprefs.flashfile); @@ -8483,6 +8479,7 @@ static void enable_for_hw3ddlg (HWND hDlg) ew (hDlg, IDC_FILTERPRESETSAVE, filterpreset_builtin < 0); ew (hDlg, IDC_FILTERPRESETLOAD, filterpreset_selected > 0); ew (hDlg, IDC_FILTERPRESETDELETE, filterpreset_selected > 0 && filterpreset_builtin < 0); + CheckDlgButton(hDlg, IDC_FILTERUPSCALE, workprefs.gfx_filter_upscale); } static void makefilter(char *s, int x, int flags) diff --git a/od-win32/winuae_msvc/winuae_msvc.8.vcproj b/od-win32/winuae_msvc/winuae_msvc.8.vcproj index cacf53b8..5aef5009 100644 --- a/od-win32/winuae_msvc/winuae_msvc.8.vcproj +++ b/od-win32/winuae_msvc/winuae_msvc.8.vcproj @@ -1285,6 +1285,10 @@ RelativePath="..\caps\caps_win32.c" > + + diff --git a/od-win32/winuae_msvc/winuae_msvc.vcproj b/od-win32/winuae_msvc/winuae_msvc.vcproj index 0b63883a..9403eec8 100644 --- a/od-win32/winuae_msvc/winuae_msvc.vcproj +++ b/od-win32/winuae_msvc/winuae_msvc.vcproj @@ -1633,6 +1633,10 @@ RelativePath="..\..\catweasel.c" > + + @@ -2519,10 +2523,6 @@ RelativePath="..\hq2x32.obj" > - - diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 1f72a23b..a39f38ae 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -3,6 +3,20 @@ 1.4.6 will be the last Windows 98/ME compatible version. 1.5.0 will require Windows 2000 or newer. +Beta 9: + +- CD32 FMV cartridge "supported" (Actually it is a Z2 board). CD32 FMV + ROM checksums added to scanner. Completely unusable currently. + CD32 Cannon Fodder will try to play video, of course nothing can be + seen or heard :) +- ECS Denise (without ECS Agnus) option re-added. Confirmed working + configuration (except superhires, OCS Agnus does not know shres + bitplane DMA sequence, result is vertical stripes. This "feature" + is not emulated) +- full screen filter GUI checkbox was not initialized correctly +- small fullscreen filter tweak +- set foreground Logitech LCD priority when WinUAE has focus + Beta 8: - input-panel NMI and END+SHIFT+Break NMI was unstable in diff --git a/sana2.c b/sana2.c index 9ce367e3..50a3aaf5 100644 --- a/sana2.c +++ b/sana2.c @@ -1211,7 +1211,7 @@ static int dev_do_io (struct devstruct *dev, uaecptr request, int quick) } end: - if (log_net) + if (log_net && (io_error || wire_error)) write_log("-> %d (%d)\n", io_error, wire_error); put_long (request + 32, wire_error); put_byte (request + 31, io_error); -- 2.47.3