*
* 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;
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;
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;
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;
}
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;
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;
}
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)
addr &= arb_mask;
return arbmemory[addr];
}
-
static void REGPARAM2 arb_lput (uaecptr addr, uae_u32 l)
{
uae_u32 *m;
nvwrite++;
}
}
-
static void REGPARAM2 arb_wput (uaecptr addr, uae_u32 w)
{
uae_u16 *m;
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;
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)
{
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;
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;
+}
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)
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;
}
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;
}
out[10] = (msflsn ? trackposmsf : trackposlsn) >> 8;
out[11] = (msflsn ? trackposmsf : trackposlsn) >> 0;
out[12] = 0;
+
return 13;
}
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)
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)
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)
/* 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)
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) {
}
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);
}
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);
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 : "");
}
#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");
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;
break;
case ROMTYPE_EXTCD32:
case ROMTYPE_EXTCDTV:
+ case ROMTYPE_ARCADIABIOS:
strcpy (p->romextfile, path);
break;
}
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;
}
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;
}
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;
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);
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 {
parallel_direct_write_data (val, ciaadrb);
cia_parallelack ();
#ifdef ARCADIA
- } else if (arcadia_rom) {
+ } else if (arcadia_bios) {
arcadia_parport (1, ciaaprb, ciaadrb);
#endif
}
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;
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];
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++;
static void pfield_do_linetoscr (int start, int stop)
{
+ xlinecheck(start, stop);
#ifdef AGA
if (currprefs.chipset_mask & CSMASK_AGA) {
if (res_shift == 0)
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;
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);
}
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) {
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;
}
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)
return 1;
}
+static void filesys_addexternals(void);
static void initialize_mountinfo(void)
{
int i;
if (idx >= 0)
uci->configoffset = idx;
}
+ filesys_addexternals();
}
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
uae_u8 cdtv_battram_read (int addr);
extern void cdtv_loadcardmem(uae_u8*, int);
+extern void cdtv_savecardmem(uae_u8*, int);
#endif
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);
#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;
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*);
char devname[MAX_DPATH];
char volname[MAX_DPATH];
char rootdir[MAX_DPATH];
+ int ishdf;
int readonly;
int bootpri;
char filesys[MAX_DPATH];
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
if (ievent_alive > 0)
ievent_alive--;
#ifdef ARCADIA
- if (arcadia_rom)
+ if (arcadia_bios)
arcadia_vsync ();
#endif
mouseedge();
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;
{ "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 }
{
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) {
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;
#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;
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);
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
xfree (a1000_bootrom);
if (chipmemory)
mapped_free (chipmemory);
- if (cardmemory)
+ if (cardmemory) {
+ cdtv_savecardmem (cardmemory, allocated_cardmem);
mapped_free (cardmemory);
+ }
bogomemory = 0;
kickmemory = 0;
static int handlearcadia (int scancode, int state)
{
int e = 0;
- if (!arcadia_rom)
+ if (!arcadia_bios)
return 0;
switch (scancode)
{
#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
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
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
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
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
CTEXT "x",IDC_PROGRESSBAR_TEXT,23,5,187,10,SS_CENTERIMAGE | WS_TABSTOP
END
+
/////////////////////////////////////////////////////////////////////////////
//
// Icon
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
/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// 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
/////////////////////////////////////////////////////////////////////////////
//
-
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
{
fetch_path ("ScreenshotPath", out, size);
}
+void fetch_datapath (char *out, int size)
+{
+ fetch_path (NULL, out, size);
+}
static void strip_slashes (char *p)
{
int size2 = size;
strcpy (out, start_path_data);
+ if (!name)
+ return;
if (!strcmp (name, "FloppyPath"))
strcat (out, "..\\shared\\adf\\");
if (!strcmp (name, "hdfPath"))
#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)
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 );
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)) {
#include "zfile.h"
#include "parallel.h"
#include "audio.h"
+#include "arcadia.h"
#include "dxwrap.h"
#include "win32.h"
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)
{
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;
}
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;
}
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;
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;
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);
}
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)
{
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];
+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