From: Toni Wilen Date: Sun, 5 Apr 2015 13:23:14 +0000 (+0300) Subject: 3100b15 X-Git-Tag: 3100~51 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=94f9bf0a15435a44f7ce156b7ab029fac2ed926e;p=francis%2Fwinuae.git 3100b15 --- diff --git a/a2091.cpp b/a2091.cpp index 6181a5ae..4213b1f5 100644 --- a/a2091.cpp +++ b/a2091.cpp @@ -3661,9 +3661,20 @@ static addrbank *gvp_init(struct romconfig *rc, bool series2, bool accel) int size = zfile_size(z); if (series2) { int total = 0; - while (total < 32768) { + int seekpos = 0; + int size = zfile_size(z); + if (size > 16384 + 4096) { + zfile_fread(wd->rom, 64, 1, z); + zfile_fseek(z, 16384, SEEK_SET); + zfile_fread(wd->rom + 64, 64, 1, z); + if (!memcmp(wd->rom, wd->rom + 64, 64)) + wd->rombankswitcher = true; + else + seekpos = 16384; + } + while (total < 32768 - 4096) { int prevtotal = total; - zfile_fseek(z, 0, SEEK_SET); + zfile_fseek(z, seekpos, SEEK_SET); total += zfile_fread(wd->rom + total, 1, wd->rom_size - total >= wd->rom_size ? wd->rom_size : wd->rom_size - total, z); if (prevtotal == total) break; @@ -3688,9 +3699,6 @@ static addrbank *gvp_init(struct romconfig *rc, bool series2, bool accel) } } zfile_fclose(z); - if (series2 && size > 16384) { - wd->rombankswitcher = 1; - } } else { isscsi = false; } diff --git a/cfgfile.cpp b/cfgfile.cpp index 0fbcb8d5..654a6d6b 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -181,7 +181,7 @@ static const TCHAR *maxvert[] = { _T("nointerlace"), _T("interlace"), 0 }; static const TCHAR *abspointers[] = { _T("none"), _T("mousehack"), _T("tablet"), 0 }; static const TCHAR *magiccursors[] = { _T("both"), _T("native"), _T("host"), 0 }; static const TCHAR *autoscale[] = { _T("none"), _T("auto"), _T("standard"), _T("max"), _T("scale"), _T("resize"), _T("center"), _T("manual"), - _T("integer"), _T("half-integer"), _T("integer_auto"), _T("half-integer_auto"), 0 }; + _T("integer"), _T("half-integer"), _T("integer_auto"), _T("half-integer_auto"), _T("separator"), _T("overscan_blanking"), 0 }; static const TCHAR *autoscale_rtg[] = { _T("resize"), _T("scale"), _T("center"), _T("integer"), 0 }; static const TCHAR *joyportmodes[] = { _T(""), _T("mouse"), _T("mousenowheel"), _T("djoy"), _T("gamepad"), _T("ajoy"), _T("cdtvjoy"), _T("cd32joy"), _T("lightpen"), 0 }; static const TCHAR *joyaf[] = { _T("none"), _T("normal"), _T("toggle"), _T("always"), 0 }; @@ -3936,6 +3936,8 @@ invalid_fs: bool cfgfile_board_enabled(struct uae_prefs *p, int romtype, int devnum) { int idx; + if (romtype == ROMTYPE_CPUBOARD && currprefs.cpuboard_type) + return true; struct boardromconfig *brc = get_device_rom(p, romtype, devnum, &idx); if (!brc) return false; @@ -3977,6 +3979,7 @@ static bool cfgfile_read_board_rom(struct uae_prefs *p, const TCHAR *option, con } _stprintf(buf, _T("%s_rom_file_id"), name); + buf2[0] = 0; if (cfgfile_rom (option, value, buf, buf2, MAX_DPATH / sizeof (TCHAR))) { if (buf2[0]) { brc = get_device_rom_new(p, ert->romtype, j, &idx); diff --git a/cpuboard.cpp b/cpuboard.cpp index 7a3bfc95..a79f20c1 100644 --- a/cpuboard.cpp +++ b/cpuboard.cpp @@ -285,6 +285,10 @@ static bool is_kupke(void) { return ISCPUBOARD(BOARD_KUPKE, 0); } +static bool is_aca500(void) +{ + return ISCPUBOARD(BOARD_IC, BOARD_IC_ACA500); +} DECLARE_MEMORY_FUNCTIONS(blizzardio); static addrbank blizzardio_bank = { @@ -902,7 +906,6 @@ void blizzardppc_irq(int level) cpuboard_rethink(); } - static uae_u32 REGPARAM2 blizzardio_bget(uaecptr addr) { uae_u8 v = 0; @@ -953,6 +956,41 @@ static uae_u32 REGPARAM2 blizzardio_wget(uaecptr addr) if (is_csmk3() || is_blizzardppc()) { ;//write_log(_T("CS IO WGET %08x\n"), addr); //activate_debugger(); + } else if (is_aca500()) { + addr &= 0x3f000; + switch (addr) + { + case 0x03000: + return 0; + case 0x07000: + return 0; + case 0x0b000: + return 0; + case 0x0f000: + return 0; + case 0x13000: + return 0; + case 0x17000: + return 0; + case 0x1b000: + return 0x8000; + case 0x1f000: + return 0x8000; + case 0x23000: + return 0; + case 0x27000: + return 0; + case 0x2b000: + return 0; + case 0x2f000: + return 0; + case 0x33000: + return 0x8000; + case 0x37000: + return 0; + case 0x3b000: + return 0; + } } return 0; } @@ -1311,6 +1349,20 @@ void cpuboard_map(void) if (is_apollo()) { map_banks(&blizzardf0_bank, 0xf00000 >> 16, 131072 >> 16, 0); } + if (is_dkb()) { + if (cpuboard_size >= 4 * 1024 * 1024) { + if (cpuboard_size <= 0x4000000) { + map_banks(&blizzardram_bank, blizzardram_bank.start >> 16, 0x4000000 >> 16, cpuboard_size >> 16); + } else { + map_banks(&blizzardram_bank, blizzardram_bank.start >> 16, cpuboard_size >> 16, 0); + } + } + } + if (is_aca500()) { + map_banks(&blizzardf0_bank, 0xf00000 >> 16, 524288 >> 16, 0); + map_banks(&blizzardf0_bank, 0xa00000 >> 16, 524288 >> 16, 0); + map_banks(&blizzardio_bank, 0xb00000 >> 16, 262144 >> 16, 0); + } } void cpuboard_reset(void) @@ -1393,7 +1445,14 @@ void cpuboard_init(void) cpuboard_size = currprefs.cpuboardmem1_size; - if (is_a2630()) { + if (is_aca500()) { + + blizzardf0_bank.start = 0x00f00000; + blizzardf0_bank.allocated = 524288; + blizzardf0_bank.mask = blizzardf0_bank.allocated - 1; + mapped_malloc(&blizzardf0_bank); + + } else if (is_a2630()) { blizzardf0_bank.start = 0x00f00000; blizzardf0_bank.allocated = 131072; @@ -1404,6 +1463,15 @@ void cpuboard_init(void) blizzardea_bank.mask = blizzardea_bank.allocated - 1; mapped_malloc(&blizzardea_bank); + } else if (is_dkb()) { + + blizzardram_bank.start = 0x10000000; + blizzardram_bank.allocated = cpuboard_size; + blizzardram_bank.mask = blizzardram_bank.allocated - 1; + blizzardram_bank.startmask = 0x10000000; + blizzardram_bank.label = _T("dkb"); + mapped_malloc(&blizzardram_bank); + } else if (is_kupke()) { blizzardea_bank.allocated = 65536; @@ -1592,15 +1660,14 @@ void cpuboard_init(void) void cpuboard_overlay_override(void) { - if (!is_a2630()) - return; - if (!(a2630_io & 2)) - map_banks(&blizzardf0_bank, 0xf80000 >> 16, f0rom_size >> 16, 0); - if (mem25bit_bank.allocated) - map_banks(&chipmem_bank, (mem25bit_bank.start + mem25bit_bank.allocated) >> 16, (1024 * 1024) >> 16, 0); - else - map_banks(&chipmem_bank, 0x01000000 >> 16, (1024 * 1024) >> 16, 0); - + if (is_a2630()) { + if (!(a2630_io & 2)) + map_banks(&blizzardf0_bank, 0xf80000 >> 16, f0rom_size >> 16, 0); + if (mem25bit_bank.allocated) + map_banks(&chipmem_bank, (mem25bit_bank.start + mem25bit_bank.allocated) >> 16, (1024 * 1024) >> 16, 0); + else + map_banks(&chipmem_bank, 0x01000000 >> 16, (1024 * 1024) >> 16, 0); + } } void cpuboard_clear(void) @@ -1679,6 +1746,10 @@ bool cpuboard_jitdirectompatible(struct uae_prefs *p) bool cpuboard_32bit(struct uae_prefs *p) { int b = cpuboard_memorytype(p); + if (p->cpuboard_type) { + if (!(cpuboards[p->cpuboard_type].subtypes[p->cpuboard_subtype].deviceflags & EXPANSIONTYPE_24BIT)) + return true; + } return b == BOARD_MEMORY_HIGHMEM || b == BOARD_MEMORY_BLIZZARD_12xx || b == BOARD_MEMORY_BLIZZARD_PPC || @@ -1714,6 +1785,17 @@ void cpuboard_setboard(struct uae_prefs *p, int type, int subtype) } } +uaecptr cpuboard_get_reset_pc(uaecptr *stack) +{ + if (is_aca500()) { + *stack = get_long(0xa00000); + return get_long(0xa00004); + } else { + *stack = get_long(0); + return get_long(4); + } +} + bool cpuboard_io_special(int addr, uae_u32 *val, int size, bool write) { addr &= 65535; @@ -1916,6 +1998,9 @@ addrbank *cpuboard_autoconfig_init(struct romconfig *rc) int boardid = cpuboards[currprefs.cpuboard_type].id; switch (boardid) { + case BOARD_IC: + break; + case BOARD_COMMODORE: switch(currprefs.cpuboard_subtype) { @@ -2069,7 +2154,7 @@ addrbank *cpuboard_autoconfig_init(struct romconfig *rc) return &expamem_null; } } - + if (!autoconfig_rom && roms[0] != -1) { romwarning(roms); write_log (_T("ROM id %d not found for CPUBoard '%s' emulation\n"), roms[0], boardname); @@ -2084,7 +2169,16 @@ addrbank *cpuboard_autoconfig_init(struct romconfig *rc) protect_roms(false); cpuboard_non_byte_ea = true; - if (is_a2630()) { + if (is_aca500()) { + f0rom_size = 524288; + zfile_fread(blizzardf0_bank.baseaddr, f0rom_size, 1, autoconfig_rom); + autoconf = false; + if (zfile_needwrite(autoconfig_rom)) { + flashrom_file = autoconfig_rom; + autoconfig_rom = NULL; + } + flashrom = flash_new(blizzardf0_bank.baseaddr, f0rom_size, f0rom_size, 0xa4, flashrom_file); + } else if (is_a2630()) { f0rom_size = 131072; zfile_fread(blizzardf0_bank.baseaddr, 1, f0rom_size, autoconfig_rom); autoconf = false; diff --git a/expansion.cpp b/expansion.cpp index 1de654b2..2aed10e9 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -2294,7 +2294,7 @@ const struct expansionromtype expansionroms[] = { _T("oktagon2008"), _T("Oktagon 2008"), _T("BSC/Alfa Data"), ncr_oktagon_autoconfig_init, oktagon_add_scsi_unit, ROMTYPE_OKTAGON, 0, 0, 2, false, NULL, 0, - false, EXPANSIONTYPE_SCSI + true, EXPANSIONTYPE_SCSI }, { _T("alfapower"), _T("AlfaPower/AT-Bus 2008"), _T("BSC/Alfa Data"), @@ -2427,7 +2427,7 @@ static const struct cpuboardsubtype gvpboard_sub[] = { _T("A3001 Series I"), _T("A3001SI"), ROMTYPE_CB_A3001S1, 0, - gvp_add_ide_unit, EXPANSIONTYPE_IDE, + gvp_add_ide_unit, EXPANSIONTYPE_IDE | EXPANSIONTYPE_24BIT, BOARD_MEMORY_Z2, 8 * 1024 * 1024, 0, @@ -2437,7 +2437,7 @@ static const struct cpuboardsubtype gvpboard_sub[] = { _T("A3001 Series II"), _T("A3001SII"), 0, 0, - gvp_add_ide_unit, EXPANSIONTYPE_IDE, + gvp_add_ide_unit, EXPANSIONTYPE_IDE | EXPANSIONTYPE_24BIT, BOARD_MEMORY_Z2, 8 * 1024 * 1024, 0, @@ -2447,7 +2447,7 @@ static const struct cpuboardsubtype gvpboard_sub[] = { _T("A530"), _T("GVPA530"), ROMTYPE_GVPS2, 0, - gvp_s2_add_scsi_unit, EXPANSIONTYPE_SCSI, + gvp_s2_add_scsi_unit, EXPANSIONTYPE_SCSI | EXPANSIONTYPE_24BIT, BOARD_MEMORY_Z2, 8 * 1024 * 1024, 0, @@ -2605,7 +2605,7 @@ static const struct cpuboardsubtype dbk_sub[] = { _T("DKB12x0"), ROMTYPE_CB_DKB12x0, 0, cpuboard_dkb_add_scsi_unit, EXPANSIONTYPE_SCSI, - BOARD_MEMORY_HIGHMEM, + 0, 128 * 1024 * 1024, 0, ncr_dkb_autoconfig_init, NULL, 2, 0 @@ -2655,6 +2655,17 @@ static const struct cpuboardsubtype kupkeboard_sub[] = { NULL } }; +static const struct cpuboardsubtype icboard_sub[] = { + { + _T("ACA 500"), + _T("aca500"), + ROMTYPE_CB_ACA500, 0, + NULL, EXPANSIONTYPE_24BIT + }, + { + NULL + } +}; static const struct cpuboardsubtype dummy_sub[] = { { NULL } @@ -2711,6 +2722,13 @@ const struct cpuboardtype cpuboards[] = { _T("Kupke"), kupkeboard_sub, 0 }, +#if 0 + { + BOARD_IC, + _T("Individual Computers"), + icboard_sub, 0 + }, +#endif { NULL } diff --git a/filesys.cpp b/filesys.cpp index cdb9d685..35df4b90 100644 --- a/filesys.cpp +++ b/filesys.cpp @@ -794,6 +794,7 @@ static void allocuci (struct uae_prefs *p, int nr, int idx) } static int cpuboard_hd; +static romconfig cpuboard_dummy; void add_cpuboard_unit(int unit, struct uaedev_config_info *uci, struct romconfig *rc) { @@ -815,16 +816,18 @@ void add_cpuboard_unit(int unit, struct uaedev_config_info *uci, struct romconfi static void add_cpuboard_unit_init(void) { + memset(&cpuboard_dummy, 0, sizeof cpuboard_dummy); + cpuboard_dummy.device_id = 7; if (currprefs.cpuboard_type) { struct romconfig *rc = get_device_romconfig(&currprefs, ROMTYPE_CPUBOARD, 0); - if (rc) { - const struct cpuboardtype *cbt = &cpuboards[currprefs.cpuboard_type]; - if (cbt->subtypes) { - if (cbt->subtypes[currprefs.cpuboard_subtype].add) { - struct uaedev_config_info ci = { 0 }; - write_log(_T("Initializing CPUBoard '%s' HD controller\n"), cbt->subtypes[currprefs.cpuboard_subtype].name); - cbt->subtypes[currprefs.cpuboard_subtype].add(-1, &ci, rc); - } + if (!rc) + rc = &cpuboard_dummy; + const struct cpuboardtype *cbt = &cpuboards[currprefs.cpuboard_type]; + if (cbt->subtypes) { + if (cbt->subtypes[currprefs.cpuboard_subtype].add) { + struct uaedev_config_info ci = { 0 }; + write_log(_T("Initializing CPUBoard '%s' HD controller\n"), cbt->subtypes[currprefs.cpuboard_subtype].name); + cbt->subtypes[currprefs.cpuboard_subtype].add(-1, &ci, rc); } } } diff --git a/include/autoconf.h b/include/autoconf.h index c5bbc2dc..cdb488ca 100644 --- a/include/autoconf.h +++ b/include/autoconf.h @@ -108,6 +108,7 @@ typedef void(*DEVICE_ADD)(int, struct uaedev_config_info*, struct romconfig*); typedef bool(*E8ACCESS)(int, uae_u32*, int, bool); #define EXPANSIONTYPE_SCSI 1 #define EXPANSIONTYPE_IDE 2 +#define EXPANSIONTYPE_24BIT 4 struct expansionboardsettings { const TCHAR *name; diff --git a/include/cpuboard.h b/include/cpuboard.h index 19549267..d874d0c3 100644 --- a/include/cpuboard.h +++ b/include/cpuboard.h @@ -17,6 +17,7 @@ extern bool is_ppc_cpu(struct uae_prefs *); extern bool cpuboard_io_special(int addr, uae_u32 *val, int size, bool write); extern void cpuboard_overlay_override(void); extern void cpuboard_setboard(struct uae_prefs *p, int type, int subtype); +extern uaecptr cpuboard_get_reset_pc(uaecptr *stack); extern bool ppc_interrupt(int new_m68k_ipl); @@ -61,4 +62,7 @@ extern uae_u8 *REGPARAM3 cyberstorm_scsi_ram_xlate(uaecptr addr) REGPARAM; #define BOARD_GVP_SUB_GFORCE030 3 #define BOARD_GVP_SUB_TEKMAGIC 4 #define BOARD_KUPKE 9 +#define BOARD_IC 10 +#define BOARD_IC_ACA500 0 + diff --git a/include/custom.h b/include/custom.h index 5aaa7120..d3d8a9d3 100644 --- a/include/custom.h +++ b/include/custom.h @@ -233,6 +233,7 @@ uae_u16 customhack_get (struct customhack *ch, int hpos); extern void alloc_cycle_ext (int, int); extern void alloc_cycle_blitter (int hpos, uaecptr *ptr, int); extern bool ispal (void); +extern bool isvga (void); extern int current_maxvpos (void); extern struct chipset_refresh *get_chipset_refresh (void); extern void compute_framesync (void); diff --git a/include/drawing.h b/include/drawing.h index 0666384a..319f86ca 100644 --- a/include/drawing.h +++ b/include/drawing.h @@ -285,6 +285,7 @@ extern bool draw_frame (struct vidbuffer*); extern int get_custom_limits (int *pw, int *ph, int *pdx, int *pdy, int *prealh); extern void store_custom_limits (int w, int h, int dx, int dy); extern void set_custom_limits (int w, int h, int dx, int dy); +extern void check_custom_limits (void); extern void get_custom_topedge (int *x, int *y, bool max); extern void get_custom_raw_limits (int *pw, int *ph, int *pdx, int *pdy); extern void putpixel (uae_u8 *buf, int bpp, int x, xcolnr c8, int opaq); diff --git a/memory.cpp b/memory.cpp index a361b919..fc888492 100644 --- a/memory.cpp +++ b/memory.cpp @@ -809,7 +809,7 @@ MEMORY_FUNCTIONS(cardmem); MEMORY_FUNCTIONS(a3000lmem); MEMORY_FUNCTIONS(a3000hmem); -/* 25bit memory (0x10000000) */ +/* 25bit memory (0x01000000) */ MEMORY_FUNCTIONS(mem25bit); diff --git a/ncr9x_scsi.cpp b/ncr9x_scsi.cpp index 8af62c56..fbc436ce 100644 --- a/ncr9x_scsi.cpp +++ b/ncr9x_scsi.cpp @@ -604,6 +604,8 @@ static bool isncr(struct ncr9x_state *ncr, struct ncr9x_state **arr) static void ncr9x_io_bput(struct ncr9x_state *ncr, uaecptr addr, uae_u32 val) { int reg_shift = 2; + uaecptr oldaddr = addr; + addr &= ncr->board_mask; if (isncr(ncr, ncr_masoboshi_scsi)) { @@ -773,7 +775,7 @@ static void ncr9x_io_bput(struct ncr9x_state *ncr, uaecptr addr, uae_u32 val) if (ncr->dma_cnt == 0) esp_dma_enable(ncr->devobject.lsistate, 1); } - //write_log(_T("Blizzard DMA PUT %08x %02X\n"), addr, (uae_u8)val); + //write_log(_T("Blizzard DMA PUT %08x %02X\n"), oldaddr, (uae_u8)val); return; } } else if (ISCPUBOARD(BOARD_CYBERSTORM, BOARD_CYBERSTORM_SUB_MK1)) { @@ -833,7 +835,7 @@ static void ncr9x_io_bput(struct ncr9x_state *ncr, uaecptr addr, uae_u32 val) addr >>= reg_shift; addr &= IO_MASK; #if NCR_DEBUG > 1 - write_log(_T("ESP write %02X %02X %08X\n"), addr, val & 0xff, M68K_GETPC); + write_log(_T("ESP write %02X (%08X) %02X %08X\n"), addr, oldaddr, val & 0xff, M68K_GETPC); #endif esp_reg_write(ncr->devobject.lsistate, (addr), val); } @@ -842,6 +844,8 @@ uae_u32 ncr9x_io_bget(struct ncr9x_state *ncr, uaecptr addr) { uae_u8 v = 0xff; int reg_shift = 2; + uaecptr oldaddr = addr; + addr &= ncr->board_mask; if (isncr(ncr, ncr_masoboshi_scsi)) { @@ -1005,7 +1009,7 @@ uae_u32 ncr9x_io_bget(struct ncr9x_state *ncr, uaecptr addr) addr &= IO_MASK; v = esp_reg_read(ncr->devobject.lsistate, (addr)); #if NCR_DEBUG > 1 - write_log(_T("ESP read %02X %02X %08X\n"), addr, v, M68K_GETPC); + write_log(_T("ESP read %02X (%08X) %02X %08X\n"), addr, oldaddr, v, M68K_GETPC); #endif return v; } diff --git a/ncr_scsi.cpp b/ncr_scsi.cpp index 95f8266c..febe2581 100644 --- a/ncr_scsi.cpp +++ b/ncr_scsi.cpp @@ -451,22 +451,24 @@ static uae_u32 ncr_bget2 (struct ncr_state *ncr, uaecptr addr) static uae_u32 REGPARAM2 ncr_lget (struct ncr_state *ncr, uaecptr addr) { - uae_u32 v; + uae_u32 v = 0; #ifdef JIT special_mem |= S_READ; #endif - addr &= ncr->board_mask; - if (ncr == ncr_we) { - addr &= ~0x80; - v = (ncr_bget2(ncr, addr + 3) << 0) | (ncr_bget2(ncr, addr + 2) << 8) | - (ncr_bget2(ncr, addr + 1) << 16) | (ncr_bget2(ncr, addr + 0) << 24); - } else { - if (addr >= A4091_IO_ALT) { - v = (ncr_bget2 (ncr, addr + 3) << 0) | (ncr_bget2 (ncr, addr + 2) << 8) | - (ncr_bget2 (ncr, addr + 1) << 16) | (ncr_bget2 (ncr, addr + 0) << 24); + if (ncr) { + addr &= ncr->board_mask; + if (ncr == ncr_we) { + addr &= ~0x80; + v = (ncr_bget2(ncr, addr + 3) << 0) | (ncr_bget2(ncr, addr + 2) << 8) | + (ncr_bget2(ncr, addr + 1) << 16) | (ncr_bget2(ncr, addr + 0) << 24); } else { - v = (ncr_bget2 (ncr, addr + 3) << 0) | (ncr_bget2 (ncr, addr + 2) << 8) | - (ncr_bget2 (ncr, addr + 1) << 16) | (ncr_bget2 (ncr, addr + 0) << 24); + if (addr >= A4091_IO_ALT) { + v = (ncr_bget2 (ncr, addr + 3) << 0) | (ncr_bget2 (ncr, addr + 2) << 8) | + (ncr_bget2 (ncr, addr + 1) << 16) | (ncr_bget2 (ncr, addr + 0) << 24); + } else { + v = (ncr_bget2 (ncr, addr + 3) << 0) | (ncr_bget2 (ncr, addr + 2) << 8) | + (ncr_bget2 (ncr, addr + 1) << 16) | (ncr_bget2 (ncr, addr + 0) << 24); + } } } return v; @@ -474,28 +476,32 @@ static uae_u32 REGPARAM2 ncr_lget (struct ncr_state *ncr, uaecptr addr) static uae_u32 REGPARAM2 ncr_wget (struct ncr_state *ncr, uaecptr addr) { - uae_u32 v; + uae_u32 v = 0; #ifdef JIT special_mem |= S_READ; #endif - v = (ncr_bget2 (ncr, addr) << 8) | ncr_bget2 (ncr, addr + 1); + if (ncr) { + v = (ncr_bget2 (ncr, addr) << 8) | ncr_bget2 (ncr, addr + 1); + } return v; } static uae_u32 REGPARAM2 ncr_bget (struct ncr_state *ncr, uaecptr addr) { - uae_u32 v; + uae_u32 v = 0; #ifdef JIT special_mem |= S_READ; #endif - addr &= ncr->board_mask; - if (!ncr->configured) { - addr &= 65535; - if (addr >= sizeof ncr->acmemory) - return 0; - return ncr->acmemory[addr]; + if (ncr) { + addr &= ncr->board_mask; + if (!ncr->configured) { + addr &= 65535; + if (addr >= sizeof ncr->acmemory) + return 0; + return ncr->acmemory[addr]; + } + v = ncr_bget2 (ncr, addr); } - v = ncr_bget2 (ncr, addr); return v; } @@ -504,6 +510,8 @@ static void REGPARAM2 ncr_lput (struct ncr_state *ncr, uaecptr addr, uae_u32 l) #ifdef JIT special_mem |= S_WRITE; #endif + if (!ncr) + return; addr &= ncr->board_mask; if (ncr == ncr_we) { addr &= ~0x80; @@ -531,6 +539,8 @@ static void REGPARAM2 ncr_wput (struct ncr_state *ncr, uaecptr addr, uae_u32 w) #ifdef JIT special_mem |= S_WRITE; #endif + if (!ncr) + return; w &= 0xffff; addr &= ncr->board_mask; if (!ncr->configured) { @@ -556,6 +566,8 @@ static void REGPARAM2 ncr_bput (struct ncr_state *ncr, uaecptr addr, uae_u32 b) #ifdef JIT special_mem |= S_WRITE; #endif + if (!ncr) + return; b &= 0xff; addr &= ncr->board_mask; if (!ncr->configured) { diff --git a/newcpu.cpp b/newcpu.cpp index b5972ef6..ac9d5156 100644 --- a/newcpu.cpp +++ b/newcpu.cpp @@ -2878,8 +2878,14 @@ static void m68k_reset2(bool hardreset) } #endif regs.s = 1; - v = get_long (4); - m68k_areg (regs, 7) = get_long (0); + if (currprefs.cpuboard_type) { + uaecptr stack; + v = cpuboard_get_reset_pc(&stack); + m68k_areg (regs, 7) = stack; + } else { + v = get_long (4); + m68k_areg (regs, 7) = get_long (0); + } m68k_setpc_normal(v); regs.m = 0; regs.stopped = 0; diff --git a/od-win32/mman.cpp b/od-win32/mman.cpp index 2bb991c8..99ccbe37 100644 --- a/od-win32/mman.cpp +++ b/od-win32/mman.cpp @@ -666,6 +666,9 @@ void *shmat (addrbank *ab, int shmid, void *shmaddr, int shmflg) } else if (!_tcscmp(shmids[shmid].name, _T("ramsey_high"))) { shmaddr = natmem_offset + 0x08000000; got = TRUE; + } else if (!_tcscmp(shmids[shmid].name, _T("dkb"))) { + shmaddr = natmem_offset + 0x10000000; + got = TRUE; } else if (!_tcscmp(shmids[shmid].name, _T("fusionforty"))) { shmaddr = natmem_offset + 0x11000000; got = TRUE; diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index f425f378..153b612c 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -398,6 +398,7 @@ #define IDS_NUMSG_UAEBOOTROM_PCC 405 #define IDS_AUTOSCALE_HALF_INTEGER 406 #define IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE 407 +#define IDS_AUTOSCALE_OVERSCAN_BLANK 408 #define IDS_QS_MODELS 1000 #define IDS_QS_MODEL_A500 1001 #define IDS_QS_MODEL_A500P 1002 diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index 8a18220c..e776af74 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -1969,6 +1969,7 @@ BEGIN "PPC native OS booted with UAE boot ROM active. UAE expansions are not hardware emulated and are not PPC compatible. (UAE HD controller, uaescsi.device, uaeserial, bsdsocket and so on..)" IDS_AUTOSCALE_HALF_INTEGER "Half-integer scaling" IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE "Auto Half-integer scaling" + IDS_AUTOSCALE_OVERSCAN_BLANK "Overscan blanking" END #endif // English resources diff --git a/od-win32/win32.cpp b/od-win32/win32.cpp index 0161bae9..3d4c30d3 100644 --- a/od-win32/win32.cpp +++ b/od-win32/win32.cpp @@ -204,7 +204,7 @@ static int guijoybutton[MAX_JPORTS]; static int guijoyaxis[MAX_JPORTS][4]; static bool guijoychange; -static int timeend (void) +int timeend (void) { if (!timeon) return 1; @@ -215,7 +215,7 @@ static int timeend (void) return 0; } -static int timebegin (void) +int timebegin (void) { if (timeon) { timeend (); @@ -2202,6 +2202,7 @@ bool handle_events (void) if (pause_emulation) { MSG msg; if (was_paused == 0) { + timeend(); setpaused (pause_emulation); was_paused = pause_emulation; manual_painting_needed++; @@ -2238,6 +2239,7 @@ bool handle_events (void) resumepaused (was_paused); sound_closed = 0; was_paused = 0; + timebegin(); } cnt1--; if (cnt1 <= 0) { diff --git a/od-win32/win32.h b/od-win32/win32.h index c703ffdc..e36f70b9 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -20,12 +20,12 @@ #define LANG_DLL_FULL_VERSION_MATCH 1 #if WINUAEPUBLICBETA -#define WINUAEBETA _T("14") +#define WINUAEBETA _T("15") #else #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2015, 3, 28) +#define WINUAEDATE MAKEBD(2015, 4, 5) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") @@ -69,6 +69,8 @@ extern void disablecapture (void); extern void fullscreentoggle (void); extern int isfocus (void); extern void gui_restart (void); +int timebegin (void); +int timeend (void); extern void setmouseactive (int active); extern void minimizewindow (void); diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index d6f1eeeb..7dda287d 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -1306,7 +1306,7 @@ static const TCHAR *memsize_names[] = { /* 23*/ _T("3 GB") }; -static unsigned long memsizes[] = { +static const unsigned long memsizes[] = { /* 0 */ 0, /* 1 */ 0x00010000, /* 64K */ /* 2 */ 0x00020000, /* 128K */ @@ -1333,13 +1333,13 @@ static unsigned long memsizes[] = { /* 23*/ 0xC0000000, //3GB }; -static int msi_chip[] = { 3, 4, 5, 16, 6, 7, 8 }; -static int msi_bogo[] = { 0, 4, 5, 16, 17 }; -static int msi_fast[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; -static int msi_z3fast[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 19, 14, 20, 15, 21, 18, 22, 23 }; -static int msi_z3chip[] = { 0, 9, 10, 11, 12, 13, 19, 14, 20, 15 }; -static int msi_gfx[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; -static int msi_cpuboard[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; +static const int msi_chip[] = { 3, 4, 5, 16, 6, 7, 8 }; +static const int msi_bogo[] = { 0, 4, 5, 16, 17 }; +static const int msi_fast[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 }; +static const int msi_z3fast[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 19, 14, 20, 15, 21, 18, 22, 23 }; +static const int msi_z3chip[] = { 0, 9, 10, 11, 12, 13, 19, 14, 20, 15 }; +static const int msi_gfx[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }; +static const int msi_cpuboard[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; #define MIN_CHIP_MEM 0 #define MAX_CHIP_MEM 6 @@ -1640,7 +1640,7 @@ static int scan_rom (const TCHAR *path, UAEREG *fkey, bool deepscan) return rsd.got; } -static int listrom (int *roms) +static int listrom (const int *roms) { int i; @@ -1658,9 +1658,9 @@ static void show_rom_list (void) { TCHAR *p; TCHAR *p1, *p2; - int *rp; + const int *rp; bool first = true; - int romtable[] = { + const int romtable[] = { 5, 4, -1, -1, // A500 1.2 6, 32, -1, -1, // A500 1.3 7, -1, -1, // A500+ @@ -1684,13 +1684,15 @@ static void show_rom_list (void) 117, -1, -1, // alf 118, -1, -1, // alf+ 120, -1, -1, // masoboshi - 121, -1, -1, // supradrive + 121, 134, 135, 136, -1, -1, // supradrive 124, -1, -1, // kupke golem 131, -1, -1, // protar 130, -1, -1, // m-tec 129, -1, -1, // adide + 133, -1, -1, // adscsi 127, -1, -1, // kommos - 128, -1, -2, // vector falcon + 128, -1, -1, // vector falcon + 132, -1, -2, // add500 18, -1, 19, -1, 74, 23, -1, -1, // CD32 FMV 91, -1, -2, // Picasso IV @@ -1737,8 +1739,10 @@ static void show_rom_list (void) _T("Protar A500HD SCSI\0") _T("M-Tec AT500 IDE\0") _T("AdIDE\0") + _T("AdSCSI\0") _T("Kommos A500/A2000 SCSI\0") _T("Vector Falcon 8000 SCSI\0") + _T("Archos ADD-500\0") _T("CD32 Full Motion Video\0") _T("Picasso IV\0") @@ -7640,8 +7644,7 @@ static void enable_for_memorydlg (HWND hDlg) ew (hDlg, IDC_MBMEM2, mbram2); ew(hDlg, IDC_CPUBOARDMEM, workprefs.cpuboard_type > 0); ew(hDlg, IDC_CPUBOARDRAM, workprefs.cpuboard_type > 0); - ew(hDlg, IDC_CPUBOARD_TYPE, workprefs.address_space_24 == false); - ew(hDlg, IDC_CPUBOARD_SUBTYPE, workprefs.address_space_24 == false && workprefs.cpuboard_type); + ew(hDlg, IDC_CPUBOARD_SUBTYPE, workprefs.cpuboard_type); const struct expansionboardsettings *cbs = cpuboards[workprefs.cpuboard_type].subtypes[workprefs.cpuboard_subtype].settings; for (int i = 0; cpuboard_settings_id[i] >= 0; i++) { hide(hDlg, cpuboard_settings_id[i], !(workprefs.address_space_24 == false && cbs && cbs[i].name)); @@ -12105,13 +12108,13 @@ static void out_floppyspeed (HWND hDlg) } #define BUTTONSPERFLOPPY 9 -static int floppybuttons[][BUTTONSPERFLOPPY] = { +static const int floppybuttons[][BUTTONSPERFLOPPY] = { { IDC_DF0TEXT,IDC_DF0,IDC_EJECT0,IDC_DF0TYPE,IDC_DF0WP,-1,IDC_SAVEIMAGE0,IDC_DF0ENABLE, IDC_INFO0 }, { IDC_DF1TEXT,IDC_DF1,IDC_EJECT1,IDC_DF1TYPE,IDC_DF1WP,-1,IDC_SAVEIMAGE1,IDC_DF1ENABLE, IDC_INFO1 }, { IDC_DF2TEXT,IDC_DF2,IDC_EJECT2,IDC_DF2TYPE,IDC_DF2WP,-1,IDC_SAVEIMAGE2,IDC_DF2ENABLE, IDC_INFO2 }, { IDC_DF3TEXT,IDC_DF3,IDC_EJECT3,IDC_DF3TYPE,IDC_DF3WP,-1,IDC_SAVEIMAGE3,IDC_DF3ENABLE, IDC_INFO3 } }; -static int floppybuttonsq[][BUTTONSPERFLOPPY] = { +static const int floppybuttonsq[][BUTTONSPERFLOPPY] = { { IDC_DF0TEXTQ,IDC_DF0QQ,IDC_EJECT0Q,-1,IDC_DF0WPQ,IDC_DF0WPTEXTQ,-1,IDC_DF0QENABLE, IDC_INFO0Q }, { IDC_DF1TEXTQ,IDC_DF1QQ,IDC_EJECT1Q,-1,IDC_DF1WPQ,IDC_DF1WPTEXTQ,-1,IDC_DF1QENABLE, IDC_INFO1Q }, { -1,-1,-1,-1,-1,-1,-1,-1 }, @@ -15579,6 +15582,10 @@ static void values_to_hw3ddlg (HWND hDlg) SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); WIN32GUI_LoadUIString (IDS_AUTOSCALE_HALF_INTEGER_AUTOSCALE, txt, sizeof (txt) / sizeof (TCHAR)); SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); + + SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)_T("-")); + WIN32GUI_LoadUIString (IDS_AUTOSCALE_OVERSCAN_BLANK, txt, sizeof (txt) / sizeof (TCHAR)); + SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); } else { WIN32GUI_LoadUIString(IDS_AUTOSCALE_DEFAULT, txt, sizeof (txt) / sizeof (TCHAR)); SendDlgItemMessage(hDlg, IDC_FILTERAUTOSCALE, CB_ADDSTRING, 0, (LPARAM)txt); @@ -15609,29 +15616,41 @@ static void values_to_hw3ddlg (HWND hDlg) i++; SendDlgItemMessage (hDlg, IDC_FILTERSTACK, CB_SETCURSEL, i, 0); - int range1, range2; + int xrange1, xrange2; + int yrange1, yrange2; if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_MANUAL) { - range1 = -1; - range2 = 1800; + xrange1 = -1; + xrange2 = 1800; + yrange1 = xrange1; + yrange2 = xrange2; + } else if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_OVERSCAN_BLANK) { + xrange1 = 0; + xrange2 = 1800; + yrange1 = 0; + yrange2 = 700; } else if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER || workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_INTEGER_AUTOSCALE || workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_HALF_INTEGER || workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_HALF_INTEGER_AUTOSCALE) { - range1 = -99; - range2 = 99; + xrange1 = -99; + xrange2 = 99; + yrange1 = xrange1; + yrange2 = xrange2; } else { - range1 = -9999; - range2 = 9999; + xrange1 = -9999; + xrange2 = 9999; + yrange1 = xrange1; + yrange2 = xrange2; } - SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETRANGE, TRUE, MAKELONG (range1, range2)); + SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETRANGE, TRUE, MAKELONG (xrange1, xrange2)); SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETPAGESIZE, 0, 1); - SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETRANGE, TRUE, MAKELONG (range1, range2)); + SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETRANGE, TRUE, MAKELONG (xrange1, xrange2)); SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETPAGESIZE, 0, 1); - SendDlgItemMessage (hDlg, IDC_FILTERHO, TBM_SETRANGE, TRUE, MAKELONG (range1, range2)); + SendDlgItemMessage (hDlg, IDC_FILTERHO, TBM_SETRANGE, TRUE, MAKELONG (yrange1, yrange2)); SendDlgItemMessage (hDlg, IDC_FILTERHO, TBM_SETPAGESIZE, 0, 1); - SendDlgItemMessage (hDlg, IDC_FILTERVO, TBM_SETRANGE, TRUE, MAKELONG (range1, range2)); + SendDlgItemMessage (hDlg, IDC_FILTERVO, TBM_SETRANGE, TRUE, MAKELONG (yrange1, yrange2)); SendDlgItemMessage (hDlg, IDC_FILTERVO, TBM_SETPAGESIZE, 0, 1); SendDlgItemMessage (hDlg, IDC_FILTEROVERLAY, CB_RESETCONTENT, 0, 0L); @@ -15830,6 +15849,11 @@ static void values_to_hw3ddlg (HWND hDlg) vz = workprefs.gfx_ycenter_size; ho = workprefs.gfx_xcenter_pos; vo = workprefs.gfx_ycenter_pos; + } else if (workprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_OVERSCAN_BLANK) { + hz = workprefs.gf[filter_nativertg].gfx_filter_left_border; + vz = workprefs.gf[filter_nativertg].gfx_filter_right_border; + ho = workprefs.gf[filter_nativertg].gfx_filter_top_border; + vo = workprefs.gf[filter_nativertg].gfx_filter_bottom_border; } else { hz = workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom; vz = workprefs.gf[filter_nativertg].gfx_filter_vert_zoom; @@ -16174,6 +16198,8 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM case IDC_FILTERAUTOSCALE: item = SendDlgItemMessage (hDlg, IDC_FILTERAUTOSCALE, CB_GETCURSEL, 0, 0L); if (item != CB_ERR) { + if (item == AUTOSCALE_SEPARATOR) + item++; workprefs.gf[filter_nativertg].gfx_filter_autoscale = item; if (workprefs.gf[filter_nativertg].gfx_filter_autoscale && workprefs.gf[filter_nativertg].gfx_filter == 0 && !workprefs.gfx_api) workprefs.gf[filter_nativertg].gfx_filter = 1; // NULL @@ -16250,36 +16276,52 @@ static INT_PTR CALLBACK hw3dDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM { HWND hz = GetDlgItem (hDlg, IDC_FILTERHZ); HWND vz = GetDlgItem (hDlg, IDC_FILTERVZ); + HWND ho = GetDlgItem (hDlg, IDC_FILTERHO); + HWND vo = GetDlgItem (hDlg, IDC_FILTERVO); HWND h = (HWND)lParam; + struct gfx_filterdata *fd = &currprefs.gf[filter_nativertg]; + struct gfx_filterdata *fdwp = &workprefs.gf[filter_nativertg]; if (recursive) break; recursive++; - if (currprefs.gf[filter_nativertg].gfx_filter_autoscale == AUTOSCALE_MANUAL) { + if (fdwp->gfx_filter_autoscale == AUTOSCALE_MANUAL) { currprefs.gfx_xcenter_size = workprefs.gfx_xcenter_size = (int)SendMessage (hz, TBM_GETPOS, 0, 0); currprefs.gfx_ycenter_size = workprefs.gfx_ycenter_size = (int)SendMessage (vz, TBM_GETPOS, 0, 0); - currprefs.gfx_xcenter_pos = workprefs.gfx_xcenter_pos = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERHO), TBM_GETPOS, 0, 0); - currprefs.gfx_ycenter_pos = workprefs.gfx_ycenter_pos = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERVO), TBM_GETPOS, 0, 0); - SetDlgItemInt (hDlg, IDC_FILTERHOV, workprefs.gfx_xcenter_pos, TRUE); - SetDlgItemInt (hDlg, IDC_FILTERVOV, workprefs.gfx_ycenter_pos, TRUE); + currprefs.gfx_xcenter_pos = workprefs.gfx_xcenter_pos = (int)SendMessage (ho, TBM_GETPOS, 0, 0); + currprefs.gfx_ycenter_pos = workprefs.gfx_ycenter_pos = (int)SendMessage (vo, TBM_GETPOS, 0, 0); SetDlgItemInt (hDlg, IDC_FILTERHZV, workprefs.gfx_xcenter_size, TRUE); SetDlgItemInt (hDlg, IDC_FILTERVZV, workprefs.gfx_ycenter_size, TRUE); + SetDlgItemInt (hDlg, IDC_FILTERHOV, workprefs.gfx_xcenter_pos, TRUE); + SetDlgItemInt (hDlg, IDC_FILTERVOV, workprefs.gfx_ycenter_pos, TRUE); + } else if (fdwp->gfx_filter_autoscale == AUTOSCALE_OVERSCAN_BLANK) { + fd->gfx_filter_left_border = fdwp->gfx_filter_left_border = (int)SendMessage (hz, TBM_GETPOS, 0, 0); + fd->gfx_filter_right_border = fdwp->gfx_filter_right_border = (int)SendMessage (vz, TBM_GETPOS, 0, 0); + fd->gfx_filter_top_border = fdwp->gfx_filter_top_border = (int)SendMessage (ho, TBM_GETPOS, 0, 0); + fd->gfx_filter_bottom_border = fdwp->gfx_filter_bottom_border = (int)SendMessage (vo, TBM_GETPOS, 0, 0); + SetDlgItemInt (hDlg, IDC_FILTERHZV, fdwp->gfx_filter_left_border, TRUE); + SetDlgItemInt (hDlg, IDC_FILTERVZV, fdwp->gfx_filter_right_border, TRUE); + SetDlgItemInt (hDlg, IDC_FILTERHOV, fdwp->gfx_filter_top_border, TRUE); + SetDlgItemInt (hDlg, IDC_FILTERVOV, fdwp->gfx_filter_bottom_border, TRUE); + if (!full_property_sheet) { + reset_drawing(); + } } else { if (h == hz) { - currprefs.gf[filter_nativertg].gfx_filter_horiz_zoom = workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom = (int)SendMessage (hz, TBM_GETPOS, 0, 0); - if (workprefs.gf[filter_nativertg].gfx_filter_keep_aspect) { - currprefs.gf[filter_nativertg].gfx_filter_vert_zoom = workprefs.gf[filter_nativertg].gfx_filter_vert_zoom = currprefs.gf[filter_nativertg].gfx_filter_horiz_zoom; - SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETPOS, TRUE, workprefs.gf[filter_nativertg].gfx_filter_vert_zoom); + fd->gfx_filter_horiz_zoom = fdwp->gfx_filter_horiz_zoom = (int)SendMessage (hz, TBM_GETPOS, 0, 0); + if (fdwp->gfx_filter_keep_aspect) { + fd->gfx_filter_vert_zoom = fdwp->gfx_filter_vert_zoom = currprefs.gf[filter_nativertg].gfx_filter_horiz_zoom; + SendDlgItemMessage (hDlg, IDC_FILTERVZ, TBM_SETPOS, TRUE, fdwp->gfx_filter_vert_zoom); } } else if (h == vz) { - currprefs.gf[filter_nativertg].gfx_filter_vert_zoom = workprefs.gf[filter_nativertg].gfx_filter_vert_zoom = (int)SendMessage (vz, TBM_GETPOS, 0, 0); - if (workprefs.gf[filter_nativertg].gfx_filter_keep_aspect) { - currprefs.gf[filter_nativertg].gfx_filter_horiz_zoom = workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom = currprefs.gf[filter_nativertg].gfx_filter_vert_zoom; - SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETPOS, TRUE, workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom); + fd->gfx_filter_vert_zoom = fdwp->gfx_filter_vert_zoom = (int)SendMessage (vz, TBM_GETPOS, 0, 0); + if (fdwp->gfx_filter_keep_aspect) { + fd->gfx_filter_horiz_zoom = fdwp->gfx_filter_horiz_zoom = currprefs.gf[filter_nativertg].gfx_filter_vert_zoom; + SendDlgItemMessage (hDlg, IDC_FILTERHZ, TBM_SETPOS, TRUE, fdwp->gfx_filter_horiz_zoom); } } - currprefs.gf[filter_nativertg].gfx_filter_horiz_offset = workprefs.gf[filter_nativertg].gfx_filter_horiz_offset = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERHO), TBM_GETPOS, 0, 0); - currprefs.gf[filter_nativertg].gfx_filter_vert_offset = workprefs.gf[filter_nativertg].gfx_filter_vert_offset = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERVO), TBM_GETPOS, 0, 0); + fd->gfx_filter_horiz_offset = fdwp->gfx_filter_horiz_offset = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERHO), TBM_GETPOS, 0, 0); + fd->gfx_filter_vert_offset = fdwp->gfx_filter_vert_offset = (int)SendMessage (GetDlgItem (hDlg, IDC_FILTERVO), TBM_GETPOS, 0, 0); SetDlgItemInt (hDlg, IDC_FILTERHOV, (int)workprefs.gf[filter_nativertg].gfx_filter_horiz_offset, TRUE); SetDlgItemInt (hDlg, IDC_FILTERVOV, (int)workprefs.gf[filter_nativertg].gfx_filter_vert_offset, TRUE); SetDlgItemInt (hDlg, IDC_FILTERHZV, (int)workprefs.gf[filter_nativertg].gfx_filter_horiz_zoom, TRUE); @@ -16706,7 +16748,7 @@ static LRESULT FAR PASCAL ToolTipWndProc (HWND hwnd, UINT message, WPARAM wParam return CallWindowProc (ToolTipHWNDS2[i].proc, hwnd, message, wParam, lParam); } -static int ignorewindows[] = { +static const int ignorewindows[] = { IDD_FLOPPY, IDC_DF0TEXT, IDC_DF1TEXT, IDC_DF2TEXT, IDC_DF3TEXT, IDC_CREATE_NAME, -1, IDD_QUICKSTART, IDC_DF0TEXTQ, IDC_DF1TEXTQ, IDC_QUICKSTART_HOSTCONFIG, @@ -17840,6 +17882,7 @@ static int GetSettings (int all_options, HWND hwnd) struct newresource *tres; gui_active++; + timeend(); full_property_sheet = all_options; allow_quit = all_options; @@ -18094,6 +18137,7 @@ gui_exit: qs_request_reset = 0; full_property_sheet = 0; gui_active--; + timebegin(); return psresult; } @@ -18540,7 +18584,7 @@ void pre_gui_message (const TCHAR *format,...) } -static int transla[] = { +static const int transla[] = { NUMSG_NEEDEXT2, IDS_NUMSG_NEEDEXT2, NUMSG_NOROMKEY,IDS_NUMSG_NOROMKEY, NUMSG_NOROM,IDS_NUMSG_NOROM, diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index 6c690e81..e5dd07e2 100644 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -1,4 +1,23 @@ +Beta 15: + +- Map only upper half of ROM image if GVP Series II ROM is 32k. +- HD controller ROM loader duplicate code removal from HD controller specific code. +- Accelerator board HD controller hardware was not added to emulation if board's boot ROM was missing. (b12) +- Added DKB 12x0 accelerator on-board RAM support. 1M and 2M size are not supported, address mapping is + not completely emulated. +- Floppy sound volume mixing fixed (b14). +- Oktagon 2008 didn't have autoboot disable option. +- Only keep high Windows timer resolution mode active when emulation is running. +- Added Seek (6) and (10) SCSI commands to HD SCSI emulator, only checks for valid LBA. +- VGA modes had inverted TV/VGA aspect ratio setting. (Probably not completely correct yet) +- Added configurable blanking borders. GUI adjustment hacked to Filter panel, "Overscan blanking" setting. + When "Overscan blanking" is selected, filter mode is always none. First slider adjusts horizontal start, + second = horizontal end, third = vertical start, fourth = vertical end. Values are always in superhires + (horizontal) and interlaced (vertical) coordinates. Zero = disabled. + Currently display is only updated with new values after returning to emulation and GUI text elements are + not changed. + Beta 14: - Show selected accelerator board and HD controller name(s) in log lines. @@ -17,7 +36,7 @@ Beta 14: disk, reads and executes boot block code if disk has correct bootblock which is different than release AmigaOS bootblock. MFM level format seems to be identical. Unfortunately, at least so far, no original Velvet floppy disks have been found and for some reason real hardware refuses to read any disks. -- If -seriallog is enabled, console log window also listens for key codes and sends them to emulated serial +- If -serlog is enabled, console log window also listens for key codes and sends them to emulated serial port. Very basic console emulator, enables quick use of Velvet ROM built-in serial debugger. - Added "Any floppy drive" option to keyboard led configuration. - Floppy sound volume control is not global anymore. Empty and disk in drive states also have separate volume diff --git a/zfile.cpp b/zfile.cpp index d8fbabaa..f16f6d6d 100644 --- a/zfile.cpp +++ b/zfile.cpp @@ -287,6 +287,8 @@ int zfile_gettype (struct zfile *z) return ZFILE_STATEFILE; if (strcasecmp (ext, _T("rom")) == 0) return ZFILE_ROM; + if (strcasecmp (ext, _T("bin")) == 0) + return ZFILE_ROM; if (strcasecmp (ext, _T("key")) == 0) return ZFILE_KEY; if (strcasecmp (ext, _T("nvr")) == 0)