]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1500b15.zip
authorToni Wilen <twilen@winuae.net>
Fri, 2 May 2008 17:00:02 +0000 (20:00 +0300)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:40:00 +0000 (21:40 +0200)
14 files changed:
cfgfile.c
expansion.c
include/memory.h
main.c
memory.c
newcpu.c
od-win32/dxwrap.c
od-win32/hardfile_win32.c
od-win32/lcd.c
od-win32/mman.c
od-win32/picasso96_win.c
od-win32/win32.h
od-win32/win32gfx.c
od-win32/winuaechangelog.txt

index 546e470df6a892c3d78bd377e2c435dec332058a..cfa8372f6ecd552233c74d6adfd4cb4966e2208a 100755 (executable)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -194,7 +194,7 @@ char *cfgfile_subst_path (const char *path, const char *subst, const char *file)
     /* @@@ use strcasecmp for some targets.  */
     if (strlen (path) > 0 && strncmp (file, path, strlen (path)) == 0) {
        int l;
-       char *p = (char*)xmalloc (strlen (file) + strlen (subst) + 2);
+       char *p = xmalloc (strlen (file) + strlen (subst) + 2);
        strcpy (p, subst);
        l = strlen (p);
        while (l > 0 && p[l - 1] == '/')
@@ -1765,7 +1765,7 @@ static void cfgfile_parse_separated_line (struct uae_prefs *p, char *line1b, cha
            if (sl->option && !strcasecmp (line1b, sl->option)) break;
        }
        if (!sl) {
-           struct strlist *u = (struct strlist*)xcalloc (sizeof (struct strlist), 1);
+           struct strlist *u = xcalloc (sizeof (struct strlist), 1);
            u->option = my_strdup(line3b);
            u->value = my_strdup(line4b);
            u->next = p->all_lines;
@@ -1967,7 +1967,7 @@ int cfgfile_save (struct uae_prefs *p, const char *filename, int type)
 int cfgfile_get_description (const char *filename, char *description, char *hostlink, char *hardwarelink, int *type)
 {
     int result = 0;
-    struct uae_prefs *p = (struct uae_prefs*)xmalloc (sizeof (struct uae_prefs));
+    struct uae_prefs *p = xmalloc (sizeof (struct uae_prefs));
     p->description[0] = 0;
     p->config_host_path[0] = 0;
     p->config_hardware_path[0] = 0;
@@ -2361,7 +2361,7 @@ void cfgfile_addcfgparam (char *line)
     }
     if (!cfgfile_separate_line (line, line1b, line2b))
        return;
-    u = (struct strlist*)xcalloc (sizeof (struct strlist), 1);
+    u = xcalloc (sizeof (struct strlist), 1);
     u->option = my_strdup(line1b);
     u->value = my_strdup(line2b);
     u->next = temp_lines;
@@ -2646,12 +2646,12 @@ uae_u32 cfgfile_uaelib_modify (uae_u32 index, uae_u32 parms, uae_u32 size, uae_u
     int i, ret;
 
     put_byte (out, 0);
-    parms_p = (char*)xmalloc (size + 1);
+    parms_p = xmalloc (size + 1);
     if (!parms_p) {
        ret = 10;
        goto end;
     }
-    out_p = (char*)xmalloc (outsize + 1);
+    out_p = xmalloc (outsize + 1);
     if (!out_p) {
        ret = 10;
        goto end;
index fd7049927333d24fc55e0b9020482f09c02eb6f8..acef08ee820fb1cb86602b3da06a6e8e8d837aab 100755 (executable)
@@ -136,6 +136,7 @@ static void (*card_init[MAX_EXPANSION_BOARDS]) (void);
 static void (*card_map[MAX_EXPANSION_BOARDS]) (void);
 
 static int ecard;
+static int cardno;
 
 static uae_u16 uae_id;
 
@@ -166,9 +167,19 @@ static uae_u8 expamem[65536];
 static uae_u8 expamem_lo;
 static uae_u16 expamem_hi;
 
-/*
- *  Dummy entries to show that there's no card in a slot
- */
+static uae_u32 REGPARAM3 expamem_lget (uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 expamem_wget (uaecptr) REGPARAM;
+static uae_u32 REGPARAM3 expamem_bget (uaecptr) REGPARAM;
+static void REGPARAM3 expamem_lput (uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 expamem_wput (uaecptr, uae_u32) REGPARAM;
+static void REGPARAM3 expamem_bput (uaecptr, uae_u32) REGPARAM;
+
+addrbank expamem_bank = {
+    expamem_lget, expamem_wget, expamem_bget,
+    expamem_lput, expamem_wput, expamem_bput,
+    default_xlate, default_check, NULL, "Autoconfig",
+    dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE
+};
 
 static void expamem_map_clear (void)
 {
@@ -179,33 +190,25 @@ static void expamem_init_clear (void)
 {
     memset (expamem, 0xff, sizeof expamem);
 }
+/* autoconfig area is "non-existing" after last device */
+static void expamem_init_clear_zero (void)
+{
+    map_banks (&dummy_bank, 0xe8, 1, 0);
+}
 
 static void expamem_init_clear2 (void)
 {
-    expamem_init_clear ();
-    ecard = MAX_EXPANSION_BOARDS - 1;
+    expamem_init_clear_zero ();
+    ecard = cardno;
 }
 
 static void expamem_init_last (void)
 {
+    expamem_init_clear2 ();
     write_log ("Memory map after autoconfig:\n");
     memory_map_dump();
-    expamem_init_clear ();
 }
 
-static uae_u32 REGPARAM3 expamem_lget (uaecptr) REGPARAM;
-static uae_u32 REGPARAM3 expamem_wget (uaecptr) REGPARAM;
-static uae_u32 REGPARAM3 expamem_bget (uaecptr) REGPARAM;
-static void REGPARAM3 expamem_lput (uaecptr, uae_u32) REGPARAM;
-static void REGPARAM3 expamem_wput (uaecptr, uae_u32) REGPARAM;
-static void REGPARAM3 expamem_bput (uaecptr, uae_u32) REGPARAM;
-
-addrbank expamem_bank = {
-    expamem_lget, expamem_wget, expamem_bget,
-    expamem_lput, expamem_wput, expamem_bput,
-    default_xlate, default_check, NULL, "Autoconfig",
-    dummy_lgeti, dummy_wgeti, ABFLAG_IO | ABFLAG_SAFE
-};
 
 static uae_u32 REGPARAM2 expamem_lget (uaecptr addr)
 {
@@ -215,8 +218,9 @@ static uae_u32 REGPARAM2 expamem_lget (uaecptr addr)
 
 static uae_u32 REGPARAM2 expamem_wget (uaecptr addr)
 {
-    write_log ("warning: READ.W from address $%lx PC=%x\n", addr, M68K_GETPC);
-    return (expamem_bget (addr) << 8) | expamem_bget (addr + 1);
+    uae_u32 v = (expamem_bget (addr) << 8) | expamem_bget (addr + 1);
+    write_log ("warning: READ.W from address $%lx=%04x PC=%x\n", addr, v & 0xffff, M68K_GETPC);
+    return v;
 }
 
 static uae_u32 REGPARAM2 expamem_bget (uaecptr addr)
@@ -265,6 +269,8 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value)
     special_mem |= S_WRITE;
 #endif
     value &= 0xffff;
+    if (ecard >= cardno)
+       return;
     if (expamem_type() != zorroIII)
        write_log ("warning: WRITE.W to address $%lx : value $%x\n", addr, value);
     else {
@@ -286,7 +292,7 @@ static void REGPARAM2 expamem_wput (uaecptr addr, uae_u32 value)
                (*card_map[ecard]) ();
                write_log ("   Card %d (Zorro%s) done.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III");
                ++ecard;
-               if (ecard < MAX_EXPANSION_BOARDS)
+               if (ecard < cardno)
                    (*card_init[ecard]) ();
                else
                    expamem_init_clear2 ();
@@ -301,6 +307,8 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value)
 #ifdef JIT
     special_mem |= S_WRITE;
 #endif
+    if (ecard >= cardno)
+       return;
     value &= 0xff;
     switch (addr & 0xff) {
      case 0x30:
@@ -316,7 +324,7 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value)
            (*card_map[ecard]) ();
            write_log ("   Card %d (Zorro%s) done.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III");
            ++ecard;
-           if (ecard < MAX_EXPANSION_BOARDS)
+           if (ecard < cardno)
                (*card_init[ecard]) ();
            else
                expamem_init_clear2 ();
@@ -332,7 +340,7 @@ static void REGPARAM2 expamem_bput (uaecptr addr, uae_u32 value)
      case 0x4c:
        write_log ("   Card %d (Zorro%s) had no success.\n", ecard + 1, expamem_type() == 0xc0 ? "II" : "III");
        ++ecard;
-       if (ecard < MAX_EXPANSION_BOARDS)
+       if (ecard < cardno)
            (*card_init[ecard]) ();
        else
            expamem_init_clear2 ();
@@ -1135,7 +1143,7 @@ void expamem_next (void)
     expamem_init_clear ();
     map_banks (&expamem_bank, 0xE8, 1, 0);
     ++ecard;
-    if (ecard < MAX_EXPANSION_BOARDS)
+    if (ecard < cardno)
        (*card_init[ecard]) ();
     else
        expamem_init_clear2 ();
@@ -1166,8 +1174,9 @@ void p96memstart(void)
 void expamem_reset (void)
 {
     int do_mount = 1;
-    int cardno = 0;
+
     ecard = 0;
+    cardno = 0;
 
     if (currprefs.uae_hide)
        uae_id = commodore;
@@ -1248,13 +1257,13 @@ void expamem_reset (void)
        card_init[cardno] = expamem_init_last;
        card_map[cardno++] = expamem_map_clear;
     }
-    while (cardno < MAX_EXPANSION_BOARDS) {
-       card_init[cardno] = expamem_init_clear;
-       card_map[cardno++] = expamem_map_clear;
-    }
 
     z3fastmem_start = currprefs.z3fastmem_start;
-    (*card_init[0]) ();
+
+    if (cardno == 0)
+       expamem_init_clear_zero ();
+    else
+       (*card_init[0]) ();
 }
 
 void expansion_init (void)
index c075a3f3266afaa6fbd6dacba1a10da424e56d53..292f78d215d50ce00c47ca62c39d7b2ef39322fa 100755 (executable)
@@ -63,7 +63,7 @@ extern uaecptr fastmem_start;
 extern uaecptr a3000lmem_start, a3000hmem_start;
 
 extern int ersatzkickfile;
-extern int cloanto_rom;
+extern int cloanto_rom, kickstart_rom;
 extern uae_u16 kickstart_version;
 extern int uae_boot_rom, uae_boot_rom_size;
 extern uaecptr rtarea_base;
@@ -344,6 +344,7 @@ extern void a3000_fakekick(int);
 #define ROMTYPE_NORDIC     0x001000
 #define ROMTYPE_XPOWER     0x002000
 #define ROMTYPE_CD32CART    0x004000
+#define ROMTYPE_SPECIALKICK 0x008000
 #define ROMTYPE_MASK       0x01ffff
 #define ROMTYPE_EVEN       0x020000
 #define ROMTYPE_ODD        0x040000
diff --git a/main.c b/main.c
index e34508f998f742309e69a5048b2b7fa201a158c4..46d3ba7433a64dc2e3735c50c72a8412554695f6 100755 (executable)
--- a/main.c
+++ b/main.c
@@ -60,6 +60,7 @@ struct uae_prefs currprefs, changed_prefs;
 int no_gui = 0;
 int joystickpresent = 0;
 int cloanto_rom = 0;
+int kickstart_rom = 1;
 
 struct gui_info gui_data;
 
index a0c61ba4202f9f4ada39d29c900965ac880ec43a..4bf090f46b036fa0f46a4a883f6db2a1c83defb3 100755 (executable)
--- a/memory.c
+++ b/memory.c
@@ -257,7 +257,7 @@ static struct romdata roms[] = {
     ALTROMPN(24, 2, 1, 4096, ROMTYPE_EVEN | ROMTYPE_8BIT, "252179-01", 0x42553bc4,0x8855a97f,0x7a44e3f6,0x2d1c88d9,0x38fee1f4,0xc606af5b)
     ALTROMPN(24, 2, 2, 4096, ROMTYPE_ODD  | ROMTYPE_8BIT, "252180-01", 0x8e5b9a37,0xd10f1564,0xb99f5ffe,0x108fa042,0x362e877f,0x569de2c3)
 
-    { "The Diagnostic 2.0 (Logica)", 2, 0, 2, 0, "LOGICA\0", 524288, 72, 0, 0, ROMTYPE_KICK, 0, 0, NULL,
+    { "The Diagnostic 2.0 (Logica)", 2, 0, 2, 0, "LOGICA\0", 524288, 72, 0, 0, ROMTYPE_KICK | ROMTYPE_SPECIALKICK, 0, 0, NULL,
        0x8484f426, 0xba10d161,0x66b2e2d6,0x177c979c,0x99edf846,0x2b21651e },
 
     { "Freezer: Action Replay Mk I v1.00", 1, 0, 1, 0, "AR\0", 65536, 52, 0, 0, ROMTYPE_AR, 0, 1, NULL,
@@ -1068,8 +1068,8 @@ static void dummylog (int rw, uaecptr addr, int size, uae_u32 val, int ins)
     /* ignore Zorro3 expansion space */
     if (addr >= 0xff000000 && addr <= 0xff000200)
        return;
-    /* extended rom */
-    if (addr >= 0xf00000 && addr <= 0xf7ffff)
+    /* autoconfig and extended rom */
+    if (addr >= 0xe00000 && addr <= 0xf7ffff)
        return;
     /* motherboard ram */
     if (addr >= 0x08000000 && addr <= 0x08000007)
@@ -1092,16 +1092,27 @@ static void dummylog (int rw, uaecptr addr, int size, uae_u32 val, int ins)
     }
 }
 
+static uae_u32 dummy_get (uaecptr addr, int size)
+{
+    uae_u32 v;
+    if (currprefs.cpu_model >= 68020)
+       return NONEXISTINGDATA;
+    v = (regs.irc << 16) | regs.irc;
+    if (v == 4)
+       return v;
+    if (v == 2)
+       return v & 0xffff;
+    return (addr & 1) ? (v & 0xff) : ((v >> 8) & 0xff);
+}
+
 static uae_u32 REGPARAM2 dummy_lget (uaecptr addr)
 {
 #ifdef JIT
     special_mem |= S_READ;
 #endif
     if (currprefs.illegal_mem)
-       dummylog(0, addr, 4, 0, 0);
-    if (currprefs.cpu_model >= 68020)
-       return NONEXISTINGDATA;
-    return (regs.irc << 16) | regs.irc;
+       dummylog (0, addr, 4, 0, 0);
+    return dummy_get (addr, 4);
 }
 uae_u32 REGPARAM2 dummy_lgeti (uaecptr addr)
 {
@@ -1109,10 +1120,8 @@ uae_u32 REGPARAM2 dummy_lgeti (uaecptr addr)
     special_mem |= S_READ;
 #endif
     if (currprefs.illegal_mem)
-       dummylog(0, addr, 4, 0, 1);
-    if (currprefs.cpu_model >= 68020)
-       return NONEXISTINGDATA;
-    return (regs.irc << 16) | regs.irc;
+       dummylog (0, addr, 4, 0, 1);
+    return dummy_get (addr, 4);
 }
 
 static uae_u32 REGPARAM2 dummy_wget (uaecptr addr)
@@ -1121,10 +1130,8 @@ static uae_u32 REGPARAM2 dummy_wget (uaecptr addr)
     special_mem |= S_READ;
 #endif
     if (currprefs.illegal_mem)
-       dummylog(0, addr, 2, 0, 0);
-    if (currprefs.cpu_model >= 68020)
-       return NONEXISTINGDATA;
-    return regs.irc;
+       dummylog (0, addr, 2, 0, 0);
+    return dummy_get (addr, 2);
 }
 uae_u32 REGPARAM2 dummy_wgeti (uaecptr addr)
 {
@@ -1132,10 +1139,8 @@ uae_u32 REGPARAM2 dummy_wgeti (uaecptr addr)
     special_mem |= S_READ;
 #endif
     if (currprefs.illegal_mem)
-       dummylog(0, addr, 2, 0, 1);
-    if (currprefs.cpu_model >= 68020)
-       return NONEXISTINGDATA;
-    return regs.irc;
+       dummylog (0, addr, 2, 0, 1);
+    return dummy_get (addr, 2);
 }
 
 static uae_u32 REGPARAM2 dummy_bget (uaecptr addr)
@@ -1144,10 +1149,8 @@ static uae_u32 REGPARAM2 dummy_bget (uaecptr addr)
     special_mem |= S_READ;
 #endif
     if (currprefs.illegal_mem)
-       dummylog(0, addr, 1, 0, 0);
-    if (currprefs.cpu_model >= 68020)
-       return NONEXISTINGDATA;
-    return (addr & 1) ? regs.irc : regs.irc >> 8;
+       dummylog (0, addr, 1, 0, 0);
+    return dummy_get (addr, 1);
 }
 
 static void REGPARAM2 dummy_lput (uaecptr addr, uae_u32 l)
@@ -1156,7 +1159,7 @@ static void REGPARAM2 dummy_lput (uaecptr addr, uae_u32 l)
     special_mem |= S_WRITE;
 #endif
    if (currprefs.illegal_mem)
-       dummylog(1, addr, 4, l, 0);
+       dummylog (1, addr, 4, l, 0);
 }
 static void REGPARAM2 dummy_wput (uaecptr addr, uae_u32 w)
 {
@@ -1164,7 +1167,7 @@ static void REGPARAM2 dummy_wput (uaecptr addr, uae_u32 w)
     special_mem |= S_WRITE;
 #endif
    if (currprefs.illegal_mem)
-       dummylog(1, addr, 2, w, 0);
+       dummylog (1, addr, 2, w, 0);
 }
 static void REGPARAM2 dummy_bput (uaecptr addr, uae_u32 b)
 {
@@ -1172,7 +1175,7 @@ static void REGPARAM2 dummy_bput (uaecptr addr, uae_u32 b)
     special_mem |= S_WRITE;
 #endif
    if (currprefs.illegal_mem)
-       dummylog(1, addr, 1, b, 0);
+       dummylog (1, addr, 1, b, 0);
 }
 
 static int REGPARAM2 dummy_check (uaecptr addr, uae_u32 size)
@@ -3175,6 +3178,7 @@ void memory_reset (void)
     if (strcmp (currprefs.romfile, changed_prefs.romfile) != 0
        || strcmp (currprefs.romextfile, changed_prefs.romextfile) != 0)
     {
+        kickstart_rom = 1;
        ersatzkickfile = 0;
        a1000_handle_kickstart (0);
        xfree (a1000_bootrom);
@@ -3218,6 +3222,9 @@ void memory_reset (void)
                }
                if (rd->cloanto)
                    cloanto_rom = 1;
+               kickstart_rom = 0;
+               if ((rd->type & ROMTYPE_SPECIALKICK | ROMTYPE_KICK) == ROMTYPE_KICK)
+                   kickstart_rom = 1;
                if ((rd->cpu & 4) && currprefs.cs_compatible) {
                    /* A4000 ROM = need ramsey, gary and ide */
                    if (currprefs.cs_ramseyrev < 0)
index d5255db7946c960cca1952875326df6e655c0cde..5a0f6101f09b2bc05f5d69dcca68a8558b42725e 100755 (executable)
--- a/newcpu.c
+++ b/newcpu.c
@@ -1625,7 +1625,8 @@ void m68k_reset (int hardreset)
     if (currprefs.cpu_model == 68060) {
        regs.pcr = currprefs.fpu_model ? MC68060_PCR : MC68EC060_PCR;
        regs.pcr |= (currprefs.cpu060_revision & 0xff) << 8;
-       regs.pcr |= 2; /* disable FPU */
+       if (kickstart_rom)
+           regs.pcr |= 2; /* disable FPU */
     }
     fill_prefetch_slow (&regs);
 }
index 2b82ce80bf54326fa7cf25ec6b1aecde2e0e576f..0c56b94c7001f7703c18928e86090581a42fc1f4 100755 (executable)
@@ -55,6 +55,9 @@ static HRESULT restoresurface_2 (LPDIRECTDRAWSURFACE7 surf)
     
     if (surf == dxdata.flipping[0] || surf == dxdata.flipping[1])
        surf = dxdata.primary;
+    ddrval = IDirectDrawSurface7_IsLost (surf);
+    if (SUCCEEDED (ddrval))
+       return ddrval;
     ddrval = IDirectDrawSurface7_Restore (surf);
     if (SUCCEEDED (ddrval)) {
        if (surf == dxdata.primary && dxdata.palette)
@@ -69,6 +72,9 @@ HRESULT restoresurface (LPDIRECTDRAWSURFACE7 surf)
     
     if (surf == dxdata.flipping[0] || surf == dxdata.flipping[1])
        surf = dxdata.primary;
+    ddrval = IDirectDrawSurface7_IsLost (surf);
+    if (SUCCEEDED (ddrval))
+       return ddrval;
     ddrval = IDirectDrawSurface7_Restore (surf);
     if (FAILED (ddrval)) {
        write_log ("IDirectDrawSurface7_Restore: %s\n", DXError (ddrval));
@@ -79,6 +85,19 @@ HRESULT restoresurface (LPDIRECTDRAWSURFACE7 surf)
     return ddrval;
 }
 
+static HRESULT restoresurfacex (LPDIRECTDRAWSURFACE7 surf1, LPDIRECTDRAWSURFACE7 surf2)
+{
+    HRESULT r1, r2;
+
+    r1 = restoresurface (surf1);
+    r2 = restoresurface (surf2);
+    if (SUCCEEDED (r1) && SUCCEEDED (r2))
+       return r1;
+    if (SUCCEEDED (r1))
+       return r2;
+    return r1;
+}
+
 static void clearsurf (LPDIRECTDRAWSURFACE7 surf)
 {
     HRESULT ddrval;
@@ -590,7 +609,7 @@ int DirectDraw_BlitToPrimaryScale (RECT *rect)
     centerdstrect (&dstrect);
     while (FAILED (ddrval = IDirectDrawSurface7_Blt (dst, &dstrect, dxdata.secondary, rect, DDBLT_WAIT, NULL))) {
        if (ddrval == DDERR_SURFACELOST) {
-           ddrval = restoresurface (dst);
+           ddrval = restoresurfacex (dst, dxdata.secondary);
            if (FAILED (ddrval))
                return 0;
        } else if (ddrval != DDERR_SURFACEBUSY) {
@@ -627,7 +646,7 @@ int DirectDraw_BlitToPrimary (RECT *rect)
     centerdstrect (&dstrect);
     while (FAILED(ddrval = IDirectDrawSurface7_Blt (dst, &dstrect, dxdata.secondary, &srcrect, DDBLT_WAIT, NULL))) {
        if (ddrval == DDERR_SURFACELOST) {
-           ddrval = restoresurface (dst);
+           ddrval = restoresurfacex (dst, dxdata.secondary);
            if (FAILED (ddrval))
                return 0;
        } else if (ddrval != DDERR_SURFACEBUSY) {
@@ -659,6 +678,9 @@ static void DirectDraw_Blt (LPDIRECTDRAWSURFACE7 dst, RECT *dstrect, LPDIRECTDRA
            ddrval = restoresurface_2 (dst);
            if (FAILED (ddrval))
                break;
+           ddrval = restoresurface_2 (src);
+           if (FAILED (ddrval))
+               break;
        } else if (ddrval != DDERR_SURFACEBUSY) {
            write_log ("DirectDraw_Blit: %s\n", DXError (ddrval));
            break;
index 975bb9ffdefee1c83a579038b4497f8d70e4563e..33d14210cb0b3a57c861c4cd2a61e18005632592 100755 (executable)
@@ -1219,10 +1219,17 @@ static int hmc (struct hardfiledata *hfd)
        ret = ReadFile (hfd->handle, buf, hfd->blocksize, &got, NULL);
        err = GetLastError ();
        SetErrorMode(errormode);
-       if (ret)
-           write_log ("read ok\n");
-       else
+       if (ret) {
+           if (got == hfd->blocksize) {
+               write_log ("read ok (%d)\n", got);
+           } else {
+               write_log ("read ok but no data (%d)\n", hfd->blocksize);
+               ret = 0;
+               err = 0;
+           }
+       } else {
            write_log ("=%d\n", err);
+       }
        if (!ret && (err == ERROR_DEV_NOT_EXIST || err == ERROR_WRONG_DISK)) {
            if (!first)
                break;
index 379cf9645162d8c1798aec7f2c21f9a6ae58d5f2..0514c1992c14e7c6d58d2483cef533fd3f9b885f 100755 (executable)
@@ -173,8 +173,10 @@ void lcd_update(int led, int on)
        x = 23 + (led - 1) * 40;
        y = 17;
        track = gui_data.drive_track[led - 1];
-       if (gui_data.drive_disabled[led - 1])
+       if (gui_data.drive_disabled[led - 1]) {
            track = -1;
+           on = 0;
+       }
        putnumbers (x, y, track, on);
     } else if (led == 0) {
        dorect (&coords[4 * 2], on);
index 326c3608ab773c01c827d2e44777dcf0b0775d0e..2631f3243f47c6fbc3a51c151a4ec0e596e5e104 100755 (executable)
@@ -226,7 +226,8 @@ void preinit_shm (void)
        size64 = 8 * 1024 * 1024;
     if (max_allowed_mman * 1024 * 1024 > size64)
        max_allowed_mman = size64 / (1024 * 1024);
-    max_z3fastmem = (max_allowed_mman - (max_allowed_mman >> 3)) * 1024 * 1024;
+    if (maxmem == 0)
+       max_z3fastmem = (max_allowed_mman - (max_allowed_mman >> 3)) * 1024 * 1024;
     if (max_z3fastmem < 512 * 1024 * 1024)
        max_z3fastmem = 512 * 1024 * 1024;
 
index b82ef3600dc69d276bdf4073b50d7dc712cc3c38..1c225ee03aa492ccc193268763d6dc95129b59ef 100755 (executable)
@@ -1363,8 +1363,7 @@ static void updatesprcolors (void)
 {
     int i;
     for (i = 1; i < 4; i++) {
-       uae_u32 v, vx;
-       v = cursorrgb[i];
+       uae_u32 v = cursorrgb[i];
        switch (picasso_vidinfo.pixbytes)
        {
            case 1:
@@ -1454,7 +1453,7 @@ static uae_u32 setspriteimage (uaecptr bi)
     for (y = 0; y < h; y++, yy++) {
         uae_u8 *p = tmpbuf + w * bpp * y;
        uae_u8 *pprev = p;
-       uaecptr img = get_long (bi + PSSO_BoardInfo_MouseImage) + 4 + yy * 4 * hiressprite;
+       uaecptr img = get_long (bi + PSSO_BoardInfo_MouseImage) + 4 * hiressprite + yy * 4 * hiressprite;
        x = 0;
        while (x < w) {
            uae_u32 d1 = get_long (img);
index 4c192f4c6a7eef7a79cddf5d1106e3bfc7414bd3..78c931ec0dd89e008e4f566d108be95f9f3d2b7b 100755 (executable)
@@ -15,9 +15,9 @@
 #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
 #define GETBDD(x) ((x) % 100)
 
-#define WINUAEBETA 14
+#define WINUAEBETA 15
 #define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2008, 5, 1)
+#define WINUAEDATE MAKEBD(2008, 5, 2)
 #define WINUAEEXTRA ""
 #define WINUAEREV ""
 
index b49576a3e81c18f4ec56b16a3cc8f09eeb4d572e..69ee88ec8f107f56b6eb57f75fdee1dfce03ce5a 100755 (executable)
@@ -248,17 +248,17 @@ static int set_ddraw_2 (void)
     if (dxfullscreen)  {
        int rounds = 3;
        for (;;) {
+           HRESULT olderr;
            write_log ("set_ddraw: Trying %dx%d, bits=%d, refreshrate=%d\n", width, height, bits, freq);
            ddrval = DirectDraw_SetDisplayMode (width, height, bits, freq);
            if (SUCCEEDED (ddrval))
                break;
-           if (ddrval != 0x80004001 && freq != 0) { // "The function called is not supported at this time" (wtf?)
-               write_log ("set_ddraw: failed, trying without forced refresh rate\n");
-               ddrval = DirectDraw_SetDisplayMode (width, height, bits, 0);
-               if (SUCCEEDED (ddrval))
-                   break;
-           }
-           if (ddrval != DDERR_INVALIDMODE  && ddrval != 0x80004001 && ddrval != DDERR_UNSUPPORTEDMODE)
+           olderr = ddrval;
+           write_log ("set_ddraw: failed, trying without forced refresh rate\n");
+           ddrval = DirectDraw_SetDisplayMode (width, height, bits, 0);
+           if (SUCCEEDED (ddrval))
+               break;
+           if (olderr != DDERR_INVALIDMODE  && olderr != 0x80004001 && olderr != DDERR_UNSUPPORTEDMODE)
                goto oops;
            return -1;
        }
index e3b5fb8c0c4d29fc1e912220310c906ee936fe6c..8a99b6a3405d4994158b690a9e53ff424d57d364 100755 (executable)
@@ -1,4 +1,16 @@
 
+Beta 15:
+
+- autoconfig emulation update, fixes AR3 (broken) autoconfig code that
+  detected non-existing ram expansion at 0x00600000-0x009ffff
+- modified directdraw fullscreen mode fallback code
+- Picasso96 hires hardware sprite problem fixed. It was emulation
+  problem after all.. (I really need new brown paper bag soon)
+- Picasso96 hardware sprite resolution switching problem should be
+  really fixed now. (lots of logging can still happen after alt-tab,
+  this will be removed later)
+- disk insert/remove tweak
+
 Beta 14:
 
 - fixed IDE emulation crash