]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
imported winuaesrc1400b4.zip
authorToni Wilen <twilen@winuae.net>
Sun, 28 Jan 2007 19:18:39 +0000 (21:18 +0200)
committerToni Wilen <twilen@winuae.net>
Mon, 22 Feb 2010 19:31:31 +0000 (21:31 +0200)
23 files changed:
arcadia.c
cdtv.c
cfgfile.c
cia.c
drawing.c
filesys.c
include/arcadia.h
include/cdtv.h
include/filesys.h
include/memory.h
include/options.h
include/uae.h
inputdevice.c
main.c
memory.c
od-win32/keyboard_win32.c
od-win32/resources/winuae.rc
od-win32/win32.c
od-win32/win32.h
od-win32/win32_filesys.c
od-win32/win32gfx.c
od-win32/win32gui.c
od-win32/winuaechangelog.txt

index b109545383a488e7286263addcf1806d09c7fba1..41829b31a049f95dc843756d3ccbd2df70fb443f 100755 (executable)
--- a/arcadia.c
+++ b/arcadia.c
@@ -3,7 +3,8 @@
   *
   * Arcadia emulation
   *
-  * Copyright 2005 Toni Wilen
+  * Copyright 2005-2007 Toni Wilen
+  *
   *
   */
 
  *
  */
 
-int arcadia_flag, arcadia_coin[2];
-struct arcadiarom *arcadia_rom;
+static void multigame(int);
 
-static char arcadia_path[MAX_DPATH];
+int arcadia_flag, arcadia_coin[2];
+struct arcadiarom *arcadia_bios, *arcadia_game;
 
+#define BIOS_VERSION_211 2
+#define BIOS_VERSION_300 3
 static struct arcadiarom roms[]        = {
-    { "ar_airh.zip", "scpa211", "airh_", 1, 5, 0, 2, 4, 7, 6, 1, 3 },
-    { "ar_bowl.zip", "scpa211", "bowl_", 1, 7, 6, 0, 1, 2, 3, 4, 5 },
-    { "ar_dart.zip", "scpa211", "dart_", 1, 4, 0, 7, 6, 3, 1, 2, 5 },
-    { "ar_fast.zip", "scpav3_0.1", "fastv28.", 0, 7, 6, 5, 4, 3, 2, 1, 0 },
-    { "ar_ldrb.zip", "scpa211", "lbg240", 0, 7, 6, 5, 4, 3, 2, 1, 0 },
-    { "ar_ldrba.zip", "scpa211", "ldrb_", 1, 2, 3, 4, 1, 0, 7, 5, 6 },
-    { "ar_ninj.zip", "scpa211", "ninj_", 1, 1, 6, 5, 7, 4, 2, 0, 3 },
-    { "ar_rdwr.zip", "scpa211", "rdwr_", 1, 3, 1, 6, 4, 0, 5, 2, 7 },
-    { "ar_socc.zip", "scpav3_0.1", "socc30.", 2, 0, 7, 1, 6, 5, 4, 3, 2 },
-    { "ar_sdwr.zip", "scpa211", "sdwr_", 1, 6, 3, 4, 5, 2, 1, 0, 7 },
-    { "ar_spot.zip", "scpav3_0.1", "spotv2.", 0, 7, 6, 5, 4, 3, 2, 1, 0 },
-    { "ar_sprg.zip", "scpa211", "sprg_", 1, 4, 7, 3, 0, 6, 5, 2, 1 },
-    { "ar_xeon.zip", "scpa211", "xeon_", 1, 3, 1, 2, 4, 0, 5, 6, 7 },
-    { NULL, NULL, NULL }
+
+    { 49, "ar_bios.zip", "scpa21",         ARCADIA_BIOS, 0, 6, 1, 0, 2, 3, 4, 5, 7 },
+    { 50, "ar_bios.zip", "gcp-",           ARCADIA_BIOS, 3, 7, 6, 5, 4, 3, 2, 1, 0 },
+    { 51, "ar_bios.zip", "scpav3_0.",      ARCADIA_BIOS, 0, 6, 1, 0, 2, 3, 4, 5, 7 },
+
+    { 33, "ar_airh.zip", "airh_",          ARCADIA_GAME, 1, 5, 0, 2, 4, 7, 6, 1, 3 },
+    { 34, "ar_bowl.zip", "bowl_",          ARCADIA_GAME, 1, 7, 6, 0, 1, 2, 3, 4, 5 },
+    { 35, "ar_dart.zip", "dart_",          ARCADIA_GAME, 1, 4, 0, 7, 6, 3, 1, 2, 5 },
+    { 36, "ar_fast.zip", "fastv28.",       ARCADIA_GAME, 0, 7, 6, 5, 4, 3, 2, 1, 0 },
+    { 37, "ar_ldrb.zip", "lbg240",         ARCADIA_GAME, 0, 7, 6, 5, 4, 3, 2, 1, 0 },
+    { 38, "ar_ldrba.zip","ldrb_",          ARCADIA_GAME, 1, 2, 3, 4, 1, 0, 7, 5, 6 },
+    { 39, "ar_ninj.zip", "ninj_",          ARCADIA_GAME, 1, 1, 6, 5, 7, 4, 2, 0, 3 },
+    { 40, "ar_rdwr.zip", "rdwr_",          ARCADIA_GAME, 1, 3, 1, 6, 4, 0, 5, 2, 7 },
+    { 41, "ar_sdwr.zip", "sdwr_",          ARCADIA_GAME, 1, 6, 3, 4, 5, 2, 1, 0, 7 },
+    { 42, "ar_spot.zip", "spotv2.",        ARCADIA_GAME, 0, 7, 6, 5, 4, 3, 2, 1, 0 },
+    { 43, "ar_sprg.zip", "sprg_",          ARCADIA_GAME, 1, 4, 7, 3, 0, 6, 5, 2, 1 },
+    { 44, "ar_xeon.zip", "xeon_",          ARCADIA_GAME, 1, 3, 1, 2, 4, 0, 5, 6, 7 },
+    { 45, "ar_socc.zip", "socc30.",        ARCADIA_GAME, 2, 0, 7, 1, 6, 5, 4, 3, 2 },
+
+    { -1 }
 };
 
 static uae_u8 *arbmemory, *arbbmemory;
@@ -84,14 +94,14 @@ static int load_rom8 (char *xpath, uae_u8 *mem,     int extra)
     char *bin = extra == 1 ? ".bin" : "";
 
     memset (tmp, 0, 131072);
-    sprintf (path, "%s%s%s", xpath, extra == 2 ? "hi" : "h", bin);
+    sprintf (path, "%s%s%s", xpath, extra == 3 ? "-hi" : (extra == 2 ? "hi" : "h"), bin);
     zf = zfile_fopen (path, "rb");
     if (!zf)
        goto end;
     if (zfile_fread (tmp, 65536, 1, zf) == 0)
        goto end;
     zfile_fclose (zf);
-    sprintf (path, "%s%s%s", xpath, extra == 2 ? "lo" : "l", bin);
+    sprintf (path, "%s%s%s", xpath, extra == 3 ? "-lo" : (extra == 2 ? "lo" : "l"), bin);
     zf = zfile_fopen (path, "rb");
     if (!zf)
        goto end;
@@ -109,7 +119,7 @@ static int load_rom8 (char *xpath, uae_u8 *mem,     int extra)
     return 0;
 }
 
-static struct arcadiarom *is_arcadia (char *xpath)
+static struct arcadiarom *is_arcadia (char *xpath, int cnt)
 {
     char path[MAX_DPATH], *p;
     struct arcadiarom *rom = NULL;
@@ -124,8 +134,12 @@ static struct arcadiarom *is_arcadia (char *xpath)
            break;
        }
     }
-    for (i = 0; roms[i].name; i++) {
-       if (!strcmpi (p, roms[i].name)) {
+    for (i = 0; roms[i].romid > 0; i++) {
+       if (!strcmpi (p, roms[i].name) || !strcmpi (p, roms[i].rom)) {
+           if (cnt > 0) {
+               cnt--;
+               continue;
+           }
            rom = &roms[i];
            break;
        }
@@ -135,10 +149,16 @@ static struct arcadiarom *is_arcadia (char *xpath)
     return rom;
 }
 
-static int load_roms (char *xpath, struct arcadiarom *rom)
+static int load_roms (struct arcadiarom *rom)
 {
     char path[MAX_DPATH], path2[MAX_DPATH], path3[MAX_DPATH], *p;
-    int i;
+    int i, offset;
+    char *xpath;
+
+    if (rom->type == ARCADIA_BIOS)
+       xpath = currprefs.romextfile;
+    else
+       xpath = currprefs.cartfile;
 
     strcpy (path3, xpath);
     p = path3 + strlen (path3) - 1;
@@ -152,32 +172,23 @@ static int load_roms (char *xpath, struct arcadiarom *rom)
     if (p == path3)
        *p = 0;
     strcpy (path2, xpath);
-    if (strchr (rom->bios, '/'))
-       strcpy (path2, path3);
-
-    sprintf (path, "%s/ar_bios.zip/%s", path3, rom->bios);
-    if (!load_rom8 (path, arbmemory + bios_offset, 0)) {
-       write_log ("Arcadia: bios load failed ('%s')\n", path);
-       sprintf (path, "%s/%s", path2, rom->bios);
-       if (!load_rom8 (path, arbmemory + bios_offset, 0)) {
-           write_log ("Arcadia: bios load failed ('%s')\n", path);
-           return 0;
-       }
-    }
-    write_log ("Arcadia: bios '%s' loaded\n", path);
+
+    offset = 0;
+    if (rom->type == ARCADIA_BIOS)
+       offset = bios_offset;
     i = 0;
     for (;;) {
-       sprintf (path, "%s/%s%d", xpath, rom->rom, i + 1);
-       if (!load_rom8 (path, arbmemory + 2 * 65536 * i, rom->extra)) {
+       sprintf (path, "%s%d", xpath, i + 1);
+       if (!load_rom8 (path, arbmemory + 2 * 65536 * i + offset, rom->extra)) {
            if (i == 0)
-               write_log ("Arcadia: game rom load failed ('%s')\n", path);
+               write_log ("Arcadia: %s rom load failed ('%s')\n", rom->type == ARCADIA_BIOS ? "bios" : "game", path);
            break;
        }
        i++;
     }
     if (i == 0)
        return 0;
-    write_log ("Arcadia: game rom loaded\n");
+    write_log ("Arcadia: %s rom %s loaded\n", rom->type == ARCADIA_BIOS ? "bios" : "game", xpath);
     return 1;
 }
 
@@ -198,20 +209,18 @@ static uae_u8 bswap (uae_u8 v,int b7,int b6,int   b5,int b4,int b3,int b2,int b1,i
 
 static void decrypt_roms (struct arcadiarom *rom)
 {
-    int i, j;
+    int i, start = 1, end = 0x20000;
 
-    for (i = 1; i < 0x20000; i += 2) {
+    if (rom->type == ARCADIA_BIOS) {
+       start += bios_offset;
+       end += bios_offset;
+    }
+    for (i = start; i < end; i += 2) {
        arbmemory[i] = bswap (arbmemory[i],
            rom->b7,rom->b6,rom->b5,rom->b4,rom->b3,rom->b2,rom->b1,rom->b0);
        if (rom->extra == 2)
            arbmemory[i - 1] = bswap (arbmemory[i - 1],7,6,5,4,3,2,1,0);
     }
-    for (i = 1; i < 0x20000; i += 2) {
-       j = i + bios_offset;
-        arbmemory[j] = bswap (arbmemory[j],6,1,0,2,3,4,5,7);
-    }
-    if (!strcmp (rom->name, "ar_dart.zip"))
-       arbmemory[1] = 0xfc;
 }
 
 static uae_u32 REGPARAM2 arbb_lget (uaecptr addr)
@@ -282,7 +291,6 @@ static uae_u32 REGPARAM2 arb_bget (uaecptr addr)
     addr &= arb_mask;
     return arbmemory[addr];
 }
-
 static void REGPARAM2 arb_lput (uaecptr addr, uae_u32 l)
 {
     uae_u32 *m;
@@ -295,7 +303,6 @@ static void REGPARAM2 arb_lput (uaecptr addr, uae_u32 l)
        nvwrite++;
     }
 }
-
 static void REGPARAM2 arb_wput (uaecptr addr, uae_u32 w)
 {
     uae_u16 *m;
@@ -306,9 +313,10 @@ static void REGPARAM2 arb_wput (uaecptr addr, uae_u32 w)
        m = (uae_u16 *)(arbmemory + addr);
        do_put_mem_word (m, w);
        nvwrite++;
+       if (addr == 0x1ffffe)
+           multigame(w);
     }
 }
-
 static void REGPARAM2 arb_bput (uaecptr addr, uae_u32 b)
 {
     addr -= arb_start & arb_mask;
@@ -326,11 +334,30 @@ static addrbank arcadia_rom_bank = {
     arb_lget, arb_wget, ABFLAG_ROM
 };
 
+
+static void multigame(int v)
+{
+    if (v != 0)
+       map_banks (&kickmem_bank, arb_start >> 16,
+           8, 0);
+    else
+       map_banks (&arcadia_rom_bank, arb_start >> 16,
+           allocated_arbmemory >> 16, 0);
+}
+
 int is_arcadia_rom (char *path)
 {
-    strcpy (arcadia_path, path);
-    arcadia_rom = is_arcadia (path);
-    return arcadia_rom ? 1 : 0;
+    struct arcadiarom *rom;
+
+    rom = is_arcadia (path, 0);
+    if (!rom || rom->type == NO_ARCADIA_ROM)
+       return NO_ARCADIA_ROM;
+    if (rom->type == ARCADIA_BIOS) {
+       arcadia_bios = rom;
+       return ARCADIA_BIOS;
+    }
+    arcadia_game = rom;
+    return ARCADIA_GAME;
 }
 
 static void nvram_write (void)
@@ -361,24 +388,28 @@ void arcadia_unmap (void)
 {
     xfree (arbmemory);
     arbmemory = NULL;
-    arcadia_rom = NULL;
+    arcadia_bios = NULL;
+    arcadia_game = NULL;
 }
 
 int arcadia_map_banks (void)
 {
-    if (!arcadia_rom)
+    if (!arcadia_bios)
        return 0;
     arbmemory = xmalloc (allocated_arbmemory);
     arbbmemory = arbmemory + bios_offset;
     memset (arbmemory, 0, allocated_arbmemory);
-    if (!load_roms (arcadia_path, arcadia_rom)) {
+    if (!load_roms (arcadia_bios)) {
        arcadia_unmap ();
        return 0;
     }
-    decrypt_roms (arcadia_rom);
+    if (arcadia_game)
+       load_roms (arcadia_game);
+    decrypt_roms (arcadia_bios);
+    if (arcadia_game)
+       decrypt_roms (arcadia_game);
     nvram_read ();
-    map_banks (&arcadia_rom_bank, arb_start >> 16,
-       allocated_arbmemory >> 16, 0);
+    multigame(0);
     map_banks (&arcadia_boot_bank, 0xf0,
        8, 0);
     return 1;
@@ -417,3 +448,25 @@ uae_u8 arcadia_parport (int port, uae_u8 pra, uae_u8 dra)
     return v;
 }
 
+struct romdata *scan_arcadia_rom (char *path, int cnt)
+{
+    struct romdata *rd = 0;
+    struct romlist **arc_rl;
+    struct arcadiarom *arcadia_rom;
+    int i;
+
+    arcadia_rom = is_arcadia(path, cnt);
+    if (arcadia_rom) {
+        arc_rl = getarcadiaroms();
+        for (i = 0; arc_rl[i]; i++) {
+           if (arc_rl[i]->rd->id == arcadia_rom->romid) {
+                rd = arc_rl[i]->rd;
+               strcat(path, "/");
+               strcat(path, arcadia_rom->rom);
+                break;
+            }
+        }
+        xfree(arc_rl);
+    }
+    return rd;
+}
diff --git a/cdtv.c b/cdtv.c
index 8ce71f600eecc7d3f639e515cd4f691a526ed96c..8633c2fe512f10e6d0a3558ea022678b918749c8 100755 (executable)
--- a/cdtv.c
+++ b/cdtv.c
@@ -191,14 +191,13 @@ static int ismedia(void)
 
 static void do_play(void)
 {
-    sleep_millis(100);
     sys_command_cd_pause (DF_IOCTL, unitnum, 0);
     cd_audio_status = AUDIO_STATUS_PLAY_ERROR;
     if (sys_command_cd_play (DF_IOCTL, unitnum, lsn2msf(play_start), lsn2msf(play_end), 0)) {
        cd_audio_status = AUDIO_STATUS_IN_PROGRESS;
        cd_playing = 1;
     }
-    do_stch();
+    activate_stch = 1;
 }
 
 static int play_cdtrack (uae_u8 *p)
@@ -228,7 +227,7 @@ static int play_cdtrack (uae_u8 *p)
     play_start = msf2lsn(start);
     write_log("PLAY CD AUDIO from %d-%d, %06.6X (%d) to %06.6X (%d)\n",
        track_start, track_end, start, msf2lsn(start), end, msf2lsn(end));
-    do_play();
+    play_state = 1;
     return 0;
 }
 
@@ -262,7 +261,7 @@ static int play_cd(uae_u8 *p)
     play_start = msf2lsn(start);
     write_log("PLAY CD AUDIO from %06.6X (%d) to %06.6X (%d)\n",
        start, msf2lsn(start), end, msf2lsn(end));
-    do_play();
+    play_state = 1;
     return 0;
 }
 
@@ -291,6 +290,7 @@ static int cdrom_subq(uae_u8 *out, int msflsn)
     out[10] = (msflsn ? trackposmsf : trackposlsn) >> 8;
     out[11] = (msflsn ? trackposmsf : trackposlsn) >> 0;
     out[12] = 0;
+
     return 13;
 }
 
@@ -727,20 +727,19 @@ void CDTV_hsync_handler(void)
     if (cdtv_hsync < 312 * 50 / 75 && cdtv_hsync >= 0)
        return;
     cdtv_hsync = 0;
-/*
+
     if (play_state == 1) {
        play_state = 2;
-       play_statewait = 20;
-       cd_playing = 0;
+       cd_playing = 1;
+       activate_stch = 1;
+       play_statewait = 5;
     } else if (play_statewait > 0) {
        play_statewait--;
     } else if (play_state == 2) {
         write_comm_pipe_u32 (&requests, 0x0110, 1);
-       cd_playing = 1;
-       do_stch();
        play_state = 0;
     }
-*/
+
     if (cd_isready > 0) {
        cd_isready--;
        if (!cd_isready)
@@ -758,10 +757,10 @@ void CDTV_hsync_handler(void)
     subqcnt--;
     if (subqcnt < 0) {
         write_comm_pipe_u32 (&requests, 0x0101, 1);
-       if (activate_stch)
-           do_stch();
        subqcnt = 75;
     }
+    if (activate_stch)
+        do_stch();
 }
 
 static void do_stch(void)
@@ -777,10 +776,12 @@ static void do_stch(void)
 
 void bleh(void)
 {
+#if 0
     cd_playing = cd_finished = cd_motor = cd_media = 1;
     cd_isready = 0;
     cd_playing = 0;
     do_stch();
+#endif
 }
 
 static void cdtv_reset (void)
@@ -1112,7 +1113,7 @@ void cdtv_exitgui (void)
 
 /* CDTV batterybacked RAM emulation */
 #define CDTV_NVRAM_MASK 16383
-#define CDTV_NVRAM_SIZE 16384
+#define CDTV_NVRAM_SIZE 32768
 static uae_u8 cdtv_battram[CDTV_NVRAM_SIZE];
 
 void cdtv_loadcardmem(uae_u8 *p, int size)
@@ -1128,12 +1129,25 @@ void cdtv_loadcardmem(uae_u8 *p, int size)
     zfile_fclose (f);
 }
 
+void cdtv_savecardmem(uae_u8 *p, int size)
+{
+    struct zfile *f;
+
+    f = zfile_fopen (currprefs.flashfile, "rb+");
+    if (!f)
+       return;
+    zfile_fseek (f, CDTV_NVRAM_SIZE, SEEK_SET);
+    zfile_fwrite (p, size, 1, f);
+    zfile_fclose (f);
+}
+
 static void cdtv_battram_reset (void)
 {
     struct zfile *f;
+    int v;
 
     memset (cdtv_battram, 0, CDTV_NVRAM_SIZE);
-    f = zfile_fopen (currprefs.flashfile, "rb");
+    f = zfile_fopen (currprefs.flashfile, "rb+");
     if (!f) {
         f = zfile_fopen (currprefs.flashfile, "wb");
        if (f) {
@@ -1142,7 +1156,9 @@ static void cdtv_battram_reset (void)
        }
        return;
     }
-    zfile_fread (cdtv_battram, CDTV_NVRAM_SIZE, 1, f);
+    v = zfile_fread (cdtv_battram, 1, CDTV_NVRAM_SIZE, f);
+    if (v < CDTV_NVRAM_SIZE)
+       zfile_fwrite (cdtv_battram + v, 1, CDTV_NVRAM_SIZE - v, f);
     zfile_fclose (f);
 }
 
index fc7ca3622a53f22630595ecccbf9f0b1c682fde4..1196ff08c49be84a96c518731ba15e62279464ad 100755 (executable)
--- a/cfgfile.c
+++ b/cfgfile.c
@@ -222,7 +222,7 @@ static void write_filesys_config (struct uae_prefs *p, const char *unexpanded,
        char *str;
 
        str = cfgfile_subst_path (default_path, unexpanded, uci->rootdir);
-       if (uci->volname[0] != 0) {
+       if (!uci->ishdf) {
            sprintf (tmp, "filesystem2=%s,%s:%s:%s,%d\n", uci->readonly ? "ro" : "rw",
                uci->devname ? uci->devname : "", uci->volname, str, uci->bootpri);
            zfile_fputs (f, tmp);
@@ -1071,6 +1071,7 @@ int add_filesys_config (struct uae_prefs *p, int index,
        uci = &p->mountconfig[index];
     if (!uci)
        return 0;
+    uci->ishdf = volname == NULL ? 1 : 0;
     strcpy (uci->devname, devname ? devname : "");
     strcpy (uci->volname, volname ? volname : "");
     strcpy (uci->rootdir, rootdir ? rootdir : "");
@@ -1847,7 +1848,7 @@ static void parse_filesys_spec (struct uae_prefs *p, int readonly, char *spec)
        }
 #endif
 #ifdef FILESYS
-       add_filesys_config (p, -1, 0, buf, s2, readonly, 0, 0, 0, 0, 0, 0, 0);
+       add_filesys_config (p, -1, NULL, buf, s2, readonly, 0, 0, 0, 0, 0, 0, 0);
 #endif
     } else {
        write_log ("Usage: [-m | -M] VOLNAME:mount_point\n");
@@ -1876,7 +1877,7 @@ static void parse_hardfile_spec (struct uae_prefs *p, char *spec)
        goto argh;
     *x4++ = '\0';
 #ifdef FILESYS
-    add_filesys_config (p, -1, 0, 0, x4, 0, atoi (x0), atoi (x1), atoi (x2), atoi (x3), 0, 0, 0);
+    add_filesys_config (p, -1, NULL, NULL, x4, 0, atoi (x0), atoi (x1), atoi (x2), atoi (x3), 0, 0, 0);
 #endif
     free (x0);
     return;
@@ -2456,6 +2457,7 @@ static int configure_rom (struct uae_prefs *p, int *rom, int msg)
        break;
        case ROMTYPE_EXTCD32:
        case ROMTYPE_EXTCDTV:
+       case ROMTYPE_ARCADIABIOS:
        strcpy (p->romextfile, path);
        break;
     }
@@ -2834,6 +2836,8 @@ static int bip_cdtv (struct uae_prefs *p, int config, int compa, int romcheck)
     set_68000_compa (p, compa);
     p->cs_compatible = 2;
     build_in_chipset_prefs (p);
+    fetch_datapath (p->flashfile, sizeof (p->flashfile));
+    strcat(p->flashfile, "cdtv.nvr");
     return 1;
 }
 
@@ -2856,6 +2860,8 @@ static int bip_cd32 (struct uae_prefs *p, int config, int compa, int romcheck)
     set_68020_compa (p, compa);
     p->cs_compatible = 3;
     build_in_chipset_prefs (p);
+    fetch_datapath (p->flashfile, sizeof (p->flashfile));
+    strcat(p->flashfile, "cd32.nvr");
     return 1;
 }
 
@@ -3008,6 +3014,35 @@ static int bip_super (struct uae_prefs *p, int config, int compa, int romcheck)
     return configure_rom (p, roms, romcheck);
 }
 
+ static int bip_arcadia (struct uae_prefs *p, int config, int compa, int romcheck)
+ {
+    int roms[4];
+    p->bogomem_size = 0;
+    p->chipset_mask = 0;
+    p->cs_rtc = 0;
+    p->nr_floppies = 0;
+    p->dfxtype[0] = DRV_NONE;
+    p->dfxtype[1] = DRV_NONE;
+    set_68000_compa (p, compa);
+    p->cs_compatible = 4;
+    build_in_chipset_prefs (p);
+    fetch_datapath (p->flashfile, sizeof (p->flashfile));
+    strcat(p->flashfile, "arcadia.nvr");
+    roms[0] = 5;
+    roms[1] = 4;
+    roms[2] = -1;
+    if (!configure_rom (p, roms, romcheck))
+       return 0;
+    roms[0] = 49;
+    roms[1] = 50;
+    roms[2] = 51;
+    roms[3] = -1;
+    if (!configure_rom (p, roms, romcheck))
+       return 0;
+    return 1;
+}
+
 int build_in_prefs (struct uae_prefs *p, int model, int config, int compa, int romcheck)
 {
     int v = 0, i;
@@ -3036,10 +3071,7 @@ int build_in_prefs (struct uae_prefs *p, int model, int config, int compa, int r
        v = bip_cdtv (p, config, compa, romcheck);
        break;
        case 7:
-       v = bip_a500 (p, 4, compa, romcheck);
-       p->nr_floppies = 0;
-       p->dfxtype[0] = DRV_NONE;
-       p->dfxtype[1] = DRV_NONE;
+       v = bip_arcadia (p, config , compa, romcheck);
        break;
        case 10:
        v = bip_super (p, config, compa, romcheck);
diff --git a/cia.c b/cia.c
index 27f75a178e03f2c33c8e6a6e2d750b34efc21e2e..2dde7b5ea3b8f6f10dd1b83d32c6dec5f9c2c0d7 100755 (executable)
--- a/cia.c
+++ b/cia.c
@@ -482,7 +482,7 @@ static uae_u8 ReadCIAA (unsigned int addr)
            parallel_direct_read_data (&v);
            tmp = v;
 #ifdef ARCADIA
-       } else if (arcadia_rom) {
+       } else if (arcadia_bios) {
            tmp = arcadia_parport (0, ciaaprb, ciaadrb);
 #endif
        } else {
@@ -690,7 +690,7 @@ static void WriteCIAA (uae_u16 addr,uae_u8 val)
            parallel_direct_write_data (val, ciaadrb);
            cia_parallelack ();
 #ifdef ARCADIA
-       } else if (arcadia_rom) {
+       } else if (arcadia_bios) {
            arcadia_parport (1, ciaaprb, ciaadrb);
 #endif
        }
@@ -709,7 +709,7 @@ static void WriteCIAA (uae_u16 addr,uae_u8 val)
            write_log ("BFE301 W %02.2X %s\n", val, debuginfo(0));
 #endif
 #ifdef ARCADIA
-       if (arcadia_rom)
+       if (arcadia_bios)
            arcadia_parport (1, ciaaprb, ciaadrb);
 #endif
        break;
index aa4995cc9752a102e6944c5eb949e950f7697c2b..e6f4559babba8699a60de1fa4cdc587048bea758 100755 (executable)
--- a/drawing.c
+++ b/drawing.c
@@ -128,21 +128,6 @@ union sps_union spixstate;
 static uae_u32 ham_linebuf[MAX_PIXELS_PER_LINE * 2];
 
 uae_u8 *xlinebuffer;
-#ifdef XLINECHECK
-char *xlinebuffer_start, *xlinebuffer_end;
-static void xlinecheck (int start, int end)
-{
-    char *xstart = xlinebuffer + start * gfxvidinfo.pixbytes;
-    char *xend = xlinebuffer + end * gfxvidinfo.pixbytes;
-    if (xstart < xlinebuffer_start || xstart > xlinebuffer_end ||
-       xend < xlinebuffer_start || xend > xlinebuffer_end)
-           write_log ("*** %dx%d (%dx%dx%d) %p %p %p\n",
-               start, end, gfxvidinfo.width, gfxvidinfo.height, gfxvidinfo.pixbytes,
-               xlinebuffer, xlinebuffer_start, xlinebuffer_end);
-}
-#else
-#define xlinecheck
-#endif
 
 static int *amiga2aspect_line_map, *native2amiga_line_map;
 static uae_u8 *row_map[MAX_VIDHEIGHT + 1];
@@ -205,6 +190,45 @@ int framecnt = 0;
 static int frame_redraw_necessary;
 static int picasso_redraw_necessary;
 
+#ifdef XLINECHECK
+static void xlinecheck (unsigned int start, unsigned int end)
+{
+    unsigned int xstart = (unsigned int)xlinebuffer + start * gfxvidinfo.pixbytes;
+    unsigned int xend = (unsigned int)xlinebuffer + end * gfxvidinfo.pixbytes;
+    unsigned int end1 = (unsigned int)gfxvidinfo.bufmem + gfxvidinfo.rowbytes * gfxvidinfo.height;
+    int min = linetoscr_x_adjust_bytes / gfxvidinfo.pixbytes;
+    int ok = 1;
+
+    if (xstart >= gfxvidinfo.emergmem && xstart < gfxvidinfo.emergmem + 4096 * gfxvidinfo.pixbytes &&
+       xend >= gfxvidinfo.emergmem && xend < gfxvidinfo.emergmem + 4096 * gfxvidinfo.pixbytes)
+       return;
+
+    if (xstart < (unsigned int)gfxvidinfo.bufmem || xend < (unsigned int)gfxvidinfo.bufmem)
+       ok = 0;
+    if (xend > end1 || xstart >= end1)
+       ok = 0;
+    xstart -= (unsigned int)gfxvidinfo.bufmem;
+    xend -= (unsigned int)gfxvidinfo.bufmem;
+    if ((xstart % gfxvidinfo.rowbytes) >= gfxvidinfo.width * gfxvidinfo.pixbytes)
+       ok = 0;
+    if ((xend % gfxvidinfo.rowbytes) >= gfxvidinfo.width * gfxvidinfo.pixbytes)
+       ok = 0;
+    if (xstart >= xend)
+       ok = 0;
+    if (xend - xstart > gfxvidinfo.width * gfxvidinfo.pixbytes)
+       ok = 0;
+
+    if (!ok) {
+           write_log ("*** %d-%d (%dx%dx%d %d) %p\n",
+               start - min, end - min, gfxvidinfo.width, gfxvidinfo.height,
+               gfxvidinfo.pixbytes, gfxvidinfo.rowbytes,
+               xlinebuffer);
+    }
+}
+#else
+#define xlinecheck
+#endif
+
 STATIC_INLINE void count_frame (void)
 {
     framecnt++;
@@ -501,6 +525,7 @@ static int linetoscr_double_offset;
 
 static void pfield_do_linetoscr (int start, int stop)
 {
+    xlinecheck(start, stop);
 #ifdef AGA
     if (currprefs.chipset_mask & CSMASK_AGA) {
        if (res_shift == 0)
@@ -1093,7 +1118,7 @@ void init_row_map (void)
        abort ();
     }
     j = 0;
-    for (i = 0; i < MAX_VIDHEIGHT + 1; i++)
+    for (i = gfxvidinfo.height; i < MAX_VIDHEIGHT + 1; i++)
        row_map[i] = row_tmp;
     for (i = 0; i < gfxvidinfo.height; i++, j += gfxvidinfo.rowbytes)
        row_map[i] = gfxvidinfo.bufmem + j;
@@ -1218,6 +1243,7 @@ STATIC_INLINE void do_flush_screen (int start, int stop)
        Should be corrected.
        (sjo 26.9.99) */
 
+    xlinecheck(start, stop);
     if (gfxvidinfo.maxblocklines != 0 && first_block_line != NO_BLOCK) {
        flush_block (first_block_line, last_block_line);
     }
@@ -1460,10 +1486,6 @@ static void pfield_draw_line (int lineno, int gfx_ypos, int follow_ypos)
        xlinebuffer = gfxvidinfo.emergmem, dh = dh_emerg;
     if (xlinebuffer == 0)
        xlinebuffer = row_map[gfx_ypos], dh = dh_buf;
-#ifdef XLINECHECK
-    xlinebuffer_start =  xlinebuffer;
-    xlinebuffer_end = xlinebuffer + gfxvidinfo.width * gfxvidinfo.pixbytes;
-#endif
     xlinebuffer -= linetoscr_x_adjust_bytes;
 
     if (border == 0) {
index cfd6cbdbefefab0ebe0ab60d25a0702cd65abae2..3fe1d4e4bb49969edb29db329eaa3faa494a2d34 100755 (executable)
--- a/filesys.c
+++ b/filesys.c
@@ -203,7 +203,9 @@ int get_filesys_unitconfig (struct uae_prefs *p, int index, struct mountedinfo *
     memset(&uitmp, 0, sizeof uitmp);
     if (!ui) {
        ui = &uitmp;
-        if (uci->volname[0]) {
+       if (!uci->ishdf) {
+           if (my_getvolumeinfo (uci->rootdir) < 0)
+               return -1;
            return FILESYS_VIRTUAL;
        } else {
            ui->hf.readonly = 1;
@@ -217,7 +219,7 @@ int get_filesys_unitconfig (struct uae_prefs *p, int index, struct mountedinfo *
     }
     mi->size = ui->hf.size;
     mi->nrcyls = (int)(uci->sectors * uci->surfaces ? (ui->hf.size / uci->blocksize) / (uci->sectors * uci->surfaces) : 0);
-    if (ui->volname)
+    if (!uci->ishdf)
        return FILESYS_VIRTUAL;
     if (uci->reserved == 0 && uci->sectors == 0 && uci->surfaces == 0) {
        if (ui->hf.flags & 1)
@@ -396,6 +398,7 @@ int move_filesys_unitconfig (struct uae_prefs *p, int nr, int to)
     return 1;
 }
 
+static void filesys_addexternals(void);
 static void initialize_mountinfo(void)
 {
     int i;
@@ -411,6 +414,7 @@ static void initialize_mountinfo(void)
        if (idx >= 0)
            uci->configoffset = idx;
     }
+    filesys_addexternals();
 }
 
 
index ed4559278cde6a4c04afb4cb723e1ddf018e824f..73697f3312156903258d710f36ca3b3d1b55b3d3 100755 (executable)
@@ -8,14 +8,20 @@ extern void arcadia_unmap (void);
 extern void arcadia_vsync (void);
 extern void arcadia_reset (void);
 extern uae_u8 arcadia_parport (int port, uae_u8 pra, uae_u8 dra);
+extern struct romdata *scan_arcadia_rom (char*, int);
 
 struct arcadiarom {
-    char *name, *bios, *rom;
-    int extra;
+    int romid;
+    char *name, *rom;
+    int type, extra;
     int b7, b6, b5, b4, b3, b2, b1, b0;
 };
 
-extern struct arcadiarom *arcadia_rom;
+extern struct arcadiarom *arcadia_bios, *arcadia_game;
 extern int arcadia_flag, arcadia_coin[2];
 
+#define NO_ARCADIA_ROM 0
+#define ARCADIA_BIOS 1
+#define ARCADIA_GAME 2
+
 #endif
\ No newline at end of file
index 7ddce6ba5d16d2c1135c97a8e98e3e4f38282990..863e6eb0947f7c543baeae8f4724f6a59c1a24e0 100755 (executable)
@@ -13,6 +13,7 @@ void cdtv_battram_write (int addr, int v);
 uae_u8 cdtv_battram_read (int addr);
 
 extern void cdtv_loadcardmem(uae_u8*, int);
+extern void cdtv_savecardmem(uae_u8*, int);
 
 #endif
 
index fa082aa380248783e0a41624ee10c2a370fe29eb..90e300b6fe0f01c9fb5d2720d6991309c7b1b43a 100755 (executable)
@@ -43,7 +43,6 @@ struct hardfiledata {
 struct uaedev_mount_info;
 extern struct uaedev_mount_info options_mountinfo;
 
-extern void filesys_init (void);
 extern struct hardfiledata *get_hardfile_data (int nr);
 #define FILESYS_MAX_BLOCKSIZE 2048
 extern int hdf_open (struct hardfiledata *hfd, char *name);
index 801ec68ec236d66e88be14d03ed356955e8daea4..9bc3c9ca549bb465a99f42b745a4ccfd669d4de7 100755 (executable)
@@ -330,7 +330,8 @@ extern void init_shm(void);
 #define ROMTYPE_EXTCDTV 8
 #define ROMTYPE_AR 16
 #define ROMTYPE_KEY 32
-#define ROMTYPE_ARCADIA 64
+#define ROMTYPE_ARCADIABIOS 64
+#define ROMTYPE_ARCADIAGAME 128
 
 struct romdata {
     char *name;
@@ -354,6 +355,7 @@ extern struct romdata *getromdatabycrc (uae_u32 crc32);
 extern struct romdata *getromdatabydata (uae_u8 *rom, int size);
 extern struct romdata *getromdatabyid (int id);
 extern struct romdata *getromdatabyzfile (struct zfile *f);
+extern struct romlist **getarcadiaroms (void);
 extern struct romdata *getarcadiarombyname (char *name);
 extern struct romlist **getrombyident(int ver, int rev, int subver, int subrev, char *model, int all);
 extern void getromname (struct romdata*, char*);
index 0ffcc388d08673c296675bd3c47321d9f7fc6326..f75793388c83a289ce99eca0484d5e61d4c3b53c 100755 (executable)
@@ -55,6 +55,7 @@ struct uaedev_config_info {
     char devname[MAX_DPATH];
     char volname[MAX_DPATH];
     char rootdir[MAX_DPATH];
+    int ishdf;
     int readonly;
     int bootpri;
     char filesys[MAX_DPATH];
index 9f491936f4a3809c16ef04883b7ed9223a36b1cd..d829ea15b008f0f16088fa4e367c9273cb393c7c 100755 (executable)
@@ -46,4 +46,5 @@ extern char *colormodes[];
 extern void fetch_saveimagepath (char*, int, int);
 extern void fetch_configurationpath (char *out, int size);
 extern void fetch_screenshotpath (char *out, int size);
+extern void fetch_datapath (char *out, int size);
 extern int uaerand(void);
\ No newline at end of file
index 6e6a2db4ee31f9527c2f754e498ab50cb6221b39..668589a8c65de5229ba65639f070d674b2a3a045 100755 (executable)
@@ -1774,7 +1774,7 @@ void inputdevice_vsync (void)
     if (ievent_alive > 0)
        ievent_alive--;
 #ifdef ARCADIA
-    if (arcadia_rom)
+    if (arcadia_bios)
        arcadia_vsync ();
 #endif
     mouseedge();
diff --git a/main.c b/main.c
index 5d41543d68c95056048f15fb192ab99f56825752..cc8fa2534bfc5625cde2aa2f5f2f319941725c97 100755 (executable)
--- a/main.c
+++ b/main.c
@@ -693,11 +693,6 @@ static void real_main2 (int argc, char **argv)
        if (currprefs.start_debugger && debuggable ())
            activate_debugger ();
 
-#ifdef WIN32
-#ifdef FILESYS
-       filesys_init (); /* New function, to do 'add_filesys_unit()' calls at start-up */
-#endif
-#endif
        if (sound_available && currprefs.produce_sound > 1 && ! init_audio ()) {
            write_log ("Sound driver unavailable: Sound output disabled\n");
            currprefs.produce_sound = 0;
index cdec57db6a147f6c11e4493a4674dd0c9baa1c0b..e206833ef56186b5ed60c329d62820852564c321 100755 (executable)
--- a/memory.c
+++ b/memory.c
@@ -131,19 +131,23 @@ static struct romdata roms[] = {
     { "Action Replay Mk III v3.17", 3, 17, 3, 17, "AR\0", 0xc8a16406, 262144, 30, 0, 0, ROMTYPE_AR },
     { "Action Replay 1200", 0, 0, 0, 0, "AR\0", 0x8d760101, 262144, 47, 0, 0, ROMTYPE_AR },
 
-    { "Arcadia SportTime Table Hockey\0ar_airh", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 33, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia SportTime Bowling\0ar_bowl", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 34, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia World Darts\0ar_dart", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 35, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Magic Johnson's Fast Break\0ar_fast", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 36, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Leader Board Golf\0ar_ldrb", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 37, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Leader Board Golf (alt)\0ar_ldrba", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 38, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Ninja Mission\0ar_ninj", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 39, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Road Wars\0ar_rdwr", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 40, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Sidewinder\0ar_sdwr", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 41, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Cool Spot\0ar_spot", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 42, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Space Ranger\0ar_sprg", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 43, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia Xenon\0ar_xeon", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 44, 0, 0, ROMTYPE_ARCADIA },
-    { "Arcadia World Trophy Soccer\0ar_socc", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 45, 0, 0, ROMTYPE_ARCADIA },
+    { "Arcadia OnePlay 2.11", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 49, 0, 0, ROMTYPE_ARCADIABIOS },
+    { "Arcadia TenPlay 2.11", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 50, 0, 0, ROMTYPE_ARCADIABIOS },
+    { "Arcadia OnePlay 3.00", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 51, 0, 0, ROMTYPE_ARCADIABIOS },
+
+    { "Arcadia SportTime Table Hockey", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 33, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia SportTime Bowling", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 34, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia World Darts", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 35, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Magic Johnson's Fast Break", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 36, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Leader Board Golf", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 37, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Leader Board Golf (alt)", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 38, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Ninja Mission", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 39, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Road Wars", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 40, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Sidewinder", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 41, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Spot", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 42, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Space Ranger", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 43, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia Xenon", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 44, 0, 0, ROMTYPE_ARCADIAGAME },
+    { "Arcadia World Trophy Soccer", 0, 0, 0, 0, "ARCADIA\0", 0, 0, 45, 0, 0, ROMTYPE_ARCADIAGAME },
 
     { NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
 
@@ -231,7 +235,7 @@ struct romdata *getarcadiarombyname (char *name)
 {
     int i;
     for (i = 0; roms[i].name; i++) {
-       if (roms[i].type == ROMTYPE_ARCADIA) {
+       if (roms[i].type == ROMTYPE_ARCADIAGAME || roms[i].type == ROMTYPE_ARCADIAGAME) {
            char *p = roms[i].name;
            p = p + strlen (p) + 1;
            if (strlen (name) >= strlen (p) + 4) {
@@ -244,6 +248,34 @@ struct romdata *getarcadiarombyname (char *name)
     return NULL;
 }
 
+struct romlist **getarcadiaroms(void)
+{
+    int i, out, max;
+    void *buf;
+    struct romlist **rdout, *rltmp;
+
+    max = 0;
+    for (i = 0; roms[i].name; i++) {
+       if (roms[i].type == ROMTYPE_ARCADIABIOS || roms[i].type == ROMTYPE_ARCADIAGAME)
+           max++;
+    }
+    buf = xmalloc((sizeof (struct romlist*) + sizeof (struct romlist)) * (max + 1));
+    rdout = buf;
+    rltmp = (struct romlist*)((uae_u8*)buf + (max + 1) * sizeof (struct romlist*));
+    out = 0;
+    for (i = 0; roms[i].name; i++) {
+       if (roms[i].type == ROMTYPE_ARCADIABIOS || roms[i].type == ROMTYPE_ARCADIAGAME) {
+           rdout[out++] = rltmp;
+           rltmp->path = NULL;
+           rltmp->rd = &roms[i];
+           rltmp++;
+       }
+    }
+    rdout[out] = NULL;
+    return rdout;
+}
+
+
 static int kickstart_checksum_do (uae_u8 *mem, int size)
 {
     uae_u32 cksum = 0, prevck = 0;
@@ -1384,6 +1416,7 @@ static int extendedkickmem_type;
 #define EXTENDED_ROM_CD32 1
 #define EXTENDED_ROM_CDTV 2
 #define EXTENDED_ROM_KS 3
+#define EXTENDED_ROM_ARCADIA 4
 
 static uae_u32 REGPARAM3 extendedkickmem_lget (uaecptr) REGPARAM;
 static uae_u32 REGPARAM3 extendedkickmem_wget (uaecptr) REGPARAM;
@@ -1674,6 +1707,10 @@ static int load_extendedkickstart (void)
 
     if (strlen(currprefs.romextfile) == 0)
        return 0;
+    if (is_arcadia_rom(currprefs.romextfile) == ARCADIA_BIOS) {
+       extendedkickmem_type = EXTENDED_ROM_ARCADIA;
+       return 0;
+    }
     f = zfile_fopen (currprefs.romextfile, "rb");
     if (!f) {
        notify_user (NUMSG_NOEXTROM);
@@ -2335,19 +2372,25 @@ void memory_reset (void)
         map_banks (&kickmem_bank, 0xE0, 8, 0);
 
 #ifdef ARCADIA
-    is_arcadia_rom (currprefs.cartfile);
-    if (arcadia_rom) {
-       if (strcmp (currprefs.cartfile, changed_prefs.cartfile) != 0) {
-           memcpy (currprefs.cartfile, changed_prefs.cartfile, sizeof currprefs.cartfile);
-           arcadia_unmap ();
+    if (is_arcadia_rom (currprefs.romextfile) == ARCADIA_BIOS) {
+       if (strcmp (currprefs.romextfile, changed_prefs.romextfile) != 0) {
+           memcpy (currprefs.romextfile, changed_prefs.romextfile, sizeof currprefs.romextfile);
+        }
+       if (is_arcadia_rom (currprefs.cartfile) == ARCADIA_GAME) {
+           if (strcmp (currprefs.cartfile, changed_prefs.cartfile) != 0) {
+               memcpy (currprefs.cartfile, changed_prefs.cartfile, sizeof currprefs.cartfile);
+           }
        }
+        arcadia_unmap ();
+       is_arcadia_rom (currprefs.romextfile);
+       is_arcadia_rom (currprefs.cartfile);
        arcadia_map_banks ();
     }
 #endif
 
 #ifdef ACTION_REPLAY
 #ifdef ARCADIA
-    if (!arcadia_rom) {
+    if (!arcadia_bios) {
 #endif
     action_replay_memory_reset();
 #ifdef ARCADIA
@@ -2405,8 +2448,10 @@ void memory_cleanup (void)
        xfree (a1000_bootrom);
     if (chipmemory)
        mapped_free (chipmemory);
-    if (cardmemory)
+    if (cardmemory) {
+       cdtv_savecardmem (cardmemory, allocated_cardmem);
        mapped_free (cardmemory);
+    }
 
     bogomemory = 0;
     kickmemory = 0;
index 0788dc8111d39cc00a2640f34f5c5ea10d0b57fb..9ea029532e55d2902050418402dd0d888eb5ee9e 100755 (executable)
@@ -231,7 +231,7 @@ int getcapslock (void)
 static int handlearcadia (int scancode, int state)
 {
     int e = 0;
-    if (!arcadia_rom)
+    if (!arcadia_bios)
        return 0;
     switch (scancode)
     {
index b3362ea355b1b85692bc8ad59f35e56a19c821df..bd43f452096e1faea11371edb20b49606b541499 100755 (executable)
@@ -3,9 +3,18 @@
 #include "resource.h"
 
 #define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
 #include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
 #undef APSTUDIO_READONLY_SYMBOLS
 
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
 #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
 #ifdef _WIN32
 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
@@ -214,10 +223,10 @@ BEGIN
     PUSHBUTTON      "Add Ha&rd Drive...",IDC_NEW_HD,135,186,60,15
     PUSHBUTTON      "Remove",IDC_REMOVE,235,186,60,15
     PUSHBUTTON      "&Properties",IDC_EDIT,235,207,60,15
-    CONTROL         "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,205,100,10,0
+    CONTROL         "Add PC drives at startup",IDC_MAPDRIVES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,205,100,10
     CONTROL         "Disable UAEFSDB-support",IDC_NOUAEFSDB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,205,115,10
     CONTROL         "Don't use Windows Recycle Bin",IDC_NORECYCLEBIN,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,110,216,115,10
-    CONTROL         "Include network drives",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,216,101,10,0
+    CONTROL         "Include network drives",IDC_MAPDRIVES_NET,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,5,216,101,10
 END
 
 IDD_SOUND DIALOGEX 0, 0, 300, 231
@@ -268,11 +277,11 @@ BEGIN
     RTEXT           "Name:",IDC_STATIC,0,161,40,15,SS_CENTERIMAGE
     EDITTEXT        IDC_EDITNAME,44,162,150,13,ES_AUTOHSCROLL
     RTEXT           "Description:",IDC_STATIC,4,183,37,15,SS_CENTERIMAGE
-    EDITTEXT        IDC_EDITDESCRIPTION,44,183,150,13,ES_AUTOHSCROLL,0
+    EDITTEXT        IDC_EDITDESCRIPTION,44,183,150,13,ES_AUTOHSCROLL
     RTEXT           "Link:",IDC_STATIC,0,204,40,15,SS_CENTERIMAGE
     COMBOBOX        IDC_CONFIGLINK,44,205,97,150,CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP
     CONTROL         "Ignore link",IDC_CONFIGNOLINK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,146,206,48,10
-    EDITTEXT        IDC_EDITPATH,199,161,49,15,ES_AUTOHSCROLL | WS_DISABLED,0
+    EDITTEXT        IDC_EDITPATH,199,161,49,15,ES_AUTOHSCROLL | WS_DISABLED
     CONTROL         "Autoload",IDC_CONFIGAUTO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,253,163,42,10
     GROUPBOX        "Additional Information",IDC_STATIC,199,179,96,38,BS_LEFT
     PUSHBUTTON      "View",IDC_VIEWINFO,210,195,35,15
@@ -367,7 +376,7 @@ BEGIN
     COMBOBOX        IDC_KBLED2,22,173,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     COMBOBOX        IDC_KBLED3,22,193,56,65,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
     GROUPBOX        "Logging",IDC_STATIC,97,140,195,25
-    CONTROL         "Create log file",IDC_CREATELOGFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,151,72,10,0
+    CONTROL         "Create log file",IDC_CREATELOGFILE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,107,151,72,10
     CONTROL         "Illegal memory accesses",IDC_ILLEGAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,189,151,95,10
     GROUPBOX        "State Files",IDC_STATIC,98,165,195,69
     PUSHBUTTON      "Load state...",IDC_DOLOADSTATE,105,182,49,14
@@ -506,32 +515,32 @@ BEGIN
     CONTROL         "None",IDC_CS_RTC1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,22,49,55,10
     CONTROL         "MSM6242B",IDC_CS_RTC2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,91,49,52,10
     CONTROL         "RF5C01A",IDC_CS_RTC3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,160,49,46,10
-    EDITTEXT        IDC_CS_RTCADJUST,218,47,64,13,ES_AUTOHSCROLL,0
+    EDITTEXT        IDC_CS_RTCADJUST,218,47,64,13,ES_AUTOHSCROLL
     GROUPBOX        "CIA-A TOD Clock Source",IDC_STATIC,12,69,275,29
     CONTROL         "Vertical Sync",IDC_CS_CIAA_TOD1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,25,81,63,10
     CONTROL         "Power Supply 50Hz",IDC_CS_CIAA_TOD2,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,95,81,85,10
-    CONTROL         "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,192,81,91,10
+    CONTROL         "Power Supply 60Hz",IDC_CS_CIAA_TOD3,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP,192,81,88,10
     CONTROL         "Boot ROM Mirror",IDC_CS_KSMIRROR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,128,80,10
-    CONTROL         "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,128,96,10
+    CONTROL         "A1000 Boot RAM/ROM",IDC_CS_A1000RAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,128,86,10
     CONTROL         "CD32 CD",IDC_CS_CD32CD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,141,76,10
     CONTROL         "CD32 C2P",IDC_CS_CD32C2P,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,141,85,10
     CONTROL         "CD32 NVRAM",IDC_CS_CD32NVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,141,84,10
-    CONTROL         "CDTV CD Controller",IDC_CS_CDTVCD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,154,79,10
-    CONTROL         "CDTV SRAM",IDC_CS_CDTVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,153,90,10
+    CONTROL         "CDTV CD",IDC_CS_CDTVCD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,154,47,10
+    CONTROL         "CDTV SRAM",IDC_CS_CDTVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,153,85,10
     CONTROL         "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,153,90,10
     CONTROL         "A600/A1200 IDE",IDC_CS_IDE1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,166,79,10
     CONTROL         "A4000 IDE",IDC_CS_IDE2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,166,84,10
     CONTROL         "Ramsey revision:",IDC_CS_RAMSEY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,201,71,10
-    EDITTEXT        IDC_CS_RAMSEYREV,94,199,45,13,ES_AUTOHSCROLL,0
+    EDITTEXT        IDC_CS_RAMSEYREV,94,199,45,13,ES_AUTOHSCROLL
     CONTROL         "Fat Gary revision:",IDC_CS_FATGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,214,71,10
-    EDITTEXT        IDC_CS_FATGARYREV,94,213,45,13,ES_AUTOHSCROLL,0
+    EDITTEXT        IDC_CS_FATGARYREV,94,213,45,13,ES_AUTOHSCROLL
     CONTROL         "Motherboard Super DMAC",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,227,118,10
     CONTROL         "Compatible Settings",IDC_CS_COMPATIBLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,21,234,10
-    CONTROL         "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,128,95,10
+    CONTROL         "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,193,128,92,10
     CONTROL         "Agnus/Alice revision:",IDC_CS_AGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,201,81,10
-    EDITTEXT        IDC_CS_AGNUSREV,235,199,45,13,ES_AUTOHSCROLL,0
+    EDITTEXT        IDC_CS_AGNUSREV,235,199,45,13,ES_AUTOHSCROLL
     CONTROL         "Denise/Lisa revision:",IDC_CS_DENISE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,214,81,10
-    EDITTEXT        IDC_CS_DENISEREV,235,213,45,13,ES_AUTOHSCROLL,0
+    EDITTEXT        IDC_CS_DENISEREV,235,213,45,13,ES_AUTOHSCROLL
 END
 
 IDD_AVIOUTPUT DIALOGEX 0, 0, 288, 203
@@ -767,6 +776,7 @@ BEGIN
     CTEXT           "x",IDC_PROGRESSBAR_TEXT,23,5,187,10,SS_CENTERIMAGE | WS_TABSTOP
 END
 
+
 /////////////////////////////////////////////////////////////////////////////
 //
 // Icon
@@ -1159,7 +1169,7 @@ BEGIN
     IDS_QS_MODEL_A1000      "512 KB Chip RAM\nThe A1000 was the first model produced, with a configuration equivalent to that of an A500 with OCS chipset. You normally don't need to use this configuration, unless you are nostalgic and would like to hear the short A1000 boot tune\n256 KB Chip RAM\nUnexpanded A1000. All later A1000 models were sold with a 256 KB RAM expansion built-in."
     IDS_QS_MODEL_A1200      "Basic non-expanded configuration\nUse this configuration to run most AGA demos and games\n4 MB Fast RAM expanded configuration\nSome newer AGA games and demos need an expanded A1200 to run."
     IDS_QS_MODEL_CD32       "CD32\nThe CD32 was one the first 32-bit consoles on the market. It is basically an A1200 with a built-in CD-ROM drive. Insert your CD32 or CDTV CD-ROM into a free CD-ROM drive before starting the emulation."
-    IDS_QS_MODEL_CDTV       "CDTV\nThe CDTV was the first model with a built-in CD-ROM drive. Looking like a black CD player, it featured a configuration equivalent to that of an A500 with 1 MB RAM and an ECS chipset."
+    IDS_QS_MODEL_CDTV       "CDTV\nThe CDTV was the first model with a built-in CD-ROM drive. Looking like a black CD player, it featured a configuration equivalent to that of an A500 with 1 MB RAM and an ECS chipset.\n64KB SRAM card expanded CDTV\n"
 END
 
 STRINGTABLE 
@@ -1177,6 +1187,38 @@ END
 /////////////////////////////////////////////////////////////////////////////
 
 
+/////////////////////////////////////////////////////////////////////////////
+// Finnish resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FIN)
+#ifdef _WIN32
+LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.\0"
+END
+
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // Finnish resources
+/////////////////////////////////////////////////////////////////////////////
+
+
 
 #ifndef APSTUDIO_INVOKED
 /////////////////////////////////////////////////////////////////////////////
@@ -1185,7 +1227,6 @@ END
 //
 
 
-
 /////////////////////////////////////////////////////////////////////////////
 #endif    // not APSTUDIO_INVOKED
 
index e21dd73adb33bd88d26b4d01c896650b364a6d36..0d4a82f639b70f49a614a92dbc34fe12028ed1b4 100755 (executable)
@@ -1895,6 +1895,10 @@ void fetch_screenshotpath (char *out, int size)
 {
     fetch_path ("ScreenshotPath", out, size);
 }
+void fetch_datapath (char *out, int size)
+{
+    fetch_path (NULL, out, size);
+}
 
 static void strip_slashes (char *p)
 {
@@ -1915,6 +1919,8 @@ void fetch_path (char *name, char *out, int size)
     int size2 = size;
 
     strcpy (out, start_path_data);
+    if (!name)
+       return;
     if (!strcmp (name, "FloppyPath"))
        strcat (out, "..\\shared\\adf\\");
     if (!strcmp (name, "hdfPath"))
index 7211a704b5ebac6515a42ddec80dcb5089841a64..c554bb01761baaf44d06f6386346bcda6a1c5203 100755 (executable)
@@ -15,9 +15,9 @@
 #define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
 #define GETBDD(x) ((x) % 100)
 
-#define WINUAEBETA 3
+#define WINUAEBETA 4
 #define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2007, 1, 27)
+#define WINUAEDATE MAKEBD(2007, 1, 28)
 
 #define IHF_WINDOWHIDDEN 6
 #define NORMAL_WINDOW_STYLE (WS_VISIBLE | WS_BORDER | WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU)
index 76827ba5b820229aefdfcbe5fa5649ac577bb1d0..2c7ecbd0c53b4cbbe4f834e51d70b11e05402d06 100755 (executable)
@@ -86,8 +86,7 @@ static int get_volume_name( struct uaedev_mount_info *mtinf, char *volumepath, c
     return result;
 }
 
-/* New function to actually handle add_filesys_unit() calls at start-up, as well as mount-all drives flag */
-void filesys_init( void )
+static void filesys_addexternals(void)
 {
     int drive, drivetype;
     UINT errormode = SetErrorMode( SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX );
index a0b9491d9430dd61b4afc5b811f7d85b01ac51f2..b01a21e7bc5fc105bd29593f59913b3ed83d19e9 100755 (executable)
@@ -2150,13 +2150,13 @@ static BOOL doInit (void)
            goto oops;
        flags = DirectDraw_GetPixelFormatFlags();
        DirectDraw_SurfaceUnlock();
-       if (flags  & (DDPF_RGB | DDPF_PALETTEINDEXED8 | DDPF_RGBTOYUV )) {
-           write_log( "%s mode (bits: %d, pixbytes: %d)\n", currentmode->flags & DM_DX_FULLSCREEN ? "Full screen" : "Window",
-                  DirectDraw_GetSurfaceBitCount(), currentmode->current_depth >> 3 );
+       if (flags  & (DDPF_RGB | DDPF_PALETTEINDEXED8 | DDPF_RGBTOYUV)) {
+           write_log("%s mode (bits: %d, pixbytes: %d)\n", currentmode->flags & DM_DX_FULLSCREEN ? "Full screen" : "Window",
+                  DirectDraw_GetSurfaceBitCount(), currentmode->current_depth >> 3);
        } else {
            char szMessage[MAX_DPATH];
            WIN32GUI_LoadUIString (IDS_UNSUPPORTEDPIXELFORMAT, szMessage, MAX_DPATH);
-           gui_message( szMessage);
+           gui_message(szMessage);
            goto oops;
        }
     } else if (!(currentmode->flags & DM_SWSCALE)) {
index 8d834b153a4772e94e5f68536cbae60fa4c12a7d..3b20ee9dc4933360c2358851767b1a9f93c06f05 100755 (executable)
@@ -50,6 +50,7 @@
 #include "zfile.h"
 #include "parallel.h"
 #include "audio.h"
+#include "arcadia.h"
 
 #include "dxwrap.h"
 #include "win32.h"
@@ -444,17 +445,29 @@ static struct romdata *scan_single_rom_2 (struct zfile *f)
 
 static struct romdata *scan_single_rom (char *path)
 {
-    struct zfile *z = zfile_fopen (path, "rb");
+    struct zfile *z;
+    char tmp[MAX_DPATH];
+    struct romdata *rd;
+
+    strcpy (tmp, path);
+    rd = scan_arcadia_rom (tmp, 0);
+    if (rd)
+        return rd;
+    z = zfile_fopen (path, "rb");
     if (!z)
        return 0;
     return scan_single_rom_2 (z);
 }
 
-static void addrom (HKEY fkey, struct romdata *rd, char *name)
+static int addrom (HKEY fkey, struct romdata *rd, char *name)
 {
     char tmp[MAX_DPATH];
     sprintf (tmp, "ROM%02d", rd->id);
-    RegSetValueEx (fkey, tmp, 0, REG_SZ, (CONST BYTE *)name, strlen (name) + 1);
+    if (RegQueryValueEx (fkey, tmp, 0, NULL, NULL, NULL) == ERROR_SUCCESS)
+       return 0;
+    if (RegSetValueEx (fkey, tmp, 0, REG_SZ, (CONST BYTE *)name, strlen (name) + 1) != ERROR_SUCCESS)
+       return 0;
+    return 1;
 }
 
 static int scan_rom_2 (struct zfile *f, struct romscandata *rsd)
@@ -471,13 +484,19 @@ static int scan_rom (char *path, HKEY fkey)
 {
     struct romscandata rsd = { fkey, 0 };
     struct romdata *rd;
+    int cnt = 0;
 
-    rd = getarcadiarombyname (path);
-    if (rd) {
-       addrom (fkey, rd, path);
-       return 1;
+    for (;;) {
+       char tmp[MAX_DPATH];
+       strcpy (tmp, path);
+       rd = scan_arcadia_rom (tmp, cnt++);
+       if (rd) {
+           if (!addrom (fkey, rd, tmp))
+               return 1;
+           continue;
+       }
+       break;
     }
-
     zfile_zopen (path, scan_rom_2, &rsd);
     return rsd.got;
 }
@@ -1919,7 +1938,7 @@ void InitializeListView (HWND hDlg)
 
            type = get_filesys_unitconfig (&workprefs, i, &mi);
            if (type < 0) {
-               type = uci->volname[0] ? FILESYS_VIRTUAL : FILESYS_HARDFILE;
+               type = uci->ishdf ? FILESYS_HARDFILE : FILESYS_VIRTUAL;
                nosize = 1;
            }
 
@@ -1953,7 +1972,7 @@ void InitializeListView (HWND hDlg)
                WIN32GUI_LoadUIString (IDS_YES, readwrite_str, sizeof (readwrite_str));
 
            lvstruct.mask     = LVIF_TEXT | LVIF_PARAM;
-           lvstruct.pszText  = mi.ismounted ? "*" : " ";
+           lvstruct.pszText  = nosize ? "X" : (mi.ismounted ? "*" : " ");
            lvstruct.lParam   = 0;
            lvstruct.iItem    = i;
            lvstruct.iSubItem = 0;
@@ -4170,7 +4189,7 @@ static void values_from_chipsetdlg2 (HWND hDlg, UINT msg, WPARAM wParam, LPARAM
     workprefs.cs_cd32nvram = IsDlgButtonChecked (hDlg, IDC_CS_CD32NVRAM);
     workprefs.cs_cdtvcd = IsDlgButtonChecked (hDlg, IDC_CS_CDTVCD);
     workprefs.cs_cdtvram = IsDlgButtonChecked (hDlg, IDC_CS_CDTVRAM);
-    workprefs.cs_cdtvcard = IsDlgButtonChecked (hDlg, IDC_CS_CDTVRAMEXP) ? 512 : 0;
+    workprefs.cs_cdtvcard = IsDlgButtonChecked (hDlg, IDC_CS_CDTVRAMEXP) ? 64 : 0;
     workprefs.cs_a1000ram = IsDlgButtonChecked (hDlg, IDC_CS_A1000RAM);
     workprefs.cs_ramseyrev = IsDlgButtonChecked (hDlg, IDC_CS_RAMSEY) ? 0x0f : -1;
     workprefs.cs_fatgaryrev = IsDlgButtonChecked (hDlg, IDC_CS_FATGARY) ? 0x00 : -1;
@@ -4540,8 +4559,8 @@ static void values_to_kickstartdlg (HWND hDlg)
            KEY_READ | KEY_WRITE, NULL, &fkey, NULL);
        load_keyring(&workprefs, NULL);
        addromfiles (fkey, hDlg, IDC_ROMFILE, workprefs.romfile, ROMTYPE_KICK | ROMTYPE_KICKCD32);
-       addromfiles (fkey, hDlg, IDC_ROMFILE2, workprefs.romextfile, ROMTYPE_EXTCD32 | ROMTYPE_EXTCDTV);
-       addromfiles (fkey, hDlg, IDC_CARTFILE, workprefs.cartfile, ROMTYPE_AR | ROMTYPE_ARCADIA);
+       addromfiles (fkey, hDlg, IDC_ROMFILE2, workprefs.romextfile, ROMTYPE_EXTCD32 | ROMTYPE_EXTCDTV | ROMTYPE_ARCADIABIOS);
+       addromfiles (fkey, hDlg, IDC_CARTFILE, workprefs.cartfile, ROMTYPE_AR | ROMTYPE_ARCADIAGAME);
        if (fkey)
            RegCloseKey (fkey);
     }
@@ -6118,6 +6137,8 @@ static void harddisk_edit (HWND hDlg)
     uci = &workprefs.mountconfig[entry];
 
     type = get_filesys_unitconfig (&workprefs, entry, &mi);
+    if (type < 0)
+       type = uci->ishdf ? FILESYS_HARDFILE : FILESYS_VIRTUAL;
 
     if(type == FILESYS_HARDFILE || type == FILESYS_HARDFILE_RDB)
     {
@@ -6654,7 +6675,6 @@ static INT_PTR CALLBACK FloppyDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LPARA
        SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft35dd);
        SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft35hd);
        SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft525sd);
-       SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_ADDSTRING, 0, (LPARAM)ft35ddescom);
        SendDlgItemMessage (hDlg, IDC_FLOPPYTYPE, CB_SETCURSEL, 0, 0);
        for (i = 0; i < 4; i++) {
            int f_type = floppybuttons[i][3];
index d02498ec635617dc9e533c1c5f5635e38d55a09f..c6582c3e3125998e3bf6979233632e51ef226389 100755 (executable)
@@ -1,4 +1,16 @@
 
+Beta 4:
+
+- separate Arcadia bios and game rom selection
+  (rom rescan required) Idea and original patch by Karsten Bock
+- "Add PC drives at startup"/"Include network drives" fixed
+- cd32/cdtv/arcadia flashfile set to <datapath>\<mode>.nvr
+  in quickstart modes
+- CDTV 64kb sram card quickstart mode added, saved to flashfile with
+  CDTV internal sram (tested with Sim City CDTV)
+- harddisk panel fixes and updates. Non-existing hardfiles and
+  directories are marked with "X".
+
 Beta 3:
 
 - remove harddrives loaded from default.uae in quickstart-mode