]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
3100b15
authorToni Wilen <twilen@winuae.net>
Sun, 5 Apr 2015 13:23:14 +0000 (16:23 +0300)
committerToni Wilen <twilen@winuae.net>
Sun, 5 Apr 2015 13:23:14 +0000 (16:23 +0300)
21 files changed:
a2091.cpp
cfgfile.cpp
cpuboard.cpp
expansion.cpp
filesys.cpp
include/autoconf.h
include/cpuboard.h
include/custom.h
include/drawing.h
memory.cpp
ncr9x_scsi.cpp
ncr_scsi.cpp
newcpu.cpp
od-win32/mman.cpp
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/win32.cpp
od-win32/win32.h
od-win32/win32gui.cpp
od-win32/winuaechangelog.txt
zfile.cpp

index 6181a5aeee01e987b2afcec459caa6099aca94de..4213b1f52609bd3b7885ee6c3048c683a427a4f3 100644 (file)
--- 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;
                }
index 0fbcb8d5b1b253905371667537a434fefb688a31..654a6d6b5b20a3644c9af5177650a586869d644a 100644 (file)
@@ -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);
index 7a3bfc95eb7fadf7a4d093379bf1e6895b01c72f..a79f20c114c42d8f26148c1a50ffc7ecc7dd8c34 100644 (file)
@@ -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;
index 1de654b2b0ed4ddafa55ed2b4f042743f6b54c84..2aed10e9c563b9597df4cc4c11d83b34cc1606a0 100644 (file)
@@ -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
        }
index cdb9d685619b2c69cf24f76bbf0195fae2f42211..35df4b90fcf3bc0e67ac4e3910c482d0468ec9b0 100644 (file)
@@ -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);
                        }
                }
        }
index c5bbc2dc52782e05c6e3bc4417e86bf9b57ba7e9..cdb488ca024887ab429a39d8aedc3a88f61b7808 100644 (file)
@@ -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;
index 19549267cd7efa587a8149031a31d2e7ce0f44f3..d874d0c33496a8f5bb2ded09922a90c6f2745f3e 100644 (file)
@@ -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
+
 
index 5aaa7120705c232807c00b00e8d3cee5aab3c8af..d3d8a9d35767bcb6eea1d210a2cdbf9618490851 100644 (file)
@@ -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);
index 0666384a981c97e5b954f6e0ffa8f0950ce78399..319f86cafe8700cfec4b58e24f2362ede01d240d 100644 (file)
@@ -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);
index a361b919bcac8e2b78baf329172aadced443abcd..fc8884928f7c1144ae0db0e9a97045818e10bac5 100644 (file)
@@ -809,7 +809,7 @@ MEMORY_FUNCTIONS(cardmem);
 MEMORY_FUNCTIONS(a3000lmem);
 MEMORY_FUNCTIONS(a3000hmem);
 
-/* 25bit memory (0x10000000) */
+/* 25bit memory (0x01000000) */
 
 MEMORY_FUNCTIONS(mem25bit);
 
index 8af62c56572ef4f8a848fb792400bb334b2809b6..fbc436ce5a3d678bcd38c5f7bdd973a2de11ff51 100644 (file)
@@ -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;
 }
index 95f8266c0c1509069458cbfb6215bcced464a876..febe2581bfd811794116b9a8789c2d734ea21cad 100644 (file)
@@ -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) {
index b5972ef6a579f8cfdd40a587315bf02e0eaca9d6..ac9d5156609360fe71fbeb53f838dec1c5c51297 100644 (file)
@@ -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;
index 2bb991c8b1e217f89588d2b4cb39502b760e6525..99ccbe3700a93f9c7b4a595380289e91174f74df 100644 (file)
@@ -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;
index f425f378553f089989d78ddcc7745a2ed5e072d8..153b612c4cfad561d3a204d3274e271404d4c03b 100644 (file)
 #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
index 8a18220c62586b4765c180d0863c67662281529f..e776af746e29a0bb9bd7e8fd2415e69f72f51543 100644 (file)
@@ -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
index 0161bae986c73882ca453d908e1261ac9ea3a779..3d4c30d33c5f489ee9e34245cca6bd35edb9fac2 100644 (file)
@@ -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) {
index c703ffdc9ac51039aec7e1b4389a1389a8e4e45c..e36f70b9c4cc069a75cd2ef7b11b0deb8c8a8833 100644 (file)
 #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);
index d6f1eeeb88f7b5ecd2d8fd5c483df90ca2cf6fd5..7dda287d392dfdc998a3954ae0ddf303943531d6 100644 (file)
@@ -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,
index 6c690e8173f72aed6157e109470bc4c460aefc02..e5dd07e237778f8d191608553ff18f6d86542e54 100644 (file)
@@ -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
index d8fbabaa543bb00e693a12daf7bf6bf0c5b3fa3c..f16f6d6d77fad686d49eb37f61564edf763e7e84 100644 (file)
--- 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)