From: Toni Wilen Date: Sun, 28 Jan 2007 19:18:39 +0000 (+0200) Subject: imported winuaesrc1400b4.zip X-Git-Tag: 2100~247 X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=2d38f7f8a06a8a26639ad86dcbcbbe61a2043cb0;p=francis%2Fwinuae.git imported winuaesrc1400b4.zip --- diff --git a/arcadia.c b/arcadia.c index b1095453..41829b31 100755 --- a/arcadia.c +++ b/arcadia.c @@ -3,7 +3,8 @@ * * Arcadia emulation * - * Copyright 2005 Toni Wilen + * Copyright 2005-2007 Toni Wilen + * * */ @@ -36,26 +37,35 @@ * */ -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 8ce71f60..8633c2fe 100755 --- 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); } diff --git a/cfgfile.c b/cfgfile.c index fc7ca362..1196ff08 100755 --- 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 27f75a17..2dde7b5e 100755 --- 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; diff --git a/drawing.c b/drawing.c index aa4995cc..e6f4559b 100755 --- 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) { diff --git a/filesys.c b/filesys.c index cfd6cbdb..3fe1d4e4 100755 --- 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(); } diff --git a/include/arcadia.h b/include/arcadia.h index ed455927..73697f33 100755 --- a/include/arcadia.h +++ b/include/arcadia.h @@ -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 diff --git a/include/cdtv.h b/include/cdtv.h index 7ddce6ba..863e6eb0 100755 --- a/include/cdtv.h +++ b/include/cdtv.h @@ -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 diff --git a/include/filesys.h b/include/filesys.h index fa082aa3..90e300b6 100755 --- a/include/filesys.h +++ b/include/filesys.h @@ -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); diff --git a/include/memory.h b/include/memory.h index 801ec68e..9bc3c9ca 100755 --- a/include/memory.h +++ b/include/memory.h @@ -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*); diff --git a/include/options.h b/include/options.h index 0ffcc388..f7579338 100755 --- a/include/options.h +++ b/include/options.h @@ -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]; diff --git a/include/uae.h b/include/uae.h index 9f491936..d829ea15 100755 --- a/include/uae.h +++ b/include/uae.h @@ -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 diff --git a/inputdevice.c b/inputdevice.c index 6e6a2db4..668589a8 100755 --- a/inputdevice.c +++ b/inputdevice.c @@ -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 5d41543d..cc8fa253 100755 --- 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; diff --git a/memory.c b/memory.c index cdec57db..e206833e 100755 --- 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; diff --git a/od-win32/keyboard_win32.c b/od-win32/keyboard_win32.c index 0788dc81..9ea02953 100755 --- a/od-win32/keyboard_win32.c +++ b/od-win32/keyboard_win32.c @@ -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) { diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index b3362ea3..bd43f452 100755 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -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 diff --git a/od-win32/win32.c b/od-win32/win32.c index e21dd73a..0d4a82f6 100755 --- a/od-win32/win32.c +++ b/od-win32/win32.c @@ -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")) diff --git a/od-win32/win32.h b/od-win32/win32.h index 7211a704..c554bb01 100755 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -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) diff --git a/od-win32/win32_filesys.c b/od-win32/win32_filesys.c index 76827ba5..2c7ecbd0 100755 --- a/od-win32/win32_filesys.c +++ b/od-win32/win32_filesys.c @@ -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 ); diff --git a/od-win32/win32gfx.c b/od-win32/win32gfx.c index a0b9491d..b01a21e7 100755 --- a/od-win32/win32gfx.c +++ b/od-win32/win32gfx.c @@ -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)) { diff --git a/od-win32/win32gui.c b/od-win32/win32gui.c index 8d834b15..3b20ee9d 100755 --- a/od-win32/win32gui.c +++ b/od-win32/win32gui.c @@ -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]; diff --git a/od-win32/winuaechangelog.txt b/od-win32/winuaechangelog.txt index d02498ec..c6582c3e 100755 --- a/od-win32/winuaechangelog.txt +++ b/od-win32/winuaechangelog.txt @@ -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 \.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