]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1460b6.zip
authorToni Wilen <twilen@winuae.net>
Wed, 16 Jan 2008 16:05:32 +0000 (18:05 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:38:15 +0000 (21:38 +0200)
34 files changed:
akiko.c
cdtv.c
cfgfile.c
cia.c
debug.c
drawing.c
filesys.c
gayle.c
hardfile.c
include/cia.h
include/filesys.h
include/gui.h
include/newcpu.h
include/options.h
inputdevice.c
main.c
memory.c
newcpu.c
od-win32/blkdev_win32_aspi.c
od-win32/blkdev_win32_ioctl.c
od-win32/blkdev_win32_spti.c
od-win32/lcd.c
od-win32/mman.c
od-win32/resources/resource
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/rp.c
od-win32/rp.h
od-win32/win32.c
od-win32/win32.h
od-win32/win32gui.c
od-win32/winuae_msvc/winuae_msvc.vcproj
od-win32/winuaechangelog.txt
od-win32/writelog.c

diff --git a/akiko.c b/akiko.c
index fa55d9ec6f628129c93dae794997cd03c4525b4d..e428cd01c82e26e31810aa54a44c3d0a4b91a33c 100644 (file)
--- a/akiko.c
+++ b/akiko.c
@@ -1043,7 +1043,7 @@ void AKIKO_hsync_handler (void)
     framecounter--;
     if (framecounter <= 0) {
        if (cdrom_playing || cdrom_toc_counter > 0)
-           gui_cd_led (1);
+           gui_cd_led (0, 1);
        cdrom_run_read ();
        framecounter = 1000000 / (74 * 75 * cdrom_speed);
        set_status(CDSTATUS_FRAME);
diff --git a/cdtv.c b/cdtv.c
index 38e810d1d5a056562418ce69df4916abf6122d90..e9549d9cca3b5a7740047d6ef035a18745bf40cb 100644 (file)
--- a/cdtv.c
+++ b/cdtv.c
@@ -957,7 +957,7 @@ void CDTV_hsync_handler(void)
            do_stch();
     }
     if (cd_playing)
-       gui_cd_led (1);
+       gui_cd_led (0, 1);
     if (cd_media && (tp_cr & 1)) {
        tp_air |= 1 << 1;
        INT2();
index f785e99ed96d9e982cdbe37a9f6b9588ec957ce4..8ba2d3ae426af036d5e5fbc02ecf8a2d7b083ff4 100644 (file)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -594,7 +594,8 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
     cfgfile_dwrite (f, "ciaatod=%s\n", ciaatodmode[p->cs_ciaatod]);
     cfgfile_dwrite (f, "rtc=%s\n", rtctype[p->cs_rtc]);
     //cfgfile_dwrite (f, "chipset_rtc_adjust=%d\n", p->cs_rtc_adjust);
-    cfgfile_dwrite (f, "ksmirror=%s\n", ksmirrortype[p->cs_ksmirror]);
+    cfgfile_dwrite (f, "ksmirror_e0=%s\n", p->cs_ksmirror_e0 ? "true" : "false");
+    cfgfile_dwrite (f, "ksmirror_a8=%s\n", p->cs_ksmirror_a8 ? "true" : "false");
     cfgfile_dwrite (f, "cd32cd=%s\n", p->cs_cd32cd ? "true" : "false");
     cfgfile_dwrite (f, "cd32c2p=%s\n", p->cs_cd32c2p ? "true" : "false");
     cfgfile_dwrite (f, "cd32nvram=%s\n", p->cs_cd32nvram ? "true" : "false");
@@ -612,6 +613,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type)
     cfgfile_dwrite (f, "scsi_a3000=%s\n", p->cs_mbdmac == 1 ? "true" : "false");
     cfgfile_dwrite (f, "scsi_a4000t=%s\n", p->cs_mbdmac == 2 ? "true" : "false");
     cfgfile_dwrite (f, "bogomem_fast=%s\n", p->cs_slowmemisfast ? "true" : "false");
+    cfgfile_dwrite (f, "resetwarning=%s\n", p->cs_resetwarning ? "true" : "false");
 
     cfgfile_write (f, "fastmem_size=%d\n", p->fastmem_size / 0x100000);
     cfgfile_write (f, "a3000mem_size=%d\n", p->mbresmem_low_size / 0x100000);
@@ -1295,7 +1297,11 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, char *option, char *valu
        || cfgfile_yesno (option, value, "scsi_cdtv", &p->cs_cdtvscsi)
        || cfgfile_yesno (option, value, "scsi_a4091", &p->cs_a4091)
        || cfgfile_yesno (option, value, "scsi_a2091", &p->cs_a2091)
+       || cfgfile_yesno (option, value, "cia_overlay", &p->cs_ciaoverlay)
        || cfgfile_yesno (option, value, "bogomem_fast", &p->cs_slowmemisfast)
+       || cfgfile_yesno (option, value, "ksmirror_e0", &p->cs_ksmirror_e0)
+       || cfgfile_yesno (option, value, "ksmirror_a8", &p->cs_ksmirror_a8)
+       || cfgfile_yesno (option, value, "resetwarning", &p->cs_resetwarning)
 
        || cfgfile_yesno (option, value, "kickshifter", &p->kickshifter)
        || cfgfile_yesno (option, value, "ntsc", &p->ntscmode)
@@ -1349,7 +1355,7 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, char *option, char *valu
     if (cfgfile_strval (option, value, "comp_trustbyte", &p->comptrustbyte, compmode, 0)
        || cfgfile_strval (option, value, "chipset_compatible", &p->cs_compatible, cscompa, 0)
        || cfgfile_strval (option, value, "rtc", &p->cs_rtc, rtctype, 0)
-       || cfgfile_strval (option, value, "ksmirror", &p->cs_ksmirror, ksmirrortype, 0)
+       || cfgfile_strval (option, value, "ksmirror", &p->cs_ksmirror_e0, ksmirrortype, 0)
        || cfgfile_strval (option, value, "ciaatod", &p->cs_ciaatod, ciaatodmode, 0)
        || cfgfile_strval (option, value, "ide", &p->cs_ide, idemode, 0)
        || cfgfile_strval (option, value, "scsi", &p->scsi, scsimode, 0)
@@ -2896,10 +2902,13 @@ void default_prefs (struct uae_prefs *p, int type)
     p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = 0;
     p->cs_cdtvcd = p->cs_cdtvram = p->cs_cdtvcard = 0;
     p->cs_pcmcia = 0;
-    p->cs_ksmirror = 1;
+    p->cs_ksmirror_e0 = 1;
+    p->cs_ksmirror_a8 = 0;
+    p->cs_ciaoverlay = 1;
     p->cs_ciaatod = 0;
     p->cs_df0idhw = 1;
     p->cs_slowmemisfast = 0;
+    p->cs_resetwarning = 1;
 
     p->gfx_filter = 0;
     p->gfx_filter_horiz_zoom_mult = 1000;
@@ -3041,7 +3050,7 @@ static void buildin_default_prefs (struct uae_prefs *p)
     p->z3fastmem_size = 0x00000000;
     p->gfxmem_size = 0x00000000;
 
-    p->cs_rtc = 1;
+    p->cs_rtc = 0;
     p->cs_a1000ram = 0;
     p->cs_fatgaryrev = -1;
     p->cs_ramseyrev = -1;
@@ -3054,9 +3063,12 @@ static void buildin_default_prefs (struct uae_prefs *p)
     p->cs_cdtvcd = p->cs_cdtvram = p->cs_cdtvcard = 0;
     p->cs_ide = 0;
     p->cs_pcmcia = 0;
-    p->cs_ksmirror = 1;
+    p->cs_ksmirror_e0 = 1;
+    p->cs_ksmirror_a8 = 0;
+    p->cs_ciaoverlay = 1;
     p->cs_ciaatod = 0;
     p->cs_df0idhw = 1;
+    p->cs_resetwarning = 0;
 
     strcpy (p->romfile, "");
     strcpy (p->romextfile, "");
@@ -3302,6 +3314,7 @@ static int bip_a1200 (struct uae_prefs *p, int config, int compa, int romcheck)
     roms[1] = 31;
     roms[2] = 15;
     roms[3] = -1;
+    p->cs_rtc = 0;
     if (config == 1) {
        p->fastmem_size = 0x400000;
        p->cs_rtc = 2;
@@ -3322,6 +3335,8 @@ static int bip_a600 (struct uae_prefs *p, int config, int compa, int romcheck)
     roms[3] = -1;
     p->bogomem_size = 0;
     p->chipmem_size = 0x100000;
+    if (config > 0)
+       p->cs_rtc = 1;
     if (config == 1)
        p->chipmem_size = 0x200000;
     if (config == 2)
@@ -3341,6 +3356,8 @@ static int bip_a500p (struct uae_prefs *p, int config, int compa, int romcheck)
     roms[1] = -1;
     p->bogomem_size = 0;
     p->chipmem_size = 0x100000;
+    if (config > 0)
+       p->cs_rtc = 1;
     if (config == 1)
        p->chipmem_size = 0x200000;
     if (config == 2)
@@ -3440,7 +3457,7 @@ static int bip_super (struct uae_prefs *p, int config, int compa, int romcheck)
     built_in_chipset_prefs (p);
     p->cs_ide = -1;
     p->cs_ciaatod = p->ntscmode ? 2 : 1;
-    strcat(p->flashfile, "battclock.nvr");
+    //strcat(p->flashfile, "battclock.nvr");
     return configure_rom (p, roms, romcheck);
 }
 
@@ -3541,9 +3558,11 @@ int built_in_chipset_prefs (struct uae_prefs *p)
     p->cs_mbdmac = 0;
     p->cs_a2091 = 0;
     p->cs_pcmcia = 0;
-    p->cs_ksmirror = 1;
+    p->cs_ksmirror_e0 = 1;
+    p->cs_ciaoverlay = 1;
     p->cs_ciaatod = 0;
     p->cs_df0idhw = 1;
+    p->cs_resetwarning = 1;
 
     switch (p->cs_compatible)
     {
@@ -3558,38 +3577,46 @@ int built_in_chipset_prefs (struct uae_prefs *p)
        p->cs_rtc = 1;
        p->cs_cdtvcd = p->cs_cdtvram = 1;
        p->cs_df0idhw = 1;
-       p->cs_ksmirror = 0;
+       p->cs_ksmirror_e0 = 0;
        break;
     case CP_CD32: // CD32
        p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = 1;
-       p->cs_ksmirror = 0;
+       p->cs_ksmirror_e0 = 0;
+       p->cs_ksmirror_a8 = 1;
+       p->cs_ciaoverlay = 0;
+       p->cs_resetwarning = 0;
        break;
     case CP_A500: // A500
        p->cs_df0idhw = 0;
+       p->cs_resetwarning = 0;
        break;
     case CP_A500P: // A500+
+       p->cs_resetwarning = 0;
        break;
     case CP_A600: // A600
        p->cs_ide = 1;
        p->cs_pcmcia = 1;
+       p->cs_ksmirror_a8 = 1;
+       p->cs_ciaoverlay = 0;
+       p->cs_resetwarning = 0;
        break;
     case CP_A1000: // A1000
        p->cs_a1000ram = 1;
        p->cs_ciaatod = p->ntscmode ? 2 : 1;
-       p->cs_ksmirror = 0;
+       p->cs_ksmirror_e0 = 0;
        p->cs_rtc = 0;
        p->chipset_mask |= CSMASK_BLTBUSY_BUG;
        break;
     case CP_A1200: // A1200
        p->cs_ide = 1;
        p->cs_pcmcia = 1;
-       p->cs_ksmirror = 2;
+       p->cs_ksmirror_a8 = 1;
+       p->cs_ciaoverlay = 0;
        break;
     case CP_A2000: // A2000
        p->cs_rtc = 1;
        p->cs_ciaatod = p->ntscmode ? 2 : 1;
        break;
-       break;
     case CP_A3000: // A3000
        p->cs_rtc = 2;
        p->cs_fatgaryrev = 0;
@@ -3610,6 +3637,8 @@ int built_in_chipset_prefs (struct uae_prefs *p)
        p->cs_ramseyrev = 0x0f;
        p->cs_ide = 2;
        p->cs_mbdmac = 0;
+       p->cs_ksmirror_a8 = 1;
+       p->cs_ciaoverlay = 0;
        break;
     case CP_A4000T: // A4000T
        p->cs_rtc = 2;
@@ -3617,6 +3646,8 @@ int built_in_chipset_prefs (struct uae_prefs *p)
        p->cs_ramseyrev = 0x0f;
        p->cs_ide = 2;
        p->cs_mbdmac = 2;
+       p->cs_ksmirror_a8 = 1;
+       p->cs_ciaoverlay = 0;
        break;
     }
     return 1;
diff --git a/cia.c b/cia.c
index d1d424aac0ee3843cfbbc4ef51da4ccb82fa5dfd..bd65ab6f11b014fce55696a0769af9ae4149a3f9 100644 (file)
--- a/cia.c
+++ b/cia.c
@@ -32,6 +32,8 @@
 #include "debug.h"
 #include "arcadia.h"
 #include "audio.h"
+#include "keyboard.h"
+#include "uae.h"
 #include "amax.h"
 
 //#define CIAA_DEBUG_R
@@ -333,6 +335,71 @@ STATIC_INLINE void ciaa_checkalarm (int inc)
     }
 }
 
+static int resetwarning_phase, resetwarning_timer;
+
+static void setcode (uae_u8 keycode)
+{
+    ciaasdr = ~((keycode << 1) | (keycode >> 7));
+}
+
+static void sendrw (void)
+{
+    setcode (AK_RESETWARNING);
+    ciaaicr |= 8;
+    ciaasdr_unread = 1;
+    RethinkICRA ();
+    write_log ("KB: sent reset warning code (phase=%d)\n", resetwarning_phase);
+}
+
+int resetwarning_do (int canreset)
+{
+    if (resetwarning_phase) {
+       /* just force reset if second reset happens during resetwarning */
+       if (canreset) {
+           resetwarning_phase = 0;
+           resetwarning_timer = 0;
+       }
+       return 0;
+    }
+    resetwarning_phase = 1;
+    resetwarning_timer = maxvpos * 5;
+    write_log ("KB: reset warning triggered\n");
+    sendrw ();
+    return 1;
+}
+
+static void resetwarning_check (void)
+{
+    if (resetwarning_timer > 0) {
+       resetwarning_timer--;
+       if (resetwarning_timer <= 0) {
+           write_log ("KB: reset warning forced reset. Phase=%d\n", resetwarning_phase);
+           resetwarning_phase = -1;
+           uae_reset (0);
+       }
+    }
+    if (resetwarning_phase == 1) {
+       if (kback && !(ciaacra & 0x40) && ciaasdr_unread == 2) {
+           write_log ("KB: reset warning second phase..\n");
+           resetwarning_phase = 2;
+           resetwarning_timer = maxvpos * 5;
+           sendrw ();
+       }
+    } else if (resetwarning_phase == 2) {
+       if (ciaacra & 0x40) {
+           resetwarning_phase = 3;
+           write_log ("KB: reset warning SP = output\n");
+           resetwarning_timer = 10 * maxvpos * vblank_hz; /* wait max 10s */
+       }
+    } else if (resetwarning_phase == 3) {
+       if (!(ciaacra & 0x40)) {
+           write_log ("KB: reset warning end by software. reset.\n");
+           resetwarning_phase = -1;
+           uae_reset (0);
+       }
+    }
+}
+
 void CIA_hsync_handler (void)
 {
     if (ciabtodon) {
@@ -341,7 +408,11 @@ void CIA_hsync_handler (void)
        ciab_checkalarm (1);
     }
 
-    if (keys_available() && kback && (ciaacra & 0x40) == 0 && (hsync_counter & 15) == 0) {
+    if (resetwarning_phase) {
+       resetwarning_check ();
+       while (keys_available ())
+           get_next_key ();
+    } else if ((keys_available() || kbstate < 2) && kback && (ciaacra & 0x40) == 0 && (hsync_counter & 15) == 0) {
        /*
         * This hack lets one possible ciaaicr cycle go by without any key
         * being read, for every cycle in which a key is pulled out of the
@@ -359,12 +430,12 @@ void CIA_hsync_handler (void)
        } else if (ciaasdr_unread == 0) {
            switch (kbstate) {
             case 0:
-               ciaasdr = (uae_s8)~0xFB; /* aaarghh... stupid compiler */
+               setcode (AK_INIT_POWERUP);
                kbstate++;
                break;
             case 1:
+               setcode (AK_TERM_POWERUP);
                kbstate++;
-               ciaasdr = (uae_s8)~0xFD;
                break;
             case 2:
                ciaasdr = ~get_next_key();
@@ -442,8 +513,8 @@ static void bfe001_change (void)
        oldovl = v & 1;
        if (!oldovl || ersatzkickfile) {
            map_overlay (1);
-       } else if (!(currprefs.chipset_mask & CSMASK_AGA)) {
-           /* pin disconnected in AGA chipset, CD audio mute on/off on CD32 */
+       } else if (currprefs.cs_ciaoverlay) {
+           /* Gayle does this internally, CIA pin disconnected, CD audio mute on/off on CD32 */
            map_overlay (0);
        }
     }
@@ -979,6 +1050,7 @@ void CIA_reset (void)
     serbits = 0;
     oldovl = -1;
     oldled = -1;
+    resetwarning_phase = resetwarning_timer = 0;
 
     if (!savestate_state) {
        ciaatlatch = ciabtlatch = 0;
@@ -1222,7 +1294,7 @@ static void REGPARAM3 clock_bput (uaecptr, uae_u32) REGPARAM;
 addrbank clock_bank = {
     clock_lget, clock_wget, clock_bget,
     clock_lput, clock_wput, clock_bput,
-    default_xlate, default_check, NULL, "Battery backed up clock",
+    default_xlate, default_check, NULL, "Battery backed up clock (none)",
     dummy_lgeti, dummy_wgeti, ABFLAG_IO
 };
 
diff --git a/debug.c b/debug.c
index ab79b96d7741577e5326d14399e792accae37cac..4132bae4c829df6d6c0b3d31ab84e7ac278d81d5 100644 (file)
--- a/debug.c
+++ b/debug.c
@@ -118,7 +118,7 @@ static char help[] = {
     "  W <address> <value>   Write into Amiga memory\n"
     "  w <num> <address> <length> <R/W/I/F> [<value>] (read/write/opcode/freeze)\n"
     "                        Add/remove memory watchpoints\n"
-    "  wd [<0-1>]            Enable illegal access logger. 1 = break when detected.\n"
+    "  wd [<0-1>]            Enable illegal access logger. 1 = enable break.\n"
     "  S <file> <addr> <n>   Save a block of Amiga memory\n"
     "  s \"<string>\"/<values> [<addr>] [<length>]\n"
     "                        Search for string/bytes\n"
@@ -130,8 +130,9 @@ static char help[] = {
     "                        Also enables level 1 disk logging\n"
     "  did <log level>       Enable disk logging\n"
     "  dj [<level bitmask>]  Enable joystick/mouse input debugging\n"
-    "  smc [<0-1>]           Enable self-modifying code detector. 1 = break when detected.\n"
+    "  smc [<0-1>]           Enable self-modifying code detector. 1 = enable break.\n"
     "  dm                    Dump current address space map\n"
+    "  ?<value>              Hex/Bin/Dec converter\n"
 #ifdef _WIN32
     "  x                     Close debugger.\n"
     "  xx                    Switch between console and GUI debugger.\n"
@@ -144,7 +145,25 @@ void debug_help (void)
     console_out (help);
 }
 
+static int debug_linecounter;
+#define MAX_LINECOUNTER 1000
 
+static int debug_out (const char *format,...)
+{
+    va_list parms;
+    char buffer[4000];
+
+    va_start (parms, format);
+    _vsnprintf (buffer, 4000 - 1, format, parms);
+    va_end (parms);
+
+    console_out (buffer);
+    if (debug_linecounter < MAX_LINECOUNTER)
+       debug_linecounter++;
+    if (debug_linecounter >= MAX_LINECOUNTER)
+       return 0;
+    return 1;
+}
 
 static void ignore_ws (char **c)
 {
@@ -153,16 +172,85 @@ static void ignore_ws (char **c)
 }
 
 static uae_u32 readint (char **c);
-static uae_u32 readhex (char **c)
+static uae_u32 readbin (char **c);
+static uae_u32 readhex (char **c);
+
+static int readregx (char **c, uae_u32 *valp)
+{
+    int i;
+    uae_u32 addr;
+    char *p = *c;
+    char tmp[10];
+    int extra = 0;
+
+    addr = 0;
+    i = 0;
+    while (p[i]) {
+       tmp[i] = toupper(p[i]);
+       if (i >= sizeof (tmp) - 1)
+           break;
+       i++;
+    }
+    tmp[i] = 0;
+    if (toupper (tmp[0]) == 'R') {
+       memmove (tmp, tmp + 1, sizeof (tmp) - 1);
+       extra = 1;
+    }
+    if (!strcmp(tmp, "USP")) {
+       addr = regs.usp;
+       (*c) += 3;
+    } else if (!strcmp(tmp, "VBR")) {
+       addr = regs.vbr;
+       (*c) += 3;
+    } else if (!strcmp(tmp, "MSP")) {
+       addr = regs.msp;
+       (*c) += 3;
+    } else if (!strcmp(tmp, "ISP")) {
+       addr = regs.isp;
+       (*c) += 3;
+    } else if (!strcmp(tmp, "PC")) {
+       addr = regs.pc;
+       (*c) += 2;
+    } else if (tmp[0] == 'A' || tmp[0] == 'D') {
+       int reg = 0;
+       if (tmp[0] == 'A')
+           reg += 8;
+       reg += tmp[1] - '0';
+       if (reg < 0 || reg > 15)
+           return 0;
+       addr = regs.regs[reg];
+       (*c) += 2;
+    } else {
+       return 0;
+    }
+    *valp = addr;
+    (*c) += extra;
+    return 1;
+}
+
+static uae_u32 readbinx (char **c)
 {
     uae_u32 val = 0;
-    char nc;
 
     ignore_ws (c);
-    if (**c == '!' || **c == '_') {
+    for (;;) {
+       char nc = **c;
+       if (nc != '1' && nc != '0')
+           break;
        (*c)++;
-       return readint (c);
+       val <<= 1;
+       if (nc == '1')
+           val |= 1;
     }
+    return val;
+}
+
+static uae_u32 readhexx (char **c)
+{
+    uae_u32 val = 0;
+    char nc;
+
+    ignore_ws (c);
     while (isxdigit(nc = **c)) {
        (*c)++;
        val *= 16;
@@ -176,21 +264,13 @@ static uae_u32 readhex (char **c)
     return val;
 }
 
-static uae_u32 readint (char **c)
+static uae_u32 readintx (char **c)
 {
     uae_u32 val = 0;
     char nc;
     int negative = 0;
 
     ignore_ws (c);
-    if (**c == '$') {
-       (*c)++;
-       return readhex (c);
-    }
-    if (**c == '0' && toupper((*c)[1]) == 'X') {
-       (*c)+= 2;
-       return readhex (c);
-    }
     if (**c == '-')
        negative = 1, (*c)++;
     while (isdigit(nc = **c)) {
@@ -201,6 +281,62 @@ static uae_u32 readint (char **c)
     return val * (negative ? -1 : 1);
 }
 
+
+static int checkvaltype (char **c, uae_u32 *val)
+{
+    char nc;
+
+    ignore_ws (c);
+    nc = toupper(**c);
+    if (nc == '!') {
+       (*c)++;
+       *val = readintx (c);
+       return 1;
+    }
+    if (nc == '$') {
+       (*c)++;
+       *val = readhexx (c);
+       return 1;
+    }
+    if (nc == '0' && toupper((*c)[1]) == 'X') {
+       (*c)+= 2;
+       *val = readhexx (c);
+       return 1;
+    }
+    if (nc == '%') {
+       (*c)++;
+       *val = readbinx (c);
+       return 1;
+    }
+    if (nc >= 'A' && nc <= 'Z' && nc != 'A' && nc != 'D') {
+       if (readregx (c, val))
+           return 1;
+    }
+    return 0;
+}
+
+static uae_u32 readint (char **c)
+{
+    uae_u32 val;
+    if (checkvaltype (c, &val))
+       return val;
+    return readintx (c);
+}
+static uae_u32 readhex (char **c)
+{
+    uae_u32 val;
+    if (checkvaltype (c, &val))
+       return val;
+    return readhexx (c);
+}
+static uae_u32 readbin (char **c)
+{
+    uae_u32 val;
+    if (checkvaltype (c, &val))
+       return val;
+    return readbinx (c);
+}
+
 static char next_char(char **c)
 {
     ignore_ws (c);
@@ -247,6 +383,19 @@ static int next_string (char **c, char *out, int max, int forceupper)
     return strlen (out);
 }
 
+static void converter (char **c)
+{
+    uae_u32 v = readint (c);
+    char s[100];
+    char *p = s;
+    int i;
+
+    for (i = 0; i < 32; i++)
+       s[i] = (v & (1 << (31 - i))) ? '1' : '0';
+    s[i] = 0;
+    console_out ("0x%08X = %%%s = %u = %d\n", v, s, v, (uae_s32)v);
+}
+
 static uae_u32 lastaddr (void)
 {
     if (currprefs.z3fastmem_size)
@@ -405,49 +554,11 @@ static void dumpmem (uaecptr addr, uaecptr *nxmem, int lines)
     char line[MAX_LINEWIDTH + 1];
     for (;lines--;) {
        addr = dumpmem2 (addr, line, sizeof(line));
-       console_out ("%s", line);
-       console_out ("\n");
-    }
-    *nxmem = addr;
-}
-
-static void dumpmemreg (char **inptr)
-{
-    int i;
-    char *p = *inptr;
-    uaecptr nxmem, addr;
-    char tmp[10];
-
-    addr = 0;
-    i = 0;
-    while (p[i]) {
-       tmp[i] = toupper(p[i]);
-       if (i >= sizeof (tmp) - 1)
+       debug_out ("%s", line);
+       if (!debug_out ("\n"))
            break;
-       i++;
     }
-    tmp[i] = 0;
-    if (!strcmp(tmp, "USP"))
-       addr = regs.usp;
-    if (!strcmp(tmp, "VBR"))
-       addr = regs.vbr;
-    if (!strcmp(tmp, "MSP"))
-       addr = regs.msp;
-    if (!strcmp(tmp, "ISP"))
-       addr = regs.isp;
-    if (!strcmp(tmp, "PC"))
-       addr = regs.pc;
-    if (toupper(p[0]) == 'A' || toupper(p[0]) == 'D') {
-       int reg = 0;
-       if (toupper(p[0]) == 'A')
-           reg += 8;
-       reg += p[1] - '0';
-       if (reg < 0 || reg > 15)
-           return;
-       addr = regs.regs[reg];
-    }
-    addr -= 16;
-    dumpmem (addr, &nxmem, 20);
+    *nxmem = addr;
 }
 
 static void dump_custom_regs (int aga)
@@ -834,7 +945,7 @@ static void deepcheatsearch (char **c)
                *p1++ = get_byte (i);
            addr = end - 1;
        }
-       console_out("Deep trainer first pass complete.\n");
+       console_out ("Deep trainer first pass complete.\n");
        return;
     }
     inconly = deconly = 0;
@@ -941,7 +1052,7 @@ static void cheatsearch (char **c)
     ignore_ws (c);
     if (!more_params(c)) {
        first = 1;
-       console_out("search reset\n");
+       console_out ("search reset\n");
        xfree (vlist);
        listsize = memsize;
        vlist = (uae_u8*)xcalloc (listsize >> 3, 1);
@@ -1088,8 +1199,10 @@ static void illg_init (void)
        memset (illgdebug + 0xe00000, 1, 512 * 1024); /* CD32 ext ROM */
     }
 #endif
-    if (currprefs.cs_ksmirror)
+    if (currprefs.cs_ksmirror_e0)
        memset (illgdebug + 0xe00000, 1, 512 * 1024);
+    if (currprefs.cs_ksmirror_a8)
+       memset (illgdebug + 0xa80000, 1, 2 * 512 * 1024);
 #ifdef FILESYS
     if (uae_boot_rom) /* filesys "rom" */
        memset (illgdebug + rtarea_base, 1, 0x10000);
@@ -1185,7 +1298,7 @@ static void smc_detect_init (char **c)
        initialize_memwatch (0);
     if (v)
        smc_mode = 1;
-    console_out("SMCD enabled. Break=%d\n", smc_mode);
+    console_out ("SMCD enabled. Break=%d\n", smc_mode);
 }
 
 #define SMC_MAXHITS 8
@@ -1227,12 +1340,12 @@ static void smc_detector (uaecptr addr, int rwi, int size, uae_u32 *valp)
     }
     if (hitcnt < 100) {
        smc_table[hitaddr].cnt++;
-       console_out("SMC at %08.8X - %08.8X (%d) from %08.8X\n",
+       console_out ("SMC at %08.8X - %08.8X (%d) from %08.8X\n",
            hitaddr, hitaddr + hitcnt, hitcnt, hitpc);
        if (smc_mode)
            activate_debugger ();
        if (smc_table[hitaddr].cnt >= SMC_MAXHITS)
-           console_out("* hit count >= %d, future hits ignored\n", SMC_MAXHITS);
+           console_out ("* hit count >= %d, future hits ignored\n", SMC_MAXHITS);
     }
 }
 
@@ -1675,19 +1788,6 @@ static void memwatch (char **c)
     memwatch_dump (num);
 }
 
-static void writeintoreg (char **c)
-{
-    char cc, cc2;
-
-    ignore_ws(c);
-    cc = toupper(*c[0]);
-    cc2 = toupper(*c[1]);
-    if ((cc == 'D' || cc == 'A') && cc2 >= '0' && cc2 <= '7') {
-
-
-    }
-}
-
 static void writeintomem (char **c)
 {
     uae_u32 addr = 0;
@@ -1789,12 +1889,12 @@ static void memory_map_dump_2 (int log)
            if (log)
                write_log (txt);
            else
-               console_out(txt);
+               console_out (txt);
            if (tmp[0]) {
                if (log)
                    write_log (tmp);
                else
-                   console_out(tmp);
+                   console_out (tmp);
            }
            j = i;
            a1 = a2;
@@ -2142,7 +2242,7 @@ static void disk_debug(char **inptr)
        (*inptr)++;
        ignore_ws(inptr);
        disk_debug_logging = readint(inptr);
-       console_out("disk logging level %d\n", disk_debug_logging);
+       console_out ("disk logging level %d\n", disk_debug_logging);
        return;
     }
     disk_debug_mode = 0;
@@ -2165,7 +2265,7 @@ static void disk_debug(char **inptr)
     if (disk_debug_logging == 0)
        disk_debug_logging = 1;
 end:
-    console_out("disk breakpoint mode %c%c%c track %d\n",
+    console_out ("disk breakpoint mode %c%c%c track %d\n",
        disk_debug_mode & DISK_DEBUG_DMA_READ ? 'R' : '-',
        disk_debug_mode & DISK_DEBUG_DMA_WRITE ? 'W' : '-',
        disk_debug_mode & DISK_DEBUG_PIO ? 'P' : '-',
@@ -2176,6 +2276,7 @@ static void find_ea (char **inptr)
 {
     uae_u32 ea, sea, dea;
     uaecptr addr, end;
+    int hits = 0;
 
     addr = 0;
     end = lastaddr();
@@ -2185,14 +2286,20 @@ static void find_ea (char **inptr)
        if (more_params(inptr))
            end = readhex (inptr);
     }
-    console_out("Searching from %08.8X to %08.8X\n", addr, end);
+    console_out ("Searching from %08X to %08X\n", addr, end);
     while((addr = nextaddr(addr, &end)) != 0xffffffff) {
        if ((addr & 1) == 0 && addr + 6 <= end) {
            sea = 0xffffffff;
            dea = 0xffffffff;
            m68k_disasm_ea (NULL, addr, NULL, 1, &sea, &dea);
-           if (ea == sea || ea == dea)
+           if (ea == sea || ea == dea) {
                m68k_disasm (stdout, addr, NULL, 1);
+               hits++;
+               if (hits > 100) {
+                   write_log ("Too many hits. End addr = %08X\n", addr);
+                   break;
+               }
+           }
        }
     }
 }
@@ -2230,9 +2337,13 @@ static void m68k_modify (char **inptr)
     } else if (!strcmp (parm, "CCR")) {
        regs.sr = (regs.sr & ~31) | (v & 31);
        MakeFromSR (&regs);
+    } else if (!strcmp(parm, "USP")) {
+       regs.usp = v;
+    } else if (!strcmp(parm, "ISP")) {
+       regs.isp = v;
     } else if (!strcmp (parm, "PC")) {
        m68k_setpc (&regs, v);
-       fill_prefetch_slow(&regs);
+       fill_prefetch_slow (&regs);
     } else {
        for (i = 0; m2cregs[i].regname; i++) {
            if (!strcmp (parm, m2cregs[i].regname))
@@ -2259,14 +2370,17 @@ static void debug_1 (void)
        update_debug_info();
        console_out (">");
        console_flush ();
+       debug_linecounter = 0;
        v = console_get (input, MAX_LINEWIDTH);
        if (v < 0)
            return;
        if (v == 0)
            continue;
+
        inptr = input;
        cmd = next_char (&inptr);
-       switch (cmd) {
+       switch (cmd)
+       {
        case 'c': dumpcia (); dumpdisk (); dumpcustom (); break;
        case 'i':
            addr = 0xffffffff;
@@ -2435,13 +2549,7 @@ static void debug_1 (void)
            uae_u32 maddr;
            int lines;
            if (more_params(&inptr)) {
-               if (toupper(inptr[0]) == 'R') {
-                   inptr++;
-                   dumpmemreg(&inptr);
-                   break;
-               } else {
-                   maddr = readhex(&inptr);
-               }
+               maddr = readhex(&inptr);
            } else {
                maddr = nxmem;
            }
@@ -2486,7 +2594,10 @@ static void debug_1 (void)
            break;
        case 'h':
        case '?':
-           debug_help ();
+           if (more_params (&inptr))
+               converter (&inptr);
+           else
+               debug_help ();
        break;
        }
     }
@@ -2495,8 +2606,8 @@ static void debug_1 (void)
 static void addhistory(void)
 {
     uae_u32 pc = m68k_getpc (&regs);
-    if (!notinrom())
-       return;
+//    if (!notinrom())
+//     return;
     history[lasthist] = regs;
     history[lasthist].pc = m68k_getpc (&regs);
     if (++lasthist == MAX_HIST)
index 62b42457a907cb18ae3dda076f10bfefc2e7858b..6ba84f29814897b1ff65dbe93bd25f60cb0c0480 100644 (file)
--- a/drawing.c
+++ b/drawing.c
@@ -2593,8 +2593,8 @@ void vsync_handle_redraw (int long_frame, int lof_changed)
        if (currprefs.gfx_afullscreen && currprefs.gfx_avsync)
            flush_screen (0, 0); /* vsync mode */
     }
-    gui_hd_led (0);
-    gui_cd_led (0);
+    gui_hd_led (-1, 0);
+    gui_cd_led (-1, 0);
 #ifdef AVIOUTPUT
     frame_drawn ();
 #endif
index 8721a797c492608dd73210732911e425266910df..bb67541ddb45a71ba4021592a2559e445220f4bd 100644 (file)
--- a/filesys.c
+++ b/filesys.c
@@ -3163,7 +3163,7 @@ static void action_examine_next (Unit *unit, dpacket packet)
     uae_u32 uniq;
 
     TRACE(("ACTION_EXAMINE_NEXT(0x%lx,0x%lx)\n", lock, info));
-    gui_hd_led (1);
+    gui_hd_led (unit->unit, 1);
     DUMPLOCK(unit, lock);
 
     if (lock != 0)
@@ -3472,7 +3472,7 @@ action_read (Unit *unit, dpacket packet)
        return;
     }
     TRACE(("ACTION_READ(%s,0x%lx,%ld)\n",k->aino->nname,addr,size));
-    gui_hd_led (1);
+    gui_hd_led (unit->unit, 1);
 #ifdef RELY_ON_LOADSEG_DETECTION
     /* HACK HACK HACK HACK
      * Try to detect a LoadSeg() */
@@ -3552,7 +3552,7 @@ action_write (Unit *unit, dpacket packet)
        return;
     }
 
-    gui_hd_led (2);
+    gui_hd_led (unit->unit, 2);
     TRACE(("ACTION_WRITE(%s,0x%lx,%ld)\n",k->aino->nname,addr,size));
 
     if (unit->ui.readonly) {
@@ -3613,7 +3613,7 @@ action_seek (Unit *unit, dpacket packet)
     if (mode < 0) whence = SEEK_SET;
 
     TRACE(("ACTION_SEEK(%s,%d,%d)\n", k->aino->nname, pos, mode));
-    gui_hd_led (1);
+    gui_hd_led (unit->unit, 1);
 
     old = fs_lseek (unit, k->fd, 0, SEEK_CUR);
     {
@@ -3679,7 +3679,7 @@ action_set_protect (Unit *unit, dpacket packet)
        PUT_PCK_RES1 (packet, DOS_TRUE);
     }
     notify_check (unit, a);
-    gui_hd_led (2);
+    gui_hd_led (unit->unit, 2);
 }
 
 static void action_set_comment (Unit * unit, dpacket packet)
@@ -3731,7 +3731,7 @@ static void action_set_comment (Unit * unit, dpacket packet)
     a->comment = commented;
     fsdb_set_file_attrs (a);
     notify_check (unit, a);
-    gui_hd_led (2);
+    gui_hd_led (unit->unit, 2);
 }
 
 static void
@@ -3919,7 +3919,7 @@ action_create_dir (Unit *unit, dpacket packet)
     notify_check (unit, aino);
     updatedirtime (aino, 0);
     PUT_PCK_RES1 (packet, make_lock (unit, aino->uniq, -2) >> 2);
-    gui_hd_led (2);
+    gui_hd_led (unit->unit, 2);
 }
 
 static void
@@ -3969,7 +3969,7 @@ action_set_file_size (Unit *unit, dpacket packet)
        return;
     }
 
-    gui_hd_led (1);
+    gui_hd_led (unit->unit, 1);
     k->notifyactive = 1;
     /* If any open files have file pointers beyond this size, truncate only
      * so far that these pointers do not become invalid.  */
@@ -4107,7 +4107,7 @@ action_delete_object (Unit *unit, dpacket packet)
        delete_aino (unit, a);
     }
     PUT_PCK_RES1 (packet, DOS_TRUE);
-    gui_hd_led (2);
+    gui_hd_led (unit->unit, 2);
 }
 
 static void
@@ -4140,7 +4140,7 @@ action_set_date (Unit *unit, dpacket packet)
        notify_check (unit, a);
        PUT_PCK_RES1 (packet, DOS_TRUE);
     }
-    gui_hd_led (2);
+    gui_hd_led (unit->unit, 2);
 }
 
 static void
@@ -4246,7 +4246,7 @@ action_rename_object (Unit *unit, dpacket packet)
     if (a2->elock > 0 || a2->shlock > 0 || wehavekeys > 0)
        de_recycle_aino (unit, a2);
     PUT_PCK_RES1 (packet, DOS_TRUE);
-    gui_hd_led (2);
+    gui_hd_led (unit->unit, 2);
 }
 
 static void
diff --git a/gayle.c b/gayle.c
index 644c03eee0c43101c37b276a9100e4f6d00bceed..2f2b3ae0cbc744ae349d547d797813e913d54895 100644 (file)
--- a/gayle.c
+++ b/gayle.c
@@ -358,7 +358,7 @@ static void ide_read_sectors (int multi)
        ide_fail ();
        return;
     }
-    gui_hd_led (1);
+    gui_hd_led (ide->num, 1);
     nsec = ide_nsector == 0 ? 256 : ide_nsector;
     get_lbachs (ide, &lba, &cyl, &head, &sec);
     if (IDE_LOG > 0)
@@ -384,7 +384,7 @@ static void ide_write_sectors (int multi)
        ide_fail ();
        return;
     }
-    gui_hd_led (2);
+    gui_hd_led (ide->num, 2);
     nsec = ide_nsector == 0 ? 256 : ide_nsector;
     get_lbachs (ide, &lba, &cyl, &head, &sec);
     if (lba * 512 >= ide->hdhfd.size) {
@@ -1181,7 +1181,6 @@ static void checkflush (int addr)
            int len = end - start;
            if (len > 0) {
                hdf_write (&pcmcia_sram->hfd, pcmcia_common + start, start, len);
-               write_log ("write %d %d\n", start, len);
                pcmcia_write_min = -1;
            }
        }
index dd8bd3b71d637a119ea403d8b84afddf01df2ab4..1ba76480a050891aad4e5c96b683b89e92cbae30 100644 (file)
@@ -363,7 +363,7 @@ int hdf_hd_open(struct hd_hardfiledata *hfd, char *path, int blocksize, int read
 
 static uae_u64 cmd_readx (struct hardfiledata *hfd, uae_u8 *dataptr, uae_u64 offset, uae_u64 len)
 {
-    gui_hd_led (1);
+    gui_hd_led (hfd->unitnum, 1);
     hf_log3 ("cmd_read: %p %04.4x-%08.8x (%d) %08.8x (%d)\n",
        dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize));
     return hdf_read (hfd, dataptr, offset, len);
@@ -377,7 +377,7 @@ static uae_u64 cmd_read (struct hardfiledata *hfd, uaecptr dataptr, uae_u64 offs
 }
 static uae_u64 cmd_writex (struct hardfiledata *hfd, uae_u8 *dataptr, uae_u64 offset, uae_u64 len)
 {
-    gui_hd_led (2);
+    gui_hd_led (hfd->unitnum, 2);
     hf_log3 ("cmd_write: %p %04.4x-%08.8x (%d) %08.8x (%d)\n",
        dataptr, (uae_u32)(offset >> 32), (uae_u32)offset, (uae_u32)(offset / hfd->blocksize), (uae_u32)len, (uae_u32)(len / hfd->blocksize));
     return hdf_write (hfd, dataptr, offset, len);
index e223460103acc6cbf824abad04fd5bc8fe483ad4..dd61df70cad43a8ad667980bfa6d6cac4016c5e5 100644 (file)
@@ -17,6 +17,7 @@ extern void cia_diskindex (void);
 
 extern void dumpcia (void);
 extern void rethink_cias (void);
+extern int resetwarning_do (int);
 
 extern int parallel_direct_write_data (uae_u8, uae_u8);
 extern int parallel_direct_read_data (uae_u8*);
index 1ed0f596c5e0441ff5a15cdc135aacc6cb6b2919..e5a36db406b49a863f10de9e5018969055bcb36f 100644 (file)
@@ -34,6 +34,7 @@ struct hardfiledata {
     int warned;
     uae_u8 *virtual_rdb;
     uae_u64 virtual_size;
+    int unitnum;
 
     int drive_empty;
     char *emptyname;
index 8461386b0c04e7d3b55a3e17c100f4ac203f0333..407fb2634a8bc268ec2be7db5e3569bd49ffa81e 100644 (file)
@@ -16,8 +16,8 @@ extern void gui_fps (int fps, int idle);
 extern void gui_changesettings (void);
 extern void gui_lock (void);
 extern void gui_unlock (void);
-extern void gui_hd_led (int);
-extern void gui_cd_led (int);
+extern void gui_hd_led (int, int);
+extern void gui_cd_led (int, int);
 extern unsigned int gui_ledstate;
 extern void gui_display(int shortcut);
 
index 593af345b7683b494fb71c36eecf85ef4a4c0e8f..6f5731fb2c2d7ccebc2ba45357b40527d6c9861e 100644 (file)
@@ -131,7 +131,6 @@ extern struct regstruct
 #endif
 
     uae_u32 pcr;
-    uae_u32 kick_mask;
     uae_u32 address_space_mask;
 
     uae_u8 panic;
index 9f0d45ed7c0a760d19f72629e2aa74b2b6e18f88..aa48032ff86a7bbcc70787cb69cd9d1ef6e6d6ea 100644 (file)
@@ -205,7 +205,9 @@ struct uae_prefs {
     int cs_rtc;
     int cs_rtc_adjust;
     int cs_rtc_adjust_mode;
-    int cs_ksmirror;
+    int cs_ksmirror_e0;
+    int cs_ksmirror_a8;
+    int cs_ciaoverlay;
     int cs_cd32cd;
     int cs_cd32c2p;
     int cs_cd32nvram;
@@ -224,6 +226,7 @@ struct uae_prefs {
     int cs_a2091, cs_a4091;
     int cs_df0idhw;
     int cs_slowmemisfast;
+    int cs_resetwarning;
 
     char df[4][MAX_DPATH];
     char dfxlist[MAX_SPARE_DRIVES][MAX_DPATH];
index aab37ee43356bced8e8789880efa1c71aebc5413..c8e54b2e0b08e0a6a7d7d1e253e0dfd1cc500fa0 100644 (file)
@@ -1510,8 +1510,13 @@ void inputdevice_do_keyboard (int code, int state)
     if (code < 0x80) {
        uae_u8 key = code | (state ? 0x00 : 0x80);
        keybuf[key & 0x7f] = (key & 0x80) ? 0 : 1;
-       if (((keybuf[AK_CTRL] || keybuf[AK_RCTRL]) && keybuf[AK_LAMI] && keybuf[AK_RAMI]) || key == AK_RESETWARNING) {
+       if (key == AK_RESETWARNING) {
+           resetwarning_do (0);
+           return;
+       } else if ((keybuf[AK_CTRL] || keybuf[AK_RCTRL]) && keybuf[AK_LAMI] && keybuf[AK_RAMI]) {
            int r = keybuf[AK_LALT] | keybuf[AK_RALT];
+           if (!r && currprefs.cs_resetwarning && resetwarning_do (1))
+               return;
            memset (keybuf, 0, sizeof (keybuf));
            uae_reset (r);
        }
@@ -1959,11 +1964,12 @@ static int getoldport (struct uae_input_device *id)
 
 static int switchdevice (struct uae_input_device *id, int num, int button)
 {
-    int i;
+    int i, j;
     int ismouse = 0;
     int newport = 0;
     int flags = 0;
     char *name = NULL;
+    int otherbuttonpressed = 0;
 
     if (num >= 4)
        return 0;
@@ -1974,6 +1980,13 @@ static int switchdevice (struct uae_input_device *id, int num, int button)
            name = idev[IDTYPE_JOYSTICK].get_uniquename (i);
            newport = num == 0 ? 1 : 0;
            flags = idev[IDTYPE_JOYSTICK].get_flags (i);
+           for (j = 0; j < MAX_INPUT_DEVICES; j++) {
+               if (j != i) {
+                   struct uae_input_device2 *id2 = &joysticks2[j];
+                   if (id2->buttonmask)
+                       otherbuttonpressed = 1;
+               }
+           }
        }
        if (id == &mice[i]) {
            ismouse = 1;
@@ -1984,6 +1997,8 @@ static int switchdevice (struct uae_input_device *id, int num, int button)
     }
     if (!name)
        return 0;
+    if (num == 0 && otherbuttonpressed)
+        newport = newport ? 0 : 1;
     if (!currprefs.input_selected_setting) {
        if (num == 0 || num == 1) {
            int om = jsem_ismouse (num, &currprefs);
diff --git a/main.c b/main.c
index 412b436cbecede8282e5072c5ba2d485d2125fc1..96e8de4e15112f12b2b4dc73dddc5b50761d975d 100644 (file)
--- a/main.c
+++ b/main.c
@@ -180,7 +180,7 @@ void fixup_prefs (struct uae_prefs *p)
     if ((p->gfxmem_size & (p->gfxmem_size - 1)) != 0
        || (p->gfxmem_size != 0 && (p->gfxmem_size < 0x100000 || p->gfxmem_size > max_z3fastmem / 2)))
     {
-       write_log ("Unsupported graphics card memory size %x!\n", p->gfxmem_size);
+       write_log ("Unsupported graphics card memory size %x (%x)!\n", p->gfxmem_size, max_z3fastmem / 2);
        if (p->gfxmem_size > max_z3fastmem / 2)
            p->gfxmem_size = max_z3fastmem / 2;
        else
@@ -190,11 +190,11 @@ void fixup_prefs (struct uae_prefs *p)
     if ((p->z3fastmem_size & (p->z3fastmem_size - 1)) != 0
        || (p->z3fastmem_size != 0 && (p->z3fastmem_size < 0x100000 || p->z3fastmem_size > max_z3fastmem)))
     {
+       write_log ("Unsupported Zorro III fastmem size %x (%x)!\n", p->z3fastmem_size, max_z3fastmem);
        if (p->z3fastmem_size > max_z3fastmem)
            p->z3fastmem_size = max_z3fastmem;
        else
            p->z3fastmem_size = 0;
-       write_log ("Unsupported Zorro III fastmem size!\n");
        err = 1;
     }
     p->z3fastmem_start &= ~0xffff;
index 8b831527e8d411f32d9374a9bf5ca315e5a67777..eaf14375fb4a01dff080c0b76214df6f6045df98 100644 (file)
--- a/memory.c
+++ b/memory.c
@@ -461,6 +461,28 @@ int decode_cloanto_rom_do (uae_u8 *mem, int size, int real_size)
     return get_keyring();
 }
 
+static int decode_rekick_rom_do (uae_u8 *mem, int size, int real_size)
+{
+    uae_u32 d1 = 0xdeadfeed, d0;
+    int i;
+
+    for (i = 0; i < size / 8; i++) {
+       d0 = ((mem[i * 8 + 0] << 24) | (mem[i * 8 + 1] << 16) | (mem[i * 8 + 2] << 8) | mem[i * 8 + 3]);
+       d1 = d1 ^ d0;
+       mem[i * 8 + 0] = d1 >> 24;
+       mem[i * 8 + 1] = d1 >> 16;
+       mem[i * 8 + 2] = d1 >> 8;
+       mem[i * 8 + 3] = d1;
+       d1 = ((mem[i * 8 + 4] << 24) | (mem[i * 8 + 5] << 16) | (mem[i * 8 + 6] << 8) | mem[i * 8 + 7]);
+       d0 = d0 ^ d1;
+       mem[i * 8 + 4] = d0 >> 24;
+       mem[i * 8 + 5] = d0 >> 16;
+       mem[i * 8 + 6] = d0 >> 8;
+       mem[i * 8 + 7] = d0;
+    }
+    return 1;
+}
+
 static void addkey(int *pkeyid, uae_u8 *key, int size, const char *name)
 {
     int keyid = *pkeyid;
@@ -602,15 +624,21 @@ void free_keyring (void)
     memset(keyring, 0, sizeof (struct rom_key) * ROM_KEY_NUM);
 }
 
-static int decode_cloanto_rom (uae_u8 *mem, int size, int real_size)
+static int decode_rom (uae_u8 *mem, int size, int mode, int real_size)
 {
-    if (!decode_cloanto_rom_do (mem, size, real_size)) {
-       #ifndef SINGLEFILE
-       notify_user (NUMSG_NOROMKEY);
-       #endif
-       return 0;
+    if (mode == 1) {
+       if (!decode_cloanto_rom_do (mem, size, real_size)) {
+           #ifndef SINGLEFILE
+           notify_user (NUMSG_NOROMKEY);
+           #endif
+           return 0;
+       }
+       return 1;
+    } else if (mode == 2) {
+       decode_rekick_rom_do (mem, size, real_size);
+       return 1;
     }
-    return 1;
+    return 0;
 }
 
 struct romdata *getromdatabyname (char *name)
@@ -697,10 +725,20 @@ struct romdata *getromdatabydata (uae_u8 *rom, int size)
        uae_u8 *tmpbuf = (uae_u8*)xmalloc (size);
        int tmpsize = size - 11;
        memcpy (tmpbuf, rom + 11, tmpsize);
-       decode_cloanto_rom (tmpbuf, tmpsize, tmpsize);
+       decode_rom (tmpbuf, tmpsize, 1, tmpsize);
        rom = tmpbuf;
        size = tmpsize;
     }
+#if 0
+    if (size > 0x6c + 524288 && !memcmp (rom, "AMIG", 4)) {
+       uae_u8 *tmpbuf = (uae_u8*)xmalloc (size);
+       int tmpsize = size - 0x6c;
+       memcpy (tmpbuf, rom + 0x6c, tmpsize);
+       decode_rom (tmpbuf, tmpsize, 2, tmpsize);
+       rom = tmpbuf;
+       size = tmpsize;
+    }
+#endif
     get_sha1 (rom, size, sha1);
     ret = checkromdata(sha1, size, -1);
     if (!ret) {
@@ -851,7 +889,7 @@ int addr_valid(char *txt, uaecptr addr, uae_u32 len)
 }
 
 uae_u32        chipmem_mask, chipmem_full_mask;
-uae_u32 kickmem_mask, extendedkickmem_mask, bogomem_mask;
+uae_u32 kickmem_mask, extendedkickmem_mask, extendedkickmem2_mask, bogomem_mask;
 uae_u32 a3000lmem_mask, a3000hmem_mask, cardmem_mask;
 
 static int illegal_count;
@@ -1630,9 +1668,9 @@ static uae_u8 *REGPARAM2 kickmem_xlate (uaecptr addr)
 
 /* CD32/CDTV extended kick memory */
 
-uae_u8 *extendedkickmemory;
-static int extendedkickmem_size;
-static uae_u32 extendedkickmem_start;
+uae_u8 *extendedkickmemory, *extendedkickmemory2;
+static int extendedkickmem_size, extendedkickmem2_size;
+static uae_u32 extendedkickmem_start, extendedkickmem2_start;
 static int extendedkickmem_type;
 
 #define EXTENDED_ROM_CD32 1
@@ -1648,7 +1686,6 @@ static void REGPARAM3 extendedkickmem_wput (uaecptr, uae_u32) REGPARAM;
 static void REGPARAM3 extendedkickmem_bput (uaecptr, uae_u32) REGPARAM;
 static int REGPARAM3 extendedkickmem_check (uaecptr addr, uae_u32 size) REGPARAM;
 static uae_u8 *REGPARAM3 extendedkickmem_xlate (uaecptr addr) REGPARAM;
-
 static uae_u32 REGPARAM2 extendedkickmem_lget (uaecptr addr)
 {
     uae_u32 *m;
@@ -1657,7 +1694,6 @@ static uae_u32 REGPARAM2 extendedkickmem_lget (uaecptr addr)
     m = (uae_u32 *)(extendedkickmemory + addr);
     return do_get_mem_long (m);
 }
-
 static uae_u32 REGPARAM2 extendedkickmem_wget (uaecptr addr)
 {
     uae_u16 *m;
@@ -1666,14 +1702,12 @@ static uae_u32 REGPARAM2 extendedkickmem_wget (uaecptr addr)
     m = (uae_u16 *)(extendedkickmemory + addr);
     return do_get_mem_word (m);
 }
-
 static uae_u32 REGPARAM2 extendedkickmem_bget (uaecptr addr)
 {
     addr -= extendedkickmem_start & extendedkickmem_mask;
     addr &= extendedkickmem_mask;
     return extendedkickmemory[addr];
 }
-
 static void REGPARAM2 extendedkickmem_lput (uaecptr addr, uae_u32 b)
 {
 #ifdef JIT
@@ -1682,7 +1716,6 @@ static void REGPARAM2 extendedkickmem_lput (uaecptr addr, uae_u32 b)
     if (currprefs.illegal_mem)
        write_log ("Illegal extendedkickmem lput at %08lx\n", addr);
 }
-
 static void REGPARAM2 extendedkickmem_wput (uaecptr addr, uae_u32 b)
 {
 #ifdef JIT
@@ -1691,7 +1724,6 @@ static void REGPARAM2 extendedkickmem_wput (uaecptr addr, uae_u32 b)
     if (currprefs.illegal_mem)
        write_log ("Illegal extendedkickmem wput at %08lx\n", addr);
 }
-
 static void REGPARAM2 extendedkickmem_bput (uaecptr addr, uae_u32 b)
 {
 #ifdef JIT
@@ -1700,14 +1732,12 @@ static void REGPARAM2 extendedkickmem_bput (uaecptr addr, uae_u32 b)
     if (currprefs.illegal_mem)
        write_log ("Illegal extendedkickmem lput at %08lx\n", addr);
 }
-
 static int REGPARAM2 extendedkickmem_check (uaecptr addr, uae_u32 size)
 {
     addr -= extendedkickmem_start & extendedkickmem_mask;
     addr &= extendedkickmem_mask;
     return (addr + size) <= extendedkickmem_size;
 }
-
 static uae_u8 *REGPARAM2 extendedkickmem_xlate (uaecptr addr)
 {
     addr -= extendedkickmem_start & extendedkickmem_mask;
@@ -1715,6 +1745,74 @@ static uae_u8 *REGPARAM2 extendedkickmem_xlate (uaecptr addr)
     return extendedkickmemory + addr;
 }
 
+static uae_u32 REGPARAM3 extendedkickmem2_lget (uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 extendedkickmem2_wget (uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 extendedkickmem2_bget (uaecptr) REGPARAM;
+static void REGPARAM3 extendedkickmem2_lput (uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 extendedkickmem2_wput (uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 extendedkickmem2_bput (uaecptr, uae_u32) REGPARAM;
+static int REGPARAM3 extendedkickmem2_check (uaecptr addr, uae_u32 size) REGPARAM;
+static uae_u8 *REGPARAM3 extendedkickmem2_xlate (uaecptr addr) REGPARAM;
+static uae_u32 REGPARAM2 extendedkickmem2_lget (uaecptr addr)
+{
+    uae_u32 *m;
+    addr -= extendedkickmem2_start & extendedkickmem2_mask;
+    addr &= extendedkickmem2_mask;
+    m = (uae_u32 *)(extendedkickmemory2 + addr);
+    return do_get_mem_long (m);
+}
+static uae_u32 REGPARAM2 extendedkickmem2_wget (uaecptr addr)
+{
+    uae_u16 *m;
+    addr -= extendedkickmem2_start & extendedkickmem2_mask;
+    addr &= extendedkickmem2_mask;
+    m = (uae_u16 *)(extendedkickmemory2 + addr);
+    return do_get_mem_word (m);
+}
+static uae_u32 REGPARAM2 extendedkickmem2_bget (uaecptr addr)
+{
+    addr -= extendedkickmem2_start & extendedkickmem2_mask;
+    addr &= extendedkickmem2_mask;
+    return extendedkickmemory2[addr];
+}
+static void REGPARAM2 extendedkickmem2_lput (uaecptr addr, uae_u32 b)
+{
+#ifdef JIT
+    special_mem |= S_WRITE;
+#endif
+    if (currprefs.illegal_mem)
+       write_log ("Illegal extendedkickmem2 lput at %08lx\n", addr);
+}
+static void REGPARAM2 extendedkickmem2_wput (uaecptr addr, uae_u32 b)
+{
+#ifdef JIT
+    special_mem |= S_WRITE;
+#endif
+    if (currprefs.illegal_mem)
+       write_log ("Illegal extendedkickmem2 wput at %08lx\n", addr);
+}
+static void REGPARAM2 extendedkickmem2_bput (uaecptr addr, uae_u32 b)
+{
+#ifdef JIT
+    special_mem |= S_WRITE;
+#endif
+    if (currprefs.illegal_mem)
+       write_log ("Illegal extendedkickmem2 lput at %08lx\n", addr);
+}
+static int REGPARAM2 extendedkickmem2_check (uaecptr addr, uae_u32 size)
+{
+    addr -= extendedkickmem2_start & extendedkickmem2_mask;
+    addr &= extendedkickmem2_mask;
+    return (addr + size) <= extendedkickmem2_size;
+}
+static uae_u8 *REGPARAM2 extendedkickmem2_xlate (uaecptr addr)
+{
+    addr -= extendedkickmem2_start & extendedkickmem2_mask;
+    addr &= extendedkickmem2_mask;
+    return extendedkickmemory2 + addr;
+}
+
+
 /* Default memory access functions */
 
 int REGPARAM2 default_check (uaecptr a, uae_u32 b)
@@ -1836,6 +1934,12 @@ addrbank extendedkickmem_bank = {
     extendedkickmem_xlate, extendedkickmem_check, NULL, "Extended Kickstart ROM",
     extendedkickmem_lget, extendedkickmem_wget, ABFLAG_ROM
 };
+addrbank extendedkickmem2_bank = {
+    extendedkickmem2_lget, extendedkickmem2_wget, extendedkickmem2_bget,
+    extendedkickmem2_lput, extendedkickmem2_wput, extendedkickmem2_bput,
+    extendedkickmem2_xlate, extendedkickmem2_check, NULL, "Extended 2nd Kickstart ROM",
+    extendedkickmem2_lget, extendedkickmem2_wget, ABFLAG_ROM
+};
 
 
 static uae_u32 allocated_custmem1, allocated_custmem2;
@@ -2063,6 +2167,12 @@ static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksu
     if (!memcmp(buffer, "KICK", 4)) {
        zfile_fseek (f, 512, SEEK_SET);
        kickdisk = 1;
+#if 0
+    } else if (size >= 524288 && !memcmp (buffer, "AMIG", 4)) {
+       /* ReKick */
+       zfile_fseek (f, oldpos + 0x6c, SEEK_SET);
+       cr = 2;
+#endif
     } else if (strncmp ((char *)buffer, "AMIROMTYPE1", 11) != 0) {
        zfile_fseek (f, oldpos, SEEK_SET);
     } else {
@@ -2084,7 +2194,7 @@ static int read_kickstart (struct zfile *f, uae_u8 *mem, int size, int dochecksu
        memcpy (mem + size / 2, mem, size / 2);
 
     if (cr) {
-       if (!decode_cloanto_rom (mem, size, i))
+       if (!decode_rom (mem, size, cr, i))
            return 0;
     }
     if (currprefs.cs_a1000ram) {
@@ -2328,6 +2438,11 @@ static int load_kickstart (void)
            }
            zfile_fseek (f, kspos, SEEK_SET);
        }
+       if (filesize >= 524288 * 4) {
+           kspos = 524288 * 3;
+           extpos = 0;
+           zfile_fseek (f, kspos, SEEK_SET);
+       }
        size = read_kickstart (f, kickmemory, maxsize, 1, &cloanto_rom, 0);
        if (size == 0)
            goto err;
@@ -2335,13 +2450,28 @@ static int load_kickstart (void)
        kickmem_size = size;
        if (filesize >= 524288 * 2 && !extendedkickmem_type) {
            extendedkickmem_size = 0x80000;
-           extendedkickmem_type = EXTENDED_ROM_KS;
-           extendedkickmemory = (uae_u8 *) mapped_malloc (extendedkickmem_size, "rom_e0");
-           extendedkickmem_bank.baseaddr = (uae_u8 *) extendedkickmemory;
+           if (currprefs.cs_cdtvcd || currprefs.cs_cdtvram) {
+               extendedkickmem_type = EXTENDED_ROM_CDTV;
+               extendedkickmemory = mapped_malloc (extendedkickmem_size, "rom_f0");
+           } else {
+               extendedkickmem_type = EXTENDED_ROM_KS;
+               extendedkickmemory = mapped_malloc (extendedkickmem_size, "rom_e0");
+           }
+           extendedkickmem_bank.baseaddr = extendedkickmemory;
            zfile_fseek (f, extpos, SEEK_SET);
            read_kickstart (f, extendedkickmemory, 0x80000,  0, 0, 1);
            extendedkickmem_mask = extendedkickmem_size - 1;
        }
+       if (filesize > 524288 * 2) {
+           extendedkickmem2_size = 524288 * 2;
+           extendedkickmemory2 = mapped_malloc (extendedkickmem2_size, "rom_a8");
+           extendedkickmem2_bank.baseaddr = extendedkickmemory2;
+           zfile_fseek (f, extpos + 524288, SEEK_SET);
+           read_kickstart (f, extendedkickmemory2, 524288, 0, 0, 1);
+           zfile_fseek (f, extpos + 524288 * 2, SEEK_SET);
+           read_kickstart (f, extendedkickmemory2 + 524288, 524288, 0, 0, 1);
+           extendedkickmem2_mask = extendedkickmem2_size - 1;
+       }
     }
 
 #if defined(AMIGA)
@@ -2672,10 +2802,20 @@ void map_overlay (int chip)
     if (currprefs.cpu_cycle_exact && currprefs.cpu_model >= 68020)
        cb = &chipmem_bank_ce2;
 #endif
-    if (chip)
+    if (chip) {
        map_banks (cb, 0, i, allocated_chipmem);
-    else
-       map_banks (&kickmem_bank, 0, i, 0x80000);
+    } else {
+       addrbank *rb = NULL;
+       cb = &get_mem_bank (0xf00000);
+       if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word (0xf00000) == 0x1114)
+           rb = cb;
+       cb = &get_mem_bank (0xe00000);
+       if (!rb && cb && (cb->flags & ABFLAG_ROM) && get_word (0xe00000) == 0x1114)
+           rb = cb;
+       if (!rb)
+           rb = &kickmem_bank;
+       map_banks (rb, 0, i, 0x80000);
+    }
     if (savestate_state != STATE_RESTORE && savestate_state != STATE_REWIND && valid_address (regs.pc, 4))
        m68k_setpc (&regs, m68k_getpc (&regs));
 }
@@ -2683,13 +2823,16 @@ void map_overlay (int chip)
 void memory_reset (void)
 {
     int bnk, bnk_end;
+    int gayle;
 
     be_cnt = 0;
     currprefs.chipmem_size = changed_prefs.chipmem_size;
     currprefs.bogomem_size = changed_prefs.bogomem_size;
     currprefs.mbresmem_low_size = changed_prefs.mbresmem_low_size;
     currprefs.mbresmem_high_size = changed_prefs.mbresmem_high_size;
-    currprefs.cs_ksmirror = changed_prefs.cs_ksmirror;
+    currprefs.cs_ksmirror_e0 = changed_prefs.cs_ksmirror_e0;
+    currprefs.cs_ksmirror_a8 = changed_prefs.cs_ksmirror_a8;
+    currprefs.cs_ciaoverlay = changed_prefs.cs_ciaoverlay;
     currprefs.cs_cdtvram = changed_prefs.cs_cdtvram;
     currprefs.cs_cdtvcard = changed_prefs.cs_cdtvcard;
     currprefs.cs_a1000ram = changed_prefs.cs_a1000ram;
@@ -2697,6 +2840,8 @@ void memory_reset (void)
     currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev;
     currprefs.cs_ramseyrev = changed_prefs.cs_ramseyrev;
 
+    gayle = (currprefs.chipset_mask & CSMASK_AGA) || currprefs.cs_pcmcia || currprefs.cs_ide > 0;
+
     need_hardreset = 0;
     /* Use changed_prefs, as m68k_reset is called later.  */
     if (last_address_space_24 != changed_prefs.address_space_24)
@@ -2722,6 +2867,8 @@ void memory_reset (void)
        mapped_free (extendedkickmemory);
        extendedkickmemory = 0;
        extendedkickmem_size = 0;
+       extendedkickmemory2 = 0;
+       extendedkickmem2_size = 0;
        extendedkickmem_type = 0;
        load_extendedkickstart ();
        kickmem_mask = 524288 - 1;
@@ -2766,6 +2913,7 @@ void memory_reset (void)
 
     if (cloanto_rom)
        currprefs.maprom = changed_prefs.maprom = 0;
+    gayle = currprefs.cs_ksmirror_a8 || currprefs.cs_pcmcia || currprefs.cs_ide > 0;
 
     map_banks (&custom_bank, 0xC0, 0xE0 - 0xC0, 0);
     map_banks (&cia_bank, 0xA0, 32, 0);
@@ -2777,9 +2925,9 @@ void memory_reset (void)
     bnk = allocated_chipmem >> 16;
     if (bnk < 0x20 + (currprefs.fastmem_size >> 16))
        bnk = 0x20 + (currprefs.fastmem_size >> 16);
-    bnk_end = (((currprefs.chipset_mask & CSMASK_AGA) || currprefs.cs_pcmcia || currprefs.cs_ide > 0) ? 0xBF : 0xA0);
+    bnk_end = gayle ? 0xBF : 0xA0;
     map_banks (&dummy_bank, bnk, bnk_end - bnk, 0);
-    if (currprefs.chipset_mask & CSMASK_AGA)
+    if (gayle)
        map_banks (&dummy_bank, 0xc0, 0xd8 - 0xc0, 0);
 
     if (bogomemory != 0) {
@@ -2809,6 +2957,8 @@ void memory_reset (void)
     }
     if (currprefs.cs_rtc || currprefs.cs_cdtvram)
        map_banks (&clock_bank, 0xDC, 1, 0);
+    else if (currprefs.cs_ksmirror_a8 || currprefs.cs_ide > 0 || currprefs.cs_pcmcia)
+       map_banks (&clock_bank, 0xDC, 1, 0); /* none clock */
     if (currprefs.cs_fatgaryrev >= 0 || currprefs.cs_ramseyrev >= 0)
        map_banks (&mbres_bank, 0xDE, 1, 0);
     if (currprefs.cs_cd32c2p || currprefs.cs_cd32cd || currprefs.cs_cd32nvram)
@@ -2867,13 +3017,20 @@ void memory_reset (void)
 #endif
     }
 
-    if ((cloanto_rom || currprefs.cs_ksmirror) && !currprefs.maprom && !extendedkickmem_type)
+    if ((cloanto_rom || currprefs.cs_ksmirror_e0) && !currprefs.maprom && !extendedkickmem_type)
        map_banks (&kickmem_bank, 0xE0, 8, 0);
-    if (currprefs.cs_ksmirror == 2) { /* unexpanded A1200 also maps ROM here.. */
-       struct romdata *rd = getromdatabypath(currprefs.cartfile);
-       if (!rd || rd->id != 63) {
-           map_banks (&kickmem_bank, 0xA8, 8, 0);
-           map_banks (&kickmem_bank, 0xB0, 8, 0);
+    if (currprefs.cs_ksmirror_a8) {
+       if (extendedkickmem2_size) {
+           map_banks (&extendedkickmem2_bank, 0xa8, 16, 0);
+       } else {
+           struct romdata *rd = getromdatabypath(currprefs.cartfile);
+           if (!rd || rd->id != 63) {
+               if (extendedkickmem_type == EXTENDED_ROM_CD32 || extendedkickmem_type == EXTENDED_ROM_KS)
+                   map_banks (&extendedkickmem_bank, 0xb0, 8, 0);
+               else
+                   map_banks (&kickmem_bank, 0xb0, 8, 0);
+               map_banks (&kickmem_bank, 0xa8, 8, 0);
+           }
        }
     }
 
@@ -2919,6 +3076,8 @@ void memory_init (void)
     kickmemory = 0;
     extendedkickmemory = 0;
     extendedkickmem_size = 0;
+    extendedkickmemory2 = 0;
+    extendedkickmem2_size = 0;
     extendedkickmem_type = 0;
     chipmemory = 0;
     allocated_a3000lmem = allocated_a3000hmem = 0;
index 2f27618ccc2ee572d5cdefdc16b6105066d39f3d..9b61e2a1da9dd88e72f06dc7ee75cc7b8d18cdd2 100644 (file)
--- a/newcpu.c
+++ b/newcpu.c
@@ -1080,6 +1080,7 @@ static void Exception_normal (int nr, struct regstruct *regs, uaecptr oldpc)
        put_word (m68k_areg (regs, 7) + 8, regs->sr);
        put_long (m68k_areg (regs, 7) + 10, last_addr_for_exception_3);
        write_log ("Exception %d (%x) at %x -> %x!\n", nr, oldpc, currpc, get_long (regs->vbr + 4*nr));
+    activate_debugger();
        goto kludge_me_do;
     }
     m68k_areg (regs, 7) -= 4;
@@ -1554,7 +1555,6 @@ void m68k_mull (uae_u32 opcode, uae_u32 src, uae_u16 extra)
 
 void m68k_reset (int hardreset)
 {
-    regs.kick_mask = 0x00F80000;
     regs.spcflags = 0;
 #ifdef SAVESTATE
     if (savestate_state == STATE_RESTORE || savestate_state == STATE_REWIND) {
@@ -1570,8 +1570,8 @@ void m68k_reset (int hardreset)
        return;
     }
 #endif
-    m68k_areg (&regs, 7) = get_long (0x00f80000);
-    m68k_setpc (&regs, get_long (0x00f80004));
+    m68k_areg (&regs, 7) = get_long (0);
+    m68k_setpc (&regs, get_long (4));
     regs.s = 1;
     regs.m = 0;
     regs.stopped = 0;
@@ -2796,6 +2796,8 @@ void m68k_dumpstate (void *f, uaecptr *nextpc)
     f_out (f, "USP  %08.8X ISP  %08.8X ", regs.usp, regs.isp);
     for (i = 0; m2cregs[i].regno>= 0; i++) {
        if (!movec_illg (m2cregs[i].regno)) {
+           if (!strcmp (m2cregs[i].regname, "USP") || !strcmp (m2cregs[i].regname, "ISP"))
+               continue;
            if (j > 0 && (j % 4) == 0)
                f_out (f, "\n");
            f_out (f, "%-4s %08.8X ", m2cregs[i].regname, val_move2c (m2cregs[i].regno));
index def901b28c810cd74a9fa2ae37c222363b2062c3..5e1f3be9e7c28cf9e55cfaf8b197f8f55efe17d6 100644 (file)
@@ -724,9 +724,9 @@ static void aspi_led (int unitnum)
     int type = si[unitnum].type;
 
     if (type == INQ_ROMD)
-       gui_cd_led (1);
+       gui_cd_led (unitnum, 1);
     else if (type == INQ_DASD)
-       gui_hd_led (1);
+       gui_hd_led (unitnum, 1);
 }
 
 static uae_sem_t scgp_sem;
index 474e1e218109bc911649433c9a7d4b9c870ef136..93e1377df01ff4cc8ad05ce33de7e8d40f6c0890 100644 (file)
@@ -491,7 +491,7 @@ static uae_u8 *spti_read (int unitnum, int sector, int sectorsize)
     cmd[3] = (uae_u8)(sector >> 16);
     cmd[4] = (uae_u8)(sector >> 8);
     cmd[5] = (uae_u8)(sector >> 0);
-    gui_cd_led (1);
+    gui_cd_led (unitnum, 1);
     memset (&swb, 0, sizeof (swb));
     memcpy (swb.spt.Cdb, cmd, len);
     swb.spt.Length = sizeof (SCSI_PASS_THROUGH);
@@ -534,7 +534,7 @@ uae_u8 *ioctl_command_rawread (int unitnum, int sector, int sectorsize)
     if (sectorsize != 2336 && sectorsize != 2352 && sectorsize != 2048)
        return 0;
     while (cnt-- > 0) {
-       gui_cd_led (1);
+       gui_cd_led (unitnum, 1);
        seterrormode (unitnum);
        rri.DiskOffset.QuadPart = sector * 2048;
        rri.SectorCount = 1;
@@ -563,7 +563,7 @@ static int ioctl_command_readwrite (int unitnum, int sector, int write, int bloc
     if (!open_createfile(unitnum, 0))
        return 0;
     while (cnt-- > 0) {
-       gui_cd_led (1);
+       gui_cd_led (unitnum, 1);
        seterrormode (unitnum);
        if (SetFilePointer (ciw32[unitnum].h, sector * ciw32[unitnum].blocksize, 0, FILE_BEGIN) == INVALID_SET_FILE_POINTER) {
            reseterrormode (unitnum);
@@ -576,7 +576,7 @@ static int ioctl_command_readwrite (int unitnum, int sector, int write, int bloc
     }
     cnt = 3;
     while (cnt-- > 0) {
-       gui_cd_led (1);
+       gui_cd_led (unitnum, 1);
        seterrormode (unitnum);
        if (write) {
            if (!WriteFile (ciw32[unitnum].h, p, blocksize, &dtotal, 0)) {
@@ -621,7 +621,7 @@ static int ioctl_command_readwrite (int unitnum, int sector, int write, int bloc
            }
        }
        reseterrormode (unitnum);
-       gui_cd_led (1);
+       gui_cd_led (unitnum, 1);
        break;
     }
     *ptr = p;
@@ -705,7 +705,7 @@ static uae_u8 *ioctl_command_toc (int unitnum)
 
     if (!open_createfile(unitnum, 0))
        return 0;
-    gui_cd_led (1);
+    gui_cd_led (unitnum, 1);
     while (cnt-- > 0) {
        seterrormode (unitnum);
        if (!DeviceIoControl(ciw32[unitnum].h, IOCTL_CDROM_READ_TOC, NULL, 0, toc, sizeof(CDROM_TOC), &len, NULL)) {
@@ -754,7 +754,7 @@ static uae_u8 *ioctl_command_toc (int unitnum)
        p[10] = toc->TrackData[i].Address[3];
        p += 11;
     }
-    gui_cd_led (1);
+    gui_cd_led (unitnum, 1);
     return ciw32[unitnum].tempbuffer;
 }
 
index 859cdad7cf9dd8a5e1029e00a4c737173f825f30..2add73b59844a40a35fa0eaee3917b2bb0d7d30f 100644 (file)
@@ -71,7 +71,7 @@ static int doscsi (int unitnum, SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER *swb, int *
        scsi_log_before (swb->spt.Cdb, swb->spt.CdbLength,
            swb->spt.DataIn == SCSI_IOCTL_DATA_OUT ? swb->spt.DataBuffer : 0,swb->spt.DataTransferLength);
     }
-    gui_cd_led (1);
+    gui_cd_led (unitnum, 1);
     swb->spt.ScsiStatus = 0;
     if (di->bus >= 0) {
        swb->spt.PathId = di->path;
@@ -97,7 +97,7 @@ static int doscsi (int unitnum, SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER *swb, int *
        swb->spt.SenseInfoLength = 0; /* 0 and 1 = success, not error.. */
     if (swb->spt.SenseInfoLength > 0)
        return 0;
-    gui_cd_led (1);
+    gui_cd_led (unitnum, 1);
     return status;
 }
 
index 9ea401e3a3172dc54d247658b5a374a2ce9abc42..6ea0f18fd71d4e493cecde06a9f5ab29e093ce38 100644 (file)
@@ -135,7 +135,7 @@ static void putnumber(int x, int y, int n, int inv)
 
 static void putnumbers(int x, int y, int num, int inv)
 {
-    putnumber(x, y, num < 0 ? num : num / 10, inv);
+    putnumber(x, y, num < 0 ? num : ((num / 10) > 0 ? num / 10 : -1), inv);
     putnumber(x + numbers_width, y, num < 0 ? num : num % 10, inv);
 }
 
index 345435151d12612fe5a46c88d3ba4d19de9d7075..60512a76e82a6d8636c19e84b58629d47ecb3757 100644 (file)
@@ -140,9 +140,14 @@ int init_shm (void)
     natmem_offset = NULL;
     canbang = 0;
 
-    size = currprefs.z3fastmem_size + (currprefs.z3fastmem_start -  0x10000000);
-    size += currprefs.gfxmem_size;
-    size += 16 * 1024 * 1024;
+    size = 0x1000000;
+    if (currprefs.cpu_model >= 68020)
+       size = 0x10000000;
+    if (currprefs.z3fastmem_size || currprefs.gfxmem_size) {
+       size = currprefs.z3fastmem_size + (currprefs.z3fastmem_start -  0x10000000);
+       size += currprefs.gfxmem_size;
+       size += 16 * 1024 * 1024;
+    }
 
     while (size > size64) {
        int change = lowmem ();
index aaa14f1b5004d57b669630790dff22919a4a1b7f..05034144d7fd8bd866e541afd7d0ac51f3da842c 100644 (file)
 #define IDC_CS_CIAA_TOD3                1713
 #define IDC_CS_COMPATIBLE               1714
 #define IDC_CS_RAMSEYREV                1715
-#define IDC_CS_KSMIRROR                 1716
+#define IDC_CS_KSMIRROR_E0              1716
 #define IDC_STRINGBOXEDIT               1716
 #define IDC_CS_CD32CD                   1717
 #define IDC_STRINGBOX_TEXT              1717
 #define IDC_CS_SLOWISFAST               1740
 #define IDC_DBG_HELP                    1740
 #define IDC_DBG_INPUT                   1741
+#define IDC_CS_KSMIRROR_A8              1741
 #define IDC_DBG_DREG                    1742
+#define IDC_CS_CIAOVERLAY               1742
 #define IDC_DBG_AREG                    1743
+#define IDC_CS_KSMIRROR_E1              1743
+#define IDC_CS_RESETWARNING             1743
 #define IDC_DBG_CCR                     1744
 #define IDC_DBG_AMEM                    1745
 #define IDC_DBG_SP_VBR                  1746
index aaa14f1b5004d57b669630790dff22919a4a1b7f..0226c6a4b7ba610d156509161fd50c3a733ce5f7 100644 (file)
 #define IDC_CS_CIAA_TOD3                1713
 #define IDC_CS_COMPATIBLE               1714
 #define IDC_CS_RAMSEYREV                1715
-#define IDC_CS_KSMIRROR                 1716
+#define IDC_CS_KSMIRROR_E0              1716
 #define IDC_STRINGBOXEDIT               1716
 #define IDC_CS_CD32CD                   1717
 #define IDC_STRINGBOX_TEXT              1717
 #define IDC_CS_SLOWISFAST               1740
 #define IDC_DBG_HELP                    1740
 #define IDC_DBG_INPUT                   1741
+#define IDC_CS_KSMIRROR_A8              1741
 #define IDC_DBG_DREG                    1742
+#define IDC_CS_CIAOVERLAY               1742
 #define IDC_DBG_AREG                    1743
+#define IDC_CS_RESETWARNING             1743
 #define IDC_DBG_CCR                     1744
 #define IDC_DBG_AMEM                    1745
 #define IDC_DBG_SP_VBR                  1746
index 07a9d13b236f947736dde4f115fe61a00c22d5f6..941d2356a9bfdf1238e67c5bced6636a5d259529 100644 (file)
@@ -426,6 +426,7 @@ BEGIN
     CONTROL         "Magic Mouse",IDC_MOUSETRICK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,79,119,10
     CONTROL         "uaenet.device",IDC_SANA2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,161,92,94,10
 END
+
 IDD_HARDFILE DIALOGEX 0, 0, 299, 249
 STYLE DS_LOCALEDIT | DS_SETFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_3DLOOK | DS_CENTER | DS_CENTERMOUSE | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 CAPTION "Hardfile Settings"
@@ -557,7 +558,7 @@ BEGIN
     CONTROL         "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,19,68,63,10
     CONTROL         "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,90,68,85,10
     CONTROL         "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,186,68,88,10
-    CONTROL         "Boot ROM Mirror",IDC_CS_KSMIRROR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,80,10
+    CONTROL         "ROM Mirror (A8)",IDC_CS_KSMIRROR_A8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,146,80,10
     CONTROL         "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,95,88,10
     CONTROL         "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,108,76,10
     CONTROL         "CD32 C2P",IDC_CS_CD32C2P,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,108,87,10
@@ -567,25 +568,28 @@ BEGIN
     CONTROL         "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,120,90,10
     CONTROL         "A600/A1200 IDE",IDC_CS_IDE1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,133,79,10
     CONTROL         "A4000/A4000T IDE",IDC_CS_IDE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,133,88,10
-    CONTROL         "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,210,71,10
-    EDITTEXT        IDC_CS_RAMSEYREV,91,208,45,13,ES_AUTOHSCROLL
-    CONTROL         "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,223,71,10
-    EDITTEXT        IDC_CS_FATGARYREV,91,222,45,13,ES_AUTOHSCROLL
-    CONTROL         "A3000 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,174,76,10
+    CONTROL         "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,216,71,10
+    EDITTEXT        IDC_CS_RAMSEYREV,91,214,45,13,ES_AUTOHSCROLL
+    CONTROL         "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,229,71,10
+    EDITTEXT        IDC_CS_FATGARYREV,91,228,45,13,ES_AUTOHSCROLL
+    CONTROL         "A3000 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,188,76,10
     CONTROL         "Compatible Settings",IDC_CS_COMPATIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,8,234,10
     CONTROL         "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,95,92,10
-    CONTROL         "Agnus/Alice revision:",IDC_CS_AGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,210,81,10
-    EDITTEXT        IDC_CS_AGNUSREV,232,208,45,13,ES_AUTOHSCROLL
-    CONTROL         "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,223,81,10
-    EDITTEXT        IDC_CS_DENISEREV,232,222,45,13,ES_AUTOHSCROLL
-    CONTROL         "A590/A2091 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,174,76,10
-    CONTROL         "A4000T SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,174,88,10
-    LTEXT           "A4091/A4000T SCSI not yet implemented.",IDC_STATIC,22,160,224,8,SS_CENTERIMAGE
+    CONTROL         "Agnus/Alice revision:",IDC_CS_AGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,216,81,10
+    EDITTEXT        IDC_CS_AGNUSREV,232,214,45,13,ES_AUTOHSCROLL
+    CONTROL         "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,147,229,81,10
+    EDITTEXT        IDC_CS_DENISEREV,232,228,45,13,ES_AUTOHSCROLL
+    CONTROL         "A590/A2091 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,188,76,10
+    CONTROL         "A4000T SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,188,88,10
+    LTEXT           "A4091/A4000T SCSI not yet implemented.",IDC_STATIC,22,174,224,8,SS_CENTERIMAGE
     CONTROL         "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,133,92,10
-    CONTROL         "A4091 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,186,76,10
-    CONTROL         "CDTV SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,186,76,10
-    CONTROL         "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,186,101,10
+    CONTROL         "A4091 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,200,76,10
+    CONTROL         "CDTV SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,94,200,76,10
+    CONTROL         "Include host SCSI devices",IDC_CS_SCSIMODE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,200,101,10
     CONTROL         "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,187,146,92,10
+    CONTROL         "ROM Mirror (E0)",IDC_CS_KSMIRROR_E0,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,146,80,10
+    CONTROL         "CIA ROM Overlay",IDC_CS_CIAOVERLAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,95,80,10
+    CONTROL         "KB Reset Warning",IDC_CS_RESETWARNING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,159,80,10
 END
 
 IDD_AVIOUTPUT DIALOGEX 0, 0, 288, 203
index 4fed442e6e7b667630b3bd6dfa531dc44936db43..0fbc3438d3a1ff43ec69f94b9231b476472bb76d 100644 (file)
@@ -24,6 +24,7 @@
 #include "picasso96_win.h"
 #include "win32.h"
 #include "win32gfx.h"
+#include "filesys.h"
 
 static int initialized;
 static RPGUESTINFO guestinfo;
@@ -38,6 +39,7 @@ int log_rp = 1;
 static int default_width, default_height;
 static int hwndset;
 static int minimized;
+static DWORD hd_mask, cd_mask;
 
 
 static char *ua (const WCHAR *s)
@@ -305,6 +307,36 @@ void rp_fixup_options (struct uae_prefs *p)
            v |= 1 << i;
     }
     RPSendMessagex(RPIPCGM_DEVICES, RP_DEVICE_FLOPPY, v, NULL, 0, &guestinfo, NULL);
+    cd_mask = 0;
+    for (i = 0; i < currprefs.mountitems; i++) {
+        struct uaedev_config_info *uci = &currprefs.mountconfig[i];
+       if (uci->controller == HD_CONTROLLER_UAE) {
+           hd_mask |= 1 << i;
+        } else if (uci->controller <= HD_CONTROLLER_IDE3 ) {
+           hd_mask |= 1 << (uci->controller -  HD_CONTROLLER_IDE0);
+       } else if (uci->controller <= HD_CONTROLLER_SCSI6) {
+           hd_mask |= 1 << (uci->controller -  HD_CONTROLLER_SCSI0);
+       }
+    }
+    RPSendMessagex(RPIPCGM_DEVICES, RP_DEVICE_HD, hd_mask, NULL, 0, &guestinfo, NULL);
+}
+
+void rp_hd_change (int num, int removed)
+{
+    if (removed)
+       hd_mask &= ~(1 << num);
+    else
+       hd_mask |= 1 << num;
+    RPSendMessagex(RPIPCGM_DEVICES, RP_DEVICE_HD, hd_mask, NULL, 0, &guestinfo, NULL);
+}
+
+void rp_cd_change (int num, int removed)
+{
+    if (removed)
+       cd_mask &= ~(1 << num);
+    else
+       cd_mask |= 1 << num;
+    RPSendMessagex(RPIPCGM_DEVICES, RP_DEVICE_CD, cd_mask, NULL, 0, &guestinfo, NULL);
 }
 
 void rp_update_leds (int led, int onoff)
@@ -327,6 +359,32 @@ void rp_update_leds (int led, int onoff)
     }
 }
 
+void rp_hd_activity (int num, int onoff)
+{
+    if (!initialized)
+       return;
+    if (num < 0)
+       return;
+    if (onoff)
+       RPSendMessage(RPIPCGM_DEVICEACTIVITY, MAKEWORD (RP_DEVICE_HD, num), 200, NULL, 0, &guestinfo, NULL);
+}
+
+void rp_cd_activity (int num, int onoff)
+{
+    if (!initialized)
+       return;
+    if (num < 0)
+       return;
+    if ((cd_mask & (1 << num)) != ((onoff ? 1 : 0) << num)) {
+        cd_mask ^= 1 << num;
+        RPSendMessagex(RPIPCGM_DEVICES, RP_DEVICE_CD, cd_mask, NULL, 0, &guestinfo, NULL);
+    }
+    if (onoff) {
+       RPSendMessage(RPIPCGM_DEVICEACTIVITY, MAKEWORD (RP_DEVICE_CD, num), 200, NULL, 0, &guestinfo, NULL);
+    }
+}
+
+
 void rp_update_status (struct uae_prefs *p)
 {
     if (!initialized)
index c133f3c784bd3f3f7e7581258f49aa0867dd34ca..371fe262d30ef713119339ce7ccbe2e6815fa802 100644 (file)
@@ -4,6 +4,10 @@ extern void rp_free (void);
 extern void rp_fixup_options (struct uae_prefs*);
 extern void rp_update_status (struct uae_prefs*);
 extern void rp_update_leds (int, int);
+extern void rp_hd_activity (int, int);
+extern void rp_hd_change (int, int);
+extern void rp_cd_activity (int, int);
+extern void rp_cd_change (int, int);
 extern void rp_activate (int, LPARAM);
 extern void rp_minimize (int);
 extern void rp_mousecapture (int);
index 01197b6c39eb3cc4db4e8f57e9b836af915f670f..08af44841c4e652b43251e2df9c080d172610320 100644 (file)
@@ -3430,6 +3430,10 @@ void systray (HWND hwnd, int remove)
     NOTIFYICONDATA nid;
     BOOL v;
 
+#ifdef RETROPLATFORM
+    if (rp_isactive())
+       return;
+#endif
     //write_log ("notif: systray(%x,%d)\n", hwnd, remove);
     if (!remove) {
        TaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));
index 811b25da5f56532b99ddadbc75d14f7f2d9cba9a..4a25fc75c5b57d3f324b5763f3ba2c16c762f102 100644 (file)
@@ -15,9 +15,9 @@
 #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
 #define GETBDD(x) ((x) % 100)
 
-#define WINUAEBETA 5
+#define WINUAEBETA 6
 #define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2008, 1, 9)
+#define WINUAEDATE MAKEBD(2008, 1, 16)
 #define WINUAEEXTRA ""
 #define WINUAEREV ""
 
index 5f48b806ea807dd1ab0157d5723e0c6954db0cb4..fb5c948553cbcdc24127ccfebb5ead737dac9788 100644 (file)
@@ -4292,7 +4292,10 @@ static void values_to_chipsetdlg2 (HWND hDlg)
        break;
     }
     CheckDlgButton (hDlg, IDC_CS_COMPATIBLE, workprefs.cs_compatible);
-    CheckDlgButton (hDlg, IDC_CS_KSMIRROR, workprefs.cs_ksmirror);
+    CheckDlgButton (hDlg, IDC_CS_RESETWARNING, workprefs.cs_resetwarning);
+    CheckDlgButton (hDlg, IDC_CS_KSMIRROR_E0, workprefs.cs_ksmirror_e0);
+    CheckDlgButton (hDlg, IDC_CS_KSMIRROR_A8, workprefs.cs_ksmirror_a8);
+    CheckDlgButton (hDlg, IDC_CS_CIAOVERLAY, workprefs.cs_ciaoverlay);
     CheckDlgButton (hDlg, IDC_CS_DF0IDHW, workprefs.cs_df0idhw);
     CheckDlgButton (hDlg, IDC_CS_CD32CD, workprefs.cs_cd32cd);
     CheckDlgButton (hDlg, IDC_CS_CD32C2P, workprefs.cs_cd32c2p);
@@ -4362,7 +4365,10 @@ static void values_from_chipsetdlg2 (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
     int v;
 
     workprefs.cs_compatible = IsDlgButtonChecked (hDlg, IDC_CS_COMPATIBLE);
-    workprefs.cs_ksmirror = IsDlgButtonChecked (hDlg, IDC_CS_KSMIRROR);
+    workprefs.cs_resetwarning = IsDlgButtonChecked (hDlg, IDC_CS_RESETWARNING);
+    workprefs.cs_ksmirror_e0 = IsDlgButtonChecked (hDlg, IDC_CS_KSMIRROR_E0);
+    workprefs.cs_ksmirror_a8 = IsDlgButtonChecked (hDlg, IDC_CS_KSMIRROR_A8);
+    workprefs.cs_ciaoverlay = IsDlgButtonChecked (hDlg, IDC_CS_CIAOVERLAY);
     workprefs.cs_df0idhw = IsDlgButtonChecked (hDlg, IDC_CS_DF0IDHW);
     workprefs.cs_cd32cd = IsDlgButtonChecked (hDlg, IDC_CS_CD32CD);
     workprefs.cs_cd32c2p = IsDlgButtonChecked (hDlg, IDC_CS_CD32C2P);
@@ -4456,7 +4462,10 @@ static void enable_for_chipsetdlg2 (HWND hDlg)
     ew (hDlg, IDC_CS_CDTVCD, e);
     ew (hDlg, IDC_CS_CDTVRAM, e);
     ew (hDlg, IDC_CS_CDTVRAMEXP, e);
-    ew (hDlg, IDC_CS_KSMIRROR, e);
+    ew (hDlg, IDC_CS_RESETWARNING, e);
+    ew (hDlg, IDC_CS_KSMIRROR_E0, e);
+    ew (hDlg, IDC_CS_KSMIRROR_A8, e);
+    ew (hDlg, IDC_CS_CIAOVERLAY, e);
     ew (hDlg, IDC_CS_A1000RAM, e);
     ew (hDlg, IDC_CS_DF0IDHW, e);
     ew (hDlg, IDC_CS_CIAA_TOD1, e);
@@ -10328,7 +10337,7 @@ void check_prefs_changed_gui( void )
 {
 }
 
-void gui_hd_led (int led)
+void gui_hd_led (int unitnum, int led)
 {
     static int resetcounter;
 
@@ -10338,13 +10347,16 @@ void gui_hd_led (int led)
        if (resetcounter > 0)
            return;
     }
+#ifdef RETROPLATFORM
+    rp_hd_activity (unitnum, led);
+#endif
     gui_data.hd = led;
     resetcounter = 6;
     if (old != gui_data.hd)
        gui_led (5, gui_data.hd);
 }
 
-void gui_cd_led (int led)
+void gui_cd_led (int unitnum, int led)
 {
     static int resetcounter;
 
@@ -10354,6 +10366,9 @@ void gui_cd_led (int led)
        if (resetcounter > 0)
            return;
     }
+#ifdef RETROPLATFORM
+    rp_cd_activity (unitnum, led);
+#endif
     gui_data.cd = led;
     resetcounter = 6;
     if (old != gui_data.cd)
index c7d21d80a0387aea3832228b8737bd6b773726c6..0b63883aaf5f760b6e7449e73d39afe96ce46928 100644 (file)
                        RelativePath="..\hq2x32.obj"
                        >
                </File>
+               <File
+                       RelativePath="..\resources\resource"
+                       >
+               </File>
                <File
                        RelativePath="..\resources\resource.h"
                        >
index 148997338b60a2669b46e3efe373bd300f70709c..a72c0fa0723e551a27b6b0616e528335a6f19c78 100644 (file)
@@ -3,6 +3,55 @@
 1.4.6 will be the last Windows 98/ME compatible version. 1.5.0
 will require Windows 2000 or newer.
 
+Beta 6:
+
+- binary support added to debugger, '%10101'
+- hex/dec/bin converter added to debugger, '?<value>'
+  result is 0x<hex>, %<bin>, <unsigned dec> and <signed dec>
+- all debugger commands which take numeric parameters also accept
+  register names: A0-A7 = RA0-RA7, D0-D7 = RD0-RD7, PC, USP, VBR,..
+- debugger number prefixes: hex = 0x or $, bin = %, dec = !. Most
+  command parameters default to hex (addresses) or decimal.
+- do not reserve lots of jit direct ram if non-jit compatible cpu
+- logitech lcd dfx/cpu/fps counter leading zeros removed
+  (I have G15 again, updated revision this time)
+- some incorrect Quickstart RTC configurations fixed
+- keyboard reset warning feature emulated and added to advanced
+  chipset panel. Reset warning information:
+  http://cataclysm.cx/random/amiga/reference/Hardware_Manual_guide/node0178.html
+  Reset warning sequence is only triggered if Amiga-Amiga-CTRL key
+  sequence pressed and reset warning setting enabled. Or Input panel
+  event "Keycode 0x78 (Reset Warning)" is received.
+  Amiga-Amiga-CTRL-ALT still does instant hardreset. Second
+  Amiga-Amiga-CTRL during reset warning sequence will also cause
+  instant reset.
+  Pre-emptive "bug report": if Amiga-Amiga-CTRL now causes gurus,
+  reset delays or something weird (and does not if reset warning is
+  disabled or GUI Reset-button clicked) you have buggy/badly configured
+  reset handler utility installed. This is Somebody Else's Problem.
+- joystick autoswitch update: firebutton press on non-connected
+  (to emulated Amiga port) joystick AND another joystick already in
+  joystick port (port 1) WITH firebutton pressed = insert new joystick
+  to mouse port
+
+  Following can be ignored if you aren't testing custom ROM images
+  before burning EPROM(s)
+
+- kickstart chipram overlay maps 0xe00000 rom instead of 0xf80000,
+  same with 0xf00000 rom if it begins with 0x1114 (emulates my 1M CDTV
+  EPROM hack..)
+- 2M ROM image support. Gayle ROM mapping:
+  * first 512K bank: E00000-E7FFFF (overlay bank)
+  * second 512K bank: A80000-AFFFFF
+  * third 512K bank: B00000-B7FFFF
+  * fourth 512K bank: F80000-FFFFFF
+  At least A600 and A1200 have 2MB ROM support but note that A1200
+  Blizzard accel's MAPROM feature must be disabled
+- cia overlay advanced chipset setting added (Pre-Gayle models use
+  CIA overlay io pin, newer models have overlay logic inside Gayle)
+- ROM Mirror advanced chipset setting separated to E0 and A8 ROM
+  banks. (A8-B8 = Gayle feature)
+
 Beta 5:
 
 - fixed wrong input device GUID format in config files
index 5e209dcd7120475133576c20865a8539635fc1a0..cdc572471a794a7a0089d8998326a8460aa60f6b 100644 (file)
@@ -283,6 +283,8 @@ void write_log (const char *format, ...)
        break;
     }
     bufp[bufsize - 1] = 0;
+    if (!memcmp (bufp, "write ",6))
+       bufsize--;
     ts = writets();
     if (bufp[0] == '*')
        count++;