From 385d020ac6430ee6f31f98f3216cf55fae147de7 Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Sun, 31 Jan 2016 18:42:33 +0200 Subject: [PATCH] 3300b3 --- a2091.cpp | 9 +- cfgfile.cpp | 179 +++++----- filesys.asm | 607 +++++++++++++++++++++++++++++++- include/inputdevice.h | 5 +- include/options.h | 18 +- include/scsi.h | 4 +- include/xwin.h | 2 - jit/compemu.h | 2 - main.cpp | 12 +- memory.cpp | 7 +- od-win32/blkdev_win32_ioctl.cpp | 1 + od-win32/mman.cpp | 8 +- od-win32/resources/resource.h | 6 +- od-win32/resources/winuae.rc | 47 +-- od-win32/rp.cpp | 6 +- od-win32/sysconfig.h | 2 + od-win32/win32.h | 4 +- od-win32/win32gui.cpp | 59 +++- scsi.cpp | 28 +- 19 files changed, 823 insertions(+), 183 deletions(-) diff --git a/a2091.cpp b/a2091.cpp index e0429fbd..15ca1746 100644 --- a/a2091.cpp +++ b/a2091.cpp @@ -1557,13 +1557,12 @@ uae_u8 wdscsi_get (struct wd_chip_state *wd, struct wd_state *wds) static void xt_default_geometry(struct wd_state *wds) { - wds->cdmac.xt_cyls = wds->wc.scsi->hfd->cyls > 1023 ? 1023 : wds->wc.scsi->hfd->cyls; - wds->cdmac.xt_heads = wds->wc.scsi->hfd->heads > 31 ? 31 : wds->wc.scsi->hfd->heads; - wds->cdmac.xt_sectors = wds->wc.scsi->hfd->secspertrack; + wds->cdmac.xt_cyls = wds->wc.scsi->hdhfd->cyls > 1023 ? 1023 : wds->wc.scsi->hdhfd->cyls; + wds->cdmac.xt_heads = wds->wc.scsi->hdhfd->heads > 31 ? 31 : wds->wc.scsi->hdhfd->heads; + wds->cdmac.xt_sectors = wds->wc.scsi->hdhfd->secspertrack; write_log(_T("XT Default CHS %d %d %d\n"), wds->cdmac.xt_cyls, wds->cdmac.xt_heads, wds->cdmac.xt_sectors); } - static void xt_set_status(struct wd_state *wds, uae_u8 state) { wds->cdmac.xt_status = state; @@ -1677,7 +1676,7 @@ static uae_u8 read_xt_reg(struct wd_state *wds, int reg) break; case XD_JUMPER: // 20M: 2 40M: 0, xt.device checks it. - v = wds->wc.scsi->hfd->size >= 41615 * 2 * 512 ? 0 : 2; + v = wds->wc.scsi->hdhfd->size >= 41615 * 2 * 512 ? 0 : 2; break; case XD_RESERVED: break; diff --git a/cfgfile.cpp b/cfgfile.cpp index 28cf70d4..0bae300c 100644 --- a/cfgfile.cpp +++ b/cfgfile.cpp @@ -272,6 +272,14 @@ static const TCHAR *uaebootrom[] = { _T("full"), NULL }; +static const TCHAR *uaeboard[] = { + _T("disabled"), + _T("min"), + _T("full"), + _T("full+indirect"), + NULL +}; + static const TCHAR *serialcrlf[] = { _T("disabled"), _T("crlf_cr"), @@ -306,6 +314,7 @@ static const TCHAR *obsolete[] = { _T("pcibridge_rom_options"), _T("cpuboard_ext_rom_file"), + _T("uaeboard_mode"), _T("comp_oldsegv"), _T("comp_midopt"), @@ -1301,7 +1310,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_dwrite_path (f, &p->path_rom, _T("picassoiv_rom_file"), p->picassoivromfile); cfgfile_write_bool (f, _T("kickshifter"), p->kickshifter); - cfgfile_write_bool (f, _T("ks_write_enabled"), p->rom_readwrite); + cfgfile_dwrite_bool (f, _T("ks_write_enabled"), p->rom_readwrite); cfgfile_write (f, _T("floppy_volume"), _T("%d"), p->dfxclickvolume_disk[0]); p->nr_floppies = 4; @@ -1442,13 +1451,13 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) _stprintf (tmp1, _T("joyport%dmode"), i); cfgfile_write (f, tmp1, joyportmodes[jp->mode]); } - if (jp->name[0]) { + if (jp->idc.name[0]) { _stprintf (tmp1, _T("joyportfriendlyname%d"), i); - cfgfile_write (f, tmp1, jp->name); + cfgfile_write (f, tmp1, jp->idc.name); } - if (jp->configname[0]) { + if (jp->idc.configname[0]) { _stprintf (tmp1, _T("joyportname%d"), i); - cfgfile_write (f, tmp1, jp->configname); + cfgfile_write (f, tmp1, jp->idc.configname); } if (jp->nokeyboardoverride) { _stprintf (tmp1, _T("joyport%dkeyboardoverride"), i); @@ -1513,6 +1522,7 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write_bool (f, _T("synchronize_clock"), p->tod_hack); cfgfile_write (f, _T("maprom"), _T("0x%x"), p->maprom); cfgfile_dwrite_str (f, _T("boot_rom_uae"), uaebootrom[p->boot_rom]); + cfgfile_dwrite_str(f, _T("uaeboard"), uaeboard[p->uaeboard]); cfgfile_dwrite_str (f, _T("parallel_matrix_emulation"), epsonprinter[p->parallel_matrix_emulation]); cfgfile_write_bool (f, _T("parallel_postscript_emulation"), p->parallel_postscript_emulation); cfgfile_write_bool (f, _T("parallel_postscript_detection"), p->parallel_postscript_detection); @@ -1566,7 +1576,8 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write_str (f, _T("gfx_center_horizontal"), centermode1[p->gfx_xcenter]); cfgfile_write_str (f, _T("gfx_center_vertical"), centermode1[p->gfx_ycenter]); cfgfile_write_str (f, _T("gfx_colour_mode"), colormode1[p->color_mode]); - cfgfile_write_bool (f, _T("gfx_blacker_than_black"), p->gfx_blackerthanblack); + cfgfile_write_bool(f, _T("gfx_blacker_than_black"), p->gfx_blackerthanblack); + cfgfile_dwrite_bool(f, _T("gfx_atari_palette_fix"), p->gfx_threebitcolors); cfgfile_dwrite_bool (f, _T("gfx_black_frame_insertion"), p->lightboost_strobo); cfgfile_write_str (f, _T("gfx_api"), filterapi[p->gfx_api]); cfgfile_dwrite (f, _T("gfx_horizontal_tweak"), _T("%d"), p->gfx_extrawidth); @@ -1756,36 +1767,37 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_write_str (f, _T("collision_level"), collmode[p->collision_level]); cfgfile_write_str(f, _T("chipset_compatible"), cscompa[p->cs_compatible]); - cfgfile_dwrite_str (f, _T("ciaatod"), ciaatodmode[p->cs_ciaatod]); - cfgfile_dwrite_str (f, _T("rtc"), rtctype[p->cs_rtc]); + cfgfile_dwrite_str(f, _T("ciaatod"), ciaatodmode[p->cs_ciaatod]); + cfgfile_dwrite_str(f, _T("rtc"), rtctype[p->cs_rtc]); //cfgfile_dwrite (f, _T("chipset_rtc_adjust"), _T("%d"), p->cs_rtc_adjust); - cfgfile_dwrite_bool (f, _T("ksmirror_e0"), p->cs_ksmirror_e0); - cfgfile_dwrite_bool (f, _T("ksmirror_a8"), p->cs_ksmirror_a8); - cfgfile_dwrite_bool (f, _T("cd32cd"), p->cs_cd32cd); - cfgfile_dwrite_bool (f, _T("cd32c2p"), p->cs_cd32c2p); + cfgfile_dwrite_bool(f, _T("ksmirror_e0"), p->cs_ksmirror_e0); + cfgfile_dwrite_bool(f, _T("ksmirror_a8"), p->cs_ksmirror_a8); + cfgfile_dwrite_bool(f, _T("cd32cd"), p->cs_cd32cd); + cfgfile_dwrite_bool(f, _T("cd32c2p"), p->cs_cd32c2p); cfgfile_dwrite_bool(f, _T("cd32nvram"), p->cs_cd32nvram); - cfgfile_dwrite (f, _T("cd32nvram_size"), _T("%d"), p->cs_cd32nvram_size / 1024); + cfgfile_dwrite(f, _T("cd32nvram_size"), _T("%d"), p->cs_cd32nvram_size / 1024); cfgfile_dwrite_bool(f, _T("cd32fmv"), p->cs_cd32fmv); cfgfile_dwrite_bool(f, _T("cdtvcd"), p->cs_cdtvcd); cfgfile_dwrite_bool(f, _T("cdtv-cr"), p->cs_cdtvcr); - cfgfile_dwrite_bool (f, _T("cdtvram"), p->cs_cdtvram); - cfgfile_dwrite (f, _T("cdtvramcard"), _T("%d"), p->cs_cdtvcard); - cfgfile_dwrite_str (f, _T("ide"), p->cs_ide == IDE_A600A1200 ? _T("a600/a1200") : (p->cs_ide == IDE_A4000 ? _T("a4000") : _T("none"))); - cfgfile_dwrite_bool (f, _T("a1000ram"), p->cs_a1000ram); - cfgfile_dwrite (f, _T("fatgary"), _T("%d"), p->cs_fatgaryrev); - cfgfile_dwrite (f, _T("ramsey"), _T("%d"), p->cs_ramseyrev); - cfgfile_dwrite_bool (f, _T("pcmcia"), p->cs_pcmcia); - cfgfile_dwrite_bool (f, _T("scsi_cdtv"), p->cs_cdtvscsi); - cfgfile_dwrite_bool (f, _T("scsi_a3000"), p->cs_mbdmac == 1); - cfgfile_dwrite_bool (f, _T("scsi_a4000t"), p->cs_mbdmac == 2); - cfgfile_dwrite_bool (f, _T("bogomem_fast"), p->cs_slowmemisfast); - cfgfile_dwrite_bool (f, _T("resetwarning"), p->cs_resetwarning); - cfgfile_dwrite_bool (f, _T("denise_noehb"), p->cs_denisenoehb); - cfgfile_dwrite_bool (f, _T("agnus_bltbusybug"), p->cs_agnusbltbusybug); - cfgfile_dwrite_bool (f, _T("ics_agnus"), p->cs_dipagnus); - cfgfile_dwrite_bool (f, _T("cia_todbug"), p->cs_ciatodbug); - cfgfile_dwrite_bool (f, _T("z3_autoconfig"), p->cs_z3autoconfig); - cfgfile_dwrite_bool (f, _T("1mchipjumper"), p->cs_1mchipjumper); + cfgfile_dwrite_bool(f, _T("cdtvram"), p->cs_cdtvram); + cfgfile_dwrite(f, _T("cdtvramcard"), _T("%d"), p->cs_cdtvcard); + cfgfile_dwrite_str(f, _T("ide"), p->cs_ide == IDE_A600A1200 ? _T("a600/a1200") : (p->cs_ide == IDE_A4000 ? _T("a4000") : _T("none"))); + cfgfile_dwrite_bool(f, _T("a1000ram"), p->cs_a1000ram); + cfgfile_dwrite(f, _T("fatgary"), _T("%d"), p->cs_fatgaryrev); + cfgfile_dwrite(f, _T("ramsey"), _T("%d"), p->cs_ramseyrev); + cfgfile_dwrite_bool(f, _T("pcmcia"), p->cs_pcmcia); + cfgfile_dwrite_bool(f, _T("scsi_cdtv"), p->cs_cdtvscsi); + cfgfile_dwrite_bool(f, _T("scsi_a3000"), p->cs_mbdmac == 1); + cfgfile_dwrite_bool(f, _T("scsi_a4000t"), p->cs_mbdmac == 2); + cfgfile_dwrite_bool(f, _T("bogomem_fast"), p->cs_slowmemisfast); + cfgfile_dwrite_bool(f, _T("resetwarning"), p->cs_resetwarning); + cfgfile_dwrite_bool(f, _T("denise_noehb"), p->cs_denisenoehb); + cfgfile_dwrite_bool(f, _T("agnus_bltbusybug"), p->cs_agnusbltbusybug); + cfgfile_dwrite_bool(f, _T("ics_agnus"), p->cs_dipagnus); + cfgfile_dwrite_bool(f, _T("cia_todbug"), p->cs_ciatodbug); + cfgfile_dwrite_bool(f, _T("z3_autoconfig"), p->cs_z3autoconfig); + cfgfile_dwrite_bool(f, _T("1mchipjumper"), p->cs_1mchipjumper); + cfgfile_dwrite_bool(f, _T("color_burst"), p->cs_color_burst); cfgfile_dwrite (f, _T("chipset_hacks"), _T("0x%x"), p->cs_hacks); cfgfile_dwrite_str (f, _T("z3mapping"), z3mapping[p->z3_mapping_mode]); @@ -1930,8 +1942,6 @@ void cfgfile_save_options (struct zfile *f, struct uae_prefs *p, int type) cfgfile_dwrite_str (f, _T("scsidev_mode"), uaescsidevmodes[p->uaescsidevmode]); #endif - cfgfile_dwrite(f, _T("uaeboard_mode"), _T("%d"), p->uaeboard); - write_inputdevice_config (p, f); } @@ -2589,6 +2599,7 @@ static int cfgfile_parse_host (struct uae_prefs *p, TCHAR *option, TCHAR *value) || cfgfile_yesno(option, value, _T("sound_stereo_swap_ahi"), &p->sound_stereo_swap_ahi) || cfgfile_yesno(option, value, _T("log_illegal_mem"), &p->illegal_mem) || cfgfile_yesno(option, value, _T("filesys_no_fsdb"), &p->filesys_no_uaefsdb) + || cfgfile_yesno(option, value, _T("gfx_atari_palette_fix"), &p->gfx_threebitcolors) || cfgfile_yesno(option, value, _T("gfx_blacker_than_black"), &p->gfx_blackerthanblack) || cfgfile_yesno(option, value, _T("gfx_black_frame_insertion"), &p->lightboost_strobo) || cfgfile_yesno(option, value, _T("gfx_flickerfixer"), &p->gfx_scandoubler) @@ -4294,34 +4305,35 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH if (cfgfile_string(option, value, _T("ne2000_pci"), p->ne2000pciname, sizeof p->ne2000pciname / sizeof(TCHAR))) return 1; - if (cfgfile_yesno (option, value, _T("immediate_blits"), &p->immediate_blits) - || cfgfile_yesno (option, value, _T("fpu_no_unimplemented"), &p->fpu_no_unimplemented) - || cfgfile_yesno (option, value, _T("cpu_no_unimplemented"), &p->int_no_unimplemented) - || cfgfile_yesno (option, value, _T("cd32cd"), &p->cs_cd32cd) - || cfgfile_yesno (option, value, _T("cd32c2p"), &p->cs_cd32c2p) + if (cfgfile_yesno(option, value, _T("immediate_blits"), &p->immediate_blits) + || cfgfile_yesno(option, value, _T("fpu_no_unimplemented"), &p->fpu_no_unimplemented) + || cfgfile_yesno(option, value, _T("cpu_no_unimplemented"), &p->int_no_unimplemented) + || cfgfile_yesno(option, value, _T("cd32cd"), &p->cs_cd32cd) + || cfgfile_yesno(option, value, _T("cd32c2p"), &p->cs_cd32c2p) || cfgfile_yesno(option, value, _T("cd32nvram"), &p->cs_cd32nvram) || cfgfile_yesno(option, value, _T("cd32fmv"), &p->cs_cd32fmv) || cfgfile_yesno(option, value, _T("cdtvcd"), &p->cs_cdtvcd) || cfgfile_yesno(option, value, _T("cdtv-cr"), &p->cs_cdtvcr) - || cfgfile_yesno (option, value, _T("cdtvram"), &p->cs_cdtvram) - || cfgfile_yesno (option, value, _T("a1000ram"), &p->cs_a1000ram) - || cfgfile_yesno (option, value, _T("pcmcia"), &p->cs_pcmcia) - || cfgfile_yesno (option, value, _T("scsi_cdtv"), &p->cs_cdtvscsi) - || cfgfile_yesno (option, value, _T("cia_overlay"), &p->cs_ciaoverlay) - || cfgfile_yesno (option, value, _T("bogomem_fast"), &p->cs_slowmemisfast) - || cfgfile_yesno (option, value, _T("ksmirror_e0"), &p->cs_ksmirror_e0) - || cfgfile_yesno (option, value, _T("ksmirror_a8"), &p->cs_ksmirror_a8) - || cfgfile_yesno (option, value, _T("resetwarning"), &p->cs_resetwarning) - || cfgfile_yesno (option, value, _T("cia_todbug"), &p->cs_ciatodbug) - || cfgfile_yesno (option, value, _T("denise_noehb"), &p->cs_denisenoehb) - || cfgfile_yesno (option, value, _T("ics_agnus"), &p->cs_dipagnus) - || cfgfile_yesno (option, value, _T("z3_autoconfig"), &p->cs_z3autoconfig) - || cfgfile_yesno (option, value, _T("1mchipjumper"), &p->cs_1mchipjumper) - || cfgfile_yesno (option, value, _T("agnus_bltbusybug"), &p->cs_agnusbltbusybug) - || cfgfile_yesno (option, value, _T("fastmem_autoconfig"), &p->fastmem_autoconfig) - || cfgfile_yesno (option, value, _T("gfxcard_hardware_vblank"), &p->rtg_hardwareinterrupt) - || cfgfile_yesno (option, value, _T("gfxcard_hardware_sprite"), &p->rtg_hardwaresprite) - || cfgfile_yesno (option, value, _T("synchronize_clock"), &p->tod_hack) + || cfgfile_yesno(option, value, _T("cdtvram"), &p->cs_cdtvram) + || cfgfile_yesno(option, value, _T("a1000ram"), &p->cs_a1000ram) + || cfgfile_yesno(option, value, _T("pcmcia"), &p->cs_pcmcia) + || cfgfile_yesno(option, value, _T("scsi_cdtv"), &p->cs_cdtvscsi) + || cfgfile_yesno(option, value, _T("cia_overlay"), &p->cs_ciaoverlay) + || cfgfile_yesno(option, value, _T("bogomem_fast"), &p->cs_slowmemisfast) + || cfgfile_yesno(option, value, _T("ksmirror_e0"), &p->cs_ksmirror_e0) + || cfgfile_yesno(option, value, _T("ksmirror_a8"), &p->cs_ksmirror_a8) + || cfgfile_yesno(option, value, _T("resetwarning"), &p->cs_resetwarning) + || cfgfile_yesno(option, value, _T("cia_todbug"), &p->cs_ciatodbug) + || cfgfile_yesno(option, value, _T("denise_noehb"), &p->cs_denisenoehb) + || cfgfile_yesno(option, value, _T("ics_agnus"), &p->cs_dipagnus) + || cfgfile_yesno(option, value, _T("z3_autoconfig"), &p->cs_z3autoconfig) + || cfgfile_yesno(option, value, _T("color_burst"), &p->cs_color_burst) + || cfgfile_yesno(option, value, _T("1mchipjumper"), &p->cs_1mchipjumper) + || cfgfile_yesno(option, value, _T("agnus_bltbusybug"), &p->cs_agnusbltbusybug) + || cfgfile_yesno(option, value, _T("fastmem_autoconfig"), &p->fastmem_autoconfig) + || cfgfile_yesno(option, value, _T("gfxcard_hardware_vblank"), &p->rtg_hardwareinterrupt) + || cfgfile_yesno(option, value, _T("gfxcard_hardware_sprite"), &p->rtg_hardwaresprite) + || cfgfile_yesno(option, value, _T("synchronize_clock"), &p->tod_hack) || cfgfile_yesno (option, value, _T("kickshifter"), &p->kickshifter) || cfgfile_yesno (option, value, _T("ks_write_enabled"), &p->rom_readwrite) @@ -4397,7 +4409,6 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH || cfgfile_intval (option, value, _T("cpu_frequency"), &p->cpu_frequency, 1) || cfgfile_intval(option, value, _T("kickstart_ext_rom_file2addr"), &p->romextfile2addr, 1) || cfgfile_intval(option, value, _T("genlock_mix"), &p->genlock_mix, 1) - || cfgfile_intval(option, value, _T("uaeboard_mode"), &p->uaeboard, 1) || cfgfile_intval (option, value, _T("catweasel"), &p->catweasel, 1)) return 1; @@ -4417,7 +4428,8 @@ static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCH || cfgfile_strval (option, value, _T("floppy_auto_extended_adf"), &p->floppy_auto_ext2, autoext2, 0) || cfgfile_strval (option, value, _T("z3mapping"), &p->z3_mapping_mode, z3mapping, 0) || cfgfile_strval (option, value, _T("scsidev_mode"), &p->uaescsidevmode, uaescsidevmodes, 0) - || cfgfile_strval (option, value, _T("boot_rom_uae"), &p->boot_rom, uaebootrom, 0) + || cfgfile_strval(option, value, _T("boot_rom_uae"), &p->boot_rom, uaebootrom, 0) + || cfgfile_strval(option, value, _T("uaeboard"), &p->uaeboard, uaeboard, 0) || cfgfile_strval (option, value, _T("serial_translate"), &p->serial_crlf, serialcrlf, 0) || cfgfile_strboolval (option, value, _T("comp_flushmode"), &p->comp_hardflush, flushmode, 0)) return 1; @@ -5156,7 +5168,7 @@ int cfgfile_load (struct uae_prefs *p, const TCHAR *filename, int *type, int ign } end: recursive--; - fixup_prefs (p); + fixup_prefs (p, userconfig != 0); return v; } @@ -5873,16 +5885,16 @@ end: return err; } -uae_u32 cfgfile_uaelib_modify (uae_u32 index, uae_u32 parms, uae_u32 size, uae_u32 out, uae_u32 outsize) +uae_u32 cfgfile_uaelib_modify(TrapContext *ctx, uae_u32 index, uae_u32 parms, uae_u32 size, uae_u32 out, uae_u32 outsize) { uae_char *p, *parms_p = NULL, *parms_out = NULL; int i, ret; TCHAR *out_p = NULL, *parms_in = NULL; if (out) - put_byte (out, 0); + trap_put_byte(ctx, out, 0); if (size == 0) { - while (get_byte (parms + size) != 0) + while (trap_get_byte(ctx, parms + size) != 0) size++; } parms_p = xmalloc (uae_char, size + 1); @@ -5900,7 +5912,7 @@ uae_u32 cfgfile_uaelib_modify (uae_u32 index, uae_u32 parms, uae_u32 size, uae_u } p = parms_p; for (i = 0; i < size; i++) { - p[i] = get_byte (parms + i); + p[i] = trap_get_byte(ctx, parms + i); if (p[i] == 10 || p[i] == 13 || p[i] == 0) break; } @@ -5910,14 +5922,7 @@ uae_u32 cfgfile_uaelib_modify (uae_u32 index, uae_u32 parms, uae_u32 size, uae_u xfree (parms_in); if (out) { parms_out = ua (out_p); - p = parms_out; - for (i = 0; i < outsize - 1; i++) { - uae_u8 b = *p++; - put_byte (out + i, b); - put_byte (out + i + 1, 0); - if (!b) - break; - } + trap_put_string(ctx, parms_out, out, outsize - 1); } xfree (parms_out); end: @@ -5936,30 +5941,25 @@ static const TCHAR *cfgfile_read_config_value (const TCHAR *option) return NULL; } -uae_u32 cfgfile_uaelib (int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen) +uae_u32 cfgfile_uaelib(TrapContext *ctx, int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen) { - TCHAR tmp[CONFIG_BLEN]; - int i; + TCHAR *str; + uae_char tmpa[CONFIG_BLEN]; if (mode) return 0; - for (i = 0; i < sizeof (tmp) / sizeof (TCHAR); i++) { - tmp[i] = get_byte (name + i); - if (tmp[i] == 0) - break; - } - tmp[sizeof(tmp) / sizeof (TCHAR) - 1] = 0; - if (tmp[0] == 0) + trap_get_string(ctx, tmpa, name, sizeof tmpa); + str = au(tmpa); + if (str[0] == 0) { + xfree(str); return 0; - const TCHAR *value = cfgfile_read_config_value (tmp); + } + const TCHAR *value = cfgfile_read_config_value(str); + xfree(str); if (value) { - char *s = ua (value); - for (i = 0; i < maxlen; i++) { - put_byte (dst + i, s[i]); - if (s[i] == 0) - break; - } + char *s = ua(value); + trap_put_string(ctx, s, dst, maxlen); xfree (s); return dst; } @@ -6186,6 +6186,7 @@ void default_prefs (struct uae_prefs *p, int type) p->cs_slowmemisfast = 0; p->cs_resetwarning = 1; p->cs_ciatodbug = false; + p->cs_color_burst = false; for (int i = APMODE_NATIVE; i <= APMODE_RTG; i++) { struct gfx_filterdata *f = &p->gf[i]; diff --git a/filesys.asm b/filesys.asm index 1d13feed..2df92c3e 100644 --- a/filesys.asm +++ b/filesys.asm @@ -26,10 +26,35 @@ ; 2011.12.17 built-in CDFS support ; 2015.09.27 KS 1.2 boot hack supported ; 2015.09.28 KS 1.2 boot hack improved, 1.1 and older BCPL-only DOS support. +; 2016.01.14 'Indirect' boot ROM trap support. AllocMem = -198 FreeMem = -210 +TRAP_DATA_NUM = 4 + +TRAP_DATA = $4000 +TRAP_DATA_SIZE = $8000 +TRAP_DATA_SLOT_SIZE = 8192 +TRAP_DATA_SECOND = 80 +TRAP_DATA_TASKWAIT = (TRAP_DATA_SECOND-4) +TRAP_DATA_EXTRA = 144 + +TRAP_STATUS = $F000 +TRAP_STATUS_SLOT_SIZE = 8 +TRAP_STATUS_SECOND = 4 + +TRAP_STATUS_STATUS2 = 2 +TRAP_STATUS_STATUS = 3 + +TRAP_DATA_DATA = 4 + +RTAREA_SYSBASE = $3FFC + +RTAREA_TRAPTASK = $FFF4 +RTAREA_EXTERTASK = $FFF8 +RTAREA_INTREQ = $FFFC + ; don't forget filesys.c! */ PP_MAXSIZE = 4 * 96 PP_FSSIZE = 400 @@ -56,7 +81,7 @@ our_seglist: dc.l 0 ; 8 /* NextSeg */ start: bra.s startjmp - dc.w 9 ;0 12 + dc.w 11 ;0 12 startjmp: bra.w filesys_mainloop ;1 16 dc.l make_dev-start ;2 20 @@ -66,7 +91,8 @@ startjmp: dc.l setup_exter-start ;6 36 dc.l bcplwrapper-start ;7 40 dc.l clipboard_init-start ;8 44 - ;52 + dc.l hwtrap_install-start ;9 48 + dc.l hwtrap_entry-start ; 10 52 bootcode: lea.l doslibname(pc),a1 @@ -311,6 +337,8 @@ FSIN_chip_done bsr.w getrtbase jsr (a0) + + FSIN_tooold movem.l (sp)+,d0-d7/a0-a6 @@ -448,12 +476,133 @@ mountproc .out moveq #0,d0 rts -exter_data: +trap_task: + move.l 4.w,a6 + +trap_task_wait + move.l #$100,d0 + jsr -$13e(a6) ;Wait + +trap_task_check: + moveq #0,d7 + ; check if we have call lib/func request + move.l #TRAP_STATUS,d0 + bsr.w getrtbase + move.l a0,a1 + move.l #TRAP_DATA,d0 + bsr.w getrtbase + moveq #TRAP_DATA_NUM-1,d6 +.nexttrap + tst.b TRAP_STATUS_STATUS(a1) + beq.s .next + cmp.b #$fe,TRAP_STATUS_SECOND+TRAP_STATUS_STATUS(a1) + bne.s .next + addq.l #1,d7 + lea TRAP_DATA_SECOND(a0),a4 + lea TRAP_STATUS_SECOND(a1),a5 + movem.l d6/d7/a0/a1/a4/a5/a6,-(sp) + move.w (a5),d4 ;command + movem.l 4(a4),a0-a2 + movem.l 4(a4),d0-d2 + cmp.w #18,d4 + bne.s .notcalllib + bsr.w hw_call_lib + bra.s .calldone +.notcalllib + cmp.w #19,d4 + bne.s .calldone + bsr.w hw_call_func +.calldone + movem.l (sp)+,d6/d7/a0-a1/a4/a5/a6 + move.l d0,4(a4) + move.b #2,TRAP_STATUS_STATUS(a5) +.next + add.w #TRAP_DATA_SLOT_SIZE,a0 + add.w #TRAP_STATUS_SLOT_SIZE,a1 + dbf d6,.nexttrap + tst.l d7 + beq.w trap_task_wait + bra.w trap_task_check + +exter_task: + move.l 4.w,a6 + +exter_task_wait + move.l #$100,d0 + jsr -$13e(a6) ;Wait + + moveq #10,d7 +EXTT_loop + move.w #$FF50,d0 ; exter_int_helper + bsr.w getrtbase + move.l d7,d0 + jsr (a0) + tst.l d0 + beq.w exter_task_wait + addq.w #1,d7 + cmp.w #1,d0 + blt.w EXTT_loop + bgt.b EXTT_signal_reply + jsr -366(a6) ; PutMsg + bra.b EXTT_loop +EXTT_signal_reply: + cmp.w #2,d0 + bgt.b EXTT_reply + move.l d1,d0 + jsr -$144(a6) ; Signal + bra.b EXTT_loop +EXTT_reply: + cmp.w #3,d0 + bgt.b EXTT_cause + jsr -$17a(a6) ; ReplyMsg + bra.b EXTT_loop +EXTT_cause: + cmp.w #4,d0 + bgt.b EXTT_notificationhack + jsr -$b4(a6) ; Cause + bra.b EXTT_loop +EXTT_notificationhack: + cmp.w #5,d0 + bgt.b EXTT_loop + movem.l a0-a1,-(sp) + moveq #38,d0 + move.l #65536+1,d1 + jsr AllocMem(a6) + movem.l (sp)+,a0-a1 + move.l d0,a2 + move.b #8,8(a2) + move.l a0,14(a2) + move.w #38,18(a2) + move.l #NOTIFY_CLASS,20(a2) + move.w #NOTIFY_CODE,24(a2) + move.l a1,26(a2) + move.l 16(a1),a0 + move.l a2,a1 + jsr -366(a6) ; PutMsg + bra.w EXTT_loop + + +exter_server_new: + moveq #0,d0 + move.l (a1)+,a0 ;IO Base + tst.b (a0) + beq.s .nouaeint + move.l (a1)+,a6 ; SysBase + move.l (a1),a1 ; Task + move.l #$100,d0 ; SIGF_DOS + jsr -$144(a6) ; Signal + moveq #1,d0 +.nouaeint + tst.w d0 + rts + exter_server: movem.l a2,-(sp) + tst.b (a1) + beq.w exter_server_exit move.w #$FF50,d0 ; exter_int_helper bsr.w getrtbase - moveq.l #0,d0 + moveq #0,d0 jsr (a0) tst.l d0 beq.w exter_server_exit @@ -514,19 +663,30 @@ exter_server_exit: movem.l (sp)+,a2 rts + ; d0 = exter task, d1 = trap task heartbeatvblank: - movem.l d0-d1/a0-a2,-(sp) + movem.l d0-d3/a0-a2,-(sp) + move.l d0,d2 + move.l d1,d3 move.w #$FF38,d0 moveq #18,d1 bsr.w getrtbase + move.l d2,d0 + move.l d3,d2 jsr (a0) - move.l d0,a2 + move.l d0,a2 ; intreq - moveq #22,d0 + moveq #22+3*4,d0 move.l #65536+1,d1 jsr AllocMem(a6) move.l d0,a1 + + lea 22(a1),a0 + move.l a2,(a0) + move.l d2,4(a0) + move.l d3,8(a0) + move.l a0,14(a1) move.b #2,8(a1) ;NT_INTERRUPT move.b #-10,9(a1) ;priority @@ -534,35 +694,69 @@ heartbeatvblank: move.l a0,10(a1) lea kaint(pc),a0 move.l a0,18(a1) - move.l a2,14(a1) moveq #5,d0 ;INTB_VERTB jsr -$00a8(a6) - movem.l (sp)+,d0-d1/a0-a2 + movem.l (sp)+,d0-d3/a0-a2 rts kaint: - addq.l #1,(a1) + move.l (a1),a0 + addq.l #1,(a0) moveq #0,d0 rts setup_exter: - movem.l d0-d1/a0-a1,-(sp) + movem.l d0-d3/d7/a0-a2,-(sp) + move.l d0,d7 bsr.w residenthack - moveq.l #26,d0 + move.l #RTAREA_INTREQ,d0 + bsr.w getrtbase + move.l a0,a2 + + moveq #0,d2 + btst #0,d7 + beq.s .nofstask + lea fswtaskname(pc),a0 + lea exter_task(pc),a1 + moveq #20,d0 + bsr createtask + move.l d0,d2 +.nofstask + + moveq #0,d3 + btst #1,d7 + beq.s .notraptask + lea fstraptaskname(pc),a0 + lea trap_task(pc),a1 + moveq #25,d0 + bsr createtask + move.l d0,d3 +.notraptask + + moveq #26+4*4,d0 move.l #$10001,d1 jsr AllocMem(a6) move.l d0,a1 + + lea 26(a1),a0 + move.l a2,(a0)+ + move.l a6,(a0)+ + move.l d2,(a0)+ + move.l d3,(a0) + lea.l exter_name(pc),a0 move.l a0,10(a1) - lea.l exter_data(pc),a0 - move.l a0,14(a1) - lea.l exter_server(pc),a0 + lea 26(a1),a2 + move.l a2,14(a1) + lea.l exter_server_new(pc),a0 move.l a0,18(a1) move.w #$0214,8(a1) moveq.l #3,d0 jsr -168(a6) ; AddIntServer + move.l d2,d0 ; extertask + move.l d3,d1 ; traptask bsr.w heartbeatvblank move.w #$FF38,d0 @@ -573,7 +767,7 @@ setup_exter: beq.s .nomh bsr.w mousehack_init .nomh - movem.l (sp)+,d0-d1/a0-a1 + movem.l (sp)+,d0-d3/d7/a0-a2 rts addfs: ; a0 = first hunk, a1 = parmpacket @@ -1506,7 +1700,7 @@ nonnotif ; It's a dummy packet indicating that some queued command finished. move.w #$FF50,d0 ; exter_int_helper bsr.w getrtbase - moveq.l #1,d0 + moveq #1,d0 jsr (a0) FSML_check_queue_other: ; Go through the queue and reply all those that finished. @@ -2878,7 +3072,7 @@ adddosnodec ;wrap BCPL filesystem call to non-BCPL filesystem ;d1 = dospacket that BCPL entry point fetched - ;We need to put dospacket back in the pr_MsgPort. + ;We need to put dospacket back in pr_MsgPort. cnop 0,4 dc.l (bcplwrapper_end-bcplwrapper_start)/4+1 @@ -2924,6 +3118,379 @@ copymem: dc.l 2 bcplwrapper_end: +hwtrap_install: + movem.l a2/a6,-(sp) + move.l 4.w,a6 + move.l #RTAREA_INTREQ,d0 + bsr.w getrtbase + move.l a0,a2 + move.l a0,d0 + clr.w d0 + move.l d0,a0 + move.l a6,RTAREA_SYSBASE(a0) + moveq.l #26,d0 + move.l #$10001,d1 + jsr AllocMem(a6) + move.l d0,a1 + lea.l hwtrap_name(pc),a0 + move.l a0,10(a1) + move.l a2,14(a1) + lea.l hwtrap_interrupt(pc),a0 + move.l a0,18(a1) + move.w #$0270,8(a1) + moveq #13,d0 ;EXTER + jsr -168(a6) ; AddIntServer + movem.l (sp)+,a2/a6 + rts + +hwtrap_entry: + movem.l d0-d1/a0-a3,-(sp) +.retry + move.l #TRAP_STATUS,d0 + bsr.w getrtbase + move.l a0,a1 + move.l #TRAP_DATA,d0 + bsr.w getrtbase + moveq #TRAP_DATA_NUM-1,d0 +.nexttrap + tas.b TRAP_STATUS_STATUS(a1) + beq.s .foundfree + add.w #TRAP_DATA_SLOT_SIZE,a0 + add.w #TRAP_STATUS_SLOT_SIZE,a1 + dbf d0,.nexttrap + bra.s .retry +.foundfree + + ; clear secondary status + clr.b TRAP_STATUS_STATUS2(a1) + + ; store registers + movem.l d2-d7,TRAP_DATA_DATA+2*4(a0) + movem.l a2-a6,TRAP_DATA_DATA+8*4+2*4(a0) + move.l 0*4(sp),TRAP_DATA_DATA(a0) ;D0 + move.l 1*4(sp),TRAP_DATA_DATA+1*4(a0) ;D1 + move.l 2*4(sp),TRAP_DATA_DATA+8*4(a0) ;A0 + move.l 3*4(sp),TRAP_DATA_DATA+8*4+1*4(a0) ;A1 + + move.l a0,a2 ; data + move.l a1,a3 ; status + + clr.l TRAP_DATA_TASKWAIT(a2) + tst.b (a3) + beq.s .nowait + move.l 4.w,a6 + sub.l a1,a1 + jsr -$126(a6) ; FindTask + move.l d0,TRAP_DATA_TASKWAIT(a2) +.nowait + + ; trap number, this triggers the trap + move.w 6*4(sp),(a3) + +.waittrap + tst.b TRAP_STATUS_STATUS2(a3) + bne.s .triggered + tst.l TRAP_DATA_TASKWAIT(a2) + beq.s .waittrap + move.l #$100,d0 + jsr -$13e(a6) ; Wait + bra.s .waittrap +.triggered + move.b #1,TRAP_STATUS_STATUS2(a3) + + move.l a2,a0 + move.l a3,a1 + + ; restore registers + movem.l TRAP_DATA_DATA(a0),d0-d7 + movem.l TRAP_DATA_DATA+8*4+2*4(a0),a2-a6 + move.l TRAP_DATA_DATA+8*4(a0),-(sp) ;A0 + move.l TRAP_DATA_DATA+9*4(a0),-(sp) ;A1 + + clr.l TRAP_DATA_TASKWAIT(a0) + + ; free trap data entry + clr.b TRAP_STATUS_STATUS(a1) + + move.l (sp)+,a1 + move.l (sp)+,a0 + ; pop trap number and d0-d1/a0-a3 + lea 6*4+2(sp),sp + rts + +hwtrap_interrupt: + movem.l d2/d3/a2/a3,-(sp) + moveq #0,d3 + move.l a1,a2 + + tst.b 1(a2) + beq.s .notrapint + moveq #1,d3 +.checkagain + move.l a2,d0 + clr.w d0 + move.l d0,a0 + moveq #TRAP_DATA_NUM-1,d1 + move.l a0,a1 + move.l RTAREA_SYSBASE(a0),a6 + add.l #TRAP_DATA,a0 + add.l #TRAP_STATUS,a1 +.nexttrap + tst.b TRAP_STATUS_STATUS(a1) + beq.s .next + cmp.b #$ff,TRAP_STATUS_SECOND+TRAP_STATUS_STATUS(a1) + beq.s .foundactive +.next + add.w #TRAP_DATA_SLOT_SIZE,a0 + add.w #TRAP_STATUS_SLOT_SIZE,a1 + dbf d1,.nexttrap +.notrapint + + tst.b 2(a2) + beq.s .notrapackint + moveq #1,d3 + move.l a2,d0 + clr.w d0 + move.l d0,a2 + move.l d0,a3 + move.l RTAREA_SYSBASE(a2),a6 + add.l #TRAP_DATA,a2 + add.l #TRAP_STATUS,a3 + moveq #TRAP_DATA_NUM-1,d2 +.esn2 + move.l TRAP_DATA_TASKWAIT(a2),d0 + beq.s .esn1 + tst.b TRAP_STATUS_STATUS(a3) + beq.s .esn1 + tst.b TRAP_STATUS_STATUS2(a3) + bpl.s .esn1 + clr.l TRAP_DATA_TASKWAIT(a2) + move.l d0,a1 + move.l #$100,d0 + jsr -$144(a6) ; Signal +.esn1 + add.w #TRAP_DATA_SLOT_SIZE,a2 + add.w #TRAP_STATUS_SLOT_SIZE,a3 + dbf d2,.esn2 +.notrapackint + + move.l d3,d0 + movem.l (sp)+,d2/d3/a2/a3 + rts + +.foundactive + movem.l d1-d4/a1-a6,-(sp) + lea TRAP_DATA_SECOND(a0),a4 + lea TRAP_STATUS_SECOND(a1),a5 + move.w (a5),d4 ;command + add.w d4,d4 + lea trapjumps(pc),a3 + move.w 0(a3,d4.w),d1 + bne.s .intisok + move.l #RTAREA_TRAPTASK,d0 + bsr.w getrtbase + move.l (a0),d0 + beq.s .intisok + ; call func or lib, task needed + move.l d0,a1 + move.b #$fe,TRAP_STATUS_STATUS(a5) + move.l #$0100,d0 + jsr -$144(a6) ; Signal + bra.s .exitactive +.intisok + add.w d1,a3 + movem.l 4(a4),a0-a2 + movem.l 4(a4),d0-d2 + jsr (a3) + move.l d0,4(a4) + move.b #1,TRAP_STATUS_STATUS(a5) +.exitactive + movem.l (sp)+,d1-d4/a1-a6 + bra.w .checkagain + +trapjumps: + dc.w hw_multi-trapjumps; 0 + + dc.w hw_put_long-trapjumps ; 1 + dc.w hw_put_word-trapjumps ; 2 + dc.w hw_put_byte-trapjumps ; 3 + + dc.w hw_get_long-trapjumps ; 4 + dc.w hw_get_word-trapjumps ; 5 + dc.w hw_get_byte-trapjumps ; 6 + + dc.w hw_copy_bytes-trapjumps ; 7 + dc.w hw_copy_words-trapjumps ; 8 + dc.w hw_copy_longs-trapjumps ; 9 + + dc.w hw_copy_bytes-trapjumps ; 10 + dc.w hw_copy_words-trapjumps ; 11 + dc.w hw_copy_longs-trapjumps ; 12 + + dc.w hw_copy_string-trapjumps; 13 + dc.w hw_copy_string-trapjumps; 14 + + dc.w hw_set_longs-trapjumps ; 15 + dc.w hw_set_words-trapjumps ; 16 + dc.w hw_set_bytes-trapjumps ; 17 + + dc.w 0 ; 18 (call lib) + dc.w 0 ; 19 (call func) + + dc.w hw_op_nop-trapjumps ; 20 + + dc.w hw_get_bstr-trapjumps ; 21 + + +hw_put_long: + move.l d1,(a0) + rts +hw_put_word: + move.w d1,(a0) + rts +hw_put_byte: + move.b d1,(a0) + rts +hw_get_long: + move.l (a0),d0 + rts +hw_get_word: + moveq #0,d0 + move.w (a0),d0 + rts +hw_get_byte: + moveq #0,d0 + move.b (a0),d0 + rts +hw_copy_bytes: + ; a0 = src, a1 = dest, d2 = bytes + move.l d2,d0 + jsr -$270(a6) ; CopyMem + rts +hw_copy_words: + ; a0 = src, a1 = dest, d2 = words + move.l d2,d0 + add.l d0,d0 + jsr -$270(a6) ; CopyMem + rts +hw_copy_longs: + ; a0 = src, a1 = dest, d2 = longs + move.l d2,d0 + lsl.l #2,d0 + jsr -$270(a6) ; CopyMem + rts +hw_copy_string: + ; a0 = src, a1 = dest, d2 = maxlen + moveq #0,d0 + subq.w #1,d2 + beq.s .endstring + addq.w #1,d0 + move.b (a0)+,(a1)+ + bne.s hw_copy_string +.endstring + clr.b -1(a1) + rts +hw_set_longs: + ; a0 = addr, d1 = data, d2 = num + move.l d1,(a0)+ + subq.l #1,d2 + bne.s hw_set_longs + rts +hw_set_words: + ; a0 = addr, d1 = data, d2 = num + move.w d1,(a0)+ + subq.l #1,d2 + bne.s hw_set_words + rts +hw_set_bytes: + ; a0 = addr, d1 = data, d2 = num + move.b d1,(a0)+ + subq.l #1,d2 + bne.s hw_set_bytes + rts +hw_get_bstr: + ; a0 = src, a1 = dest, d2 = maxlen + moveq #0,d0 + move.b (a0)+,d0 +.bcopy2 + subq.w #1,d0 + bmi.s .bcopy1 + subq.w #1,d2 + bmi.s .bcopy1 + move.b (a0)+,(a1)+ + bra.s .bcopy2 +.bcopy1 + clr.b (a1) + rts + +hw_call_lib: + ; a0 = base + ; d1 = offset + ; a2 = regs + movem.l d2-d7/a2-a6,-(sp) + move.l a0,a6 + add.w d1,a0 + pea funcret(pc) + move.l a0,-(sp) + movem.l (a2),d0-d7/a0-a5 + rts +funcret + movem.l (sp)+,d2-d7/a2-a6 + rts + +hw_call_func: + ; a0 = func + ; a1 = regs + movem.l d2-d7/a2-a6,-(sp) + pea funcret(pc) + move.l a0,-(sp) + movem.l (a1),d0-d7/a0-a6 + rts + +hw_op_nop: + move.l d5,d0 + rts + +hw_multi: + movem.l d0-d7/a0-a6,-(sp) + ; a0 = data, d1 = num + move.l a0,a4 + move.l a4,a5 + move.l d1,d7 + moveq #0,d5 +.multi0 + move.w (a4)+,d4 + moveq #0,d6 + move.w (a4)+,d6 + add.w d4,d4 + lea trapjumps(pc),a3 + add.w 0(a3,d4.w),a3 + movem.l (a4),a0-a2 + movem.l (a4),d0-d2 + jsr (a3) + move.l d0,(a4) + move.l d0,d5 + tst.w d6 + beq.s .multi1 + move.w d6,d3 + and.w #15,d6 + lsr.w #8,d3 + mulu #5*4,d3 + lsl.w #2,d6 + add.w d6,d3 + move.l d0,4(a5,d3.w) +.multi1 + add.w #5*4-4,a4 + subq.l #1,d7 + bne.s .multi0 + movem.l (sp)+,d0-d7/a0-a6 + rts + + +hwtrap_name + dc.b "UAE board",0 + + getrtbase: lea start-8-4(pc),a0 and.l #$FFFF,d0 @@ -2943,8 +3510,10 @@ pointer_prefs: dc.b 'RAM:Env/Sys/Pointer.prefs',0 clname: dc.b 'UAE clipboard sharing',0 mhname: dc.b 'UAE mouse driver',0 kaname: dc.b 'UAE heart beat',0 -exter_name: dc.b 'UAE filesystem',0 +exter_name: dc.b 'UAE fs',0 fstaskname: dc.b 'UAE fs automounter',0 +fswtaskname: dc.b 'UAE fs worker',0 +fstraptaskname: dc.b 'UAE trap worker',0 fsprocname: dc.b 'UAE fs automount process',0 debuggerprocname: dc.b 'UAE debugger',0 doslibname: dc.b 'dos.library',0 diff --git a/include/inputdevice.h b/include/inputdevice.h index a6ef4ed9..8402466f 100644 --- a/include/inputdevice.h +++ b/include/inputdevice.h @@ -261,6 +261,7 @@ extern int intputdevice_compa_get_eventtype (int evt, const int **axistable); extern void inputdevice_sparecopy (struct uae_input_device *uid, int num, int sub); extern void inputdevice_parse_jport_custom(struct uae_prefs *pr, int index, int port, TCHAR *outname); extern void inputdevice_generate_jport_custom(struct uae_prefs *pr, int port); +extern void inputdevice_forget_unplugged_device(int portnum); extern uae_u16 potgo_value; extern uae_u16 POTGOR (void); @@ -280,11 +281,11 @@ extern void inputdevice_reset (void); extern void write_inputdevice_config (struct uae_prefs *p, struct zfile *f); extern void read_inputdevice_config (struct uae_prefs *p, const TCHAR *option, TCHAR *value); extern void reset_inputdevice_config (struct uae_prefs *pr); -extern int inputdevice_joyport_config(struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type); +extern int inputdevice_joyport_config(struct uae_prefs *p, const TCHAR *value1, const TCHAR *value2, int portnum, int mode, int type, bool candefault); extern void inputdevice_joyport_config_store(struct uae_prefs *p, const TCHAR *value, int portnum, int mode, int type); extern int inputdevice_getjoyportdevice (int port, int val); extern void inputdevice_validate_jports (struct uae_prefs *p, int changedport, bool *fixedports); -extern void inputdevice_fix_prefs(struct uae_prefs *p); +extern void inputdevice_fix_prefs(struct uae_prefs *p, bool userconfig); extern void inputdevice_config_load_start(struct uae_prefs *p); extern void inputdevice_init (void); diff --git a/include/options.h b/include/options.h index 77c32521..f7a2217b 100644 --- a/include/options.h +++ b/include/options.h @@ -12,6 +12,8 @@ #include "uae/types.h" +#include "traps.h" + #define UAEMAJOR 3 #define UAEMINOR 3 #define UAESUBREV 0 @@ -66,12 +68,15 @@ struct uae_input_device { struct jport_custom { TCHAR custom[MAX_DPATH]; }; +struct inputdevconfig { + TCHAR name[MAX_JPORTNAME]; + TCHAR configname[MAX_JPORTNAME]; +}; struct jport { int id; int mode; // 0=def,1=mouse,2=joy,3=anajoy,4=lightpen int autofire; - TCHAR name[MAX_JPORTNAME]; - TCHAR configname[MAX_JPORTNAME]; + struct inputdevconfig idc; bool nokeyboardoverride; }; #define JPORT_NONE -1 @@ -422,10 +427,12 @@ struct uae_prefs { int gfx_max_horizontal, gfx_max_vertical; int gfx_saturation, gfx_luminance, gfx_contrast, gfx_gamma, gfx_gamma_ch[3]; bool gfx_blackerthanblack; + bool gfx_threebitcolors; int gfx_api; int color_mode; int gfx_extrawidth; bool lightboost_strobo; + bool gfx_grayscale; struct gfx_filterdata gf[2]; @@ -521,6 +528,7 @@ struct uae_prefs { bool cs_1mchipjumper; bool cs_cia6526; bool cs_bytecustomwritebug; + bool cs_color_burst; int cs_hacks; struct boardromconfig expansionboard[MAX_EXPANSION_BOARDS]; @@ -775,8 +783,8 @@ extern int cfgfile_parse_option (struct uae_prefs *p, const TCHAR *option, TCHAR extern int cfgfile_get_description (const TCHAR *filename, TCHAR *description, TCHAR *hostlink, TCHAR *hardwarelink, int *type); extern void cfgfile_show_usage (void); extern int cfgfile_searchconfig(const TCHAR *in, int index, TCHAR *out, int outsize); -extern uae_u32 cfgfile_uaelib (int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen); -extern uae_u32 cfgfile_uaelib_modify (uae_u32 mode, uae_u32 parms, uae_u32 size, uae_u32 out, uae_u32 outsize); +extern uae_u32 cfgfile_uaelib(TrapContext *ctx, int mode, uae_u32 name, uae_u32 dst, uae_u32 maxlen); +extern uae_u32 cfgfile_uaelib_modify(TrapContext *ctx, uae_u32 mode, uae_u32 parms, uae_u32 size, uae_u32 out, uae_u32 outsize); extern uae_u32 cfgfile_modify (uae_u32 index, const TCHAR *parms, uae_u32 size, TCHAR *out, uae_u32 outsize); extern void cfgfile_addcfgparam (TCHAR *); extern int built_in_prefs (struct uae_prefs *p, int model, int config, int compa, int romcheck); @@ -785,7 +793,7 @@ extern int built_in_cpuboard_prefs(struct uae_prefs *p); extern int cmdlineparser (const TCHAR *s, TCHAR *outp[], int max); extern int cfgfile_configuration_change (int); extern void fixup_prefs_dimensions (struct uae_prefs *prefs); -extern void fixup_prefs (struct uae_prefs *prefs); +extern void fixup_prefs (struct uae_prefs *prefs, bool userconfig); extern void fixup_cpu (struct uae_prefs *prefs); bool cfgfile_board_enabled(struct uae_prefs *p, int romtype, int devnum); diff --git a/include/scsi.h b/include/scsi.h index 9c577ac8..c40ea0ef 100644 --- a/include/scsi.h +++ b/include/scsi.h @@ -44,7 +44,8 @@ struct scsi_data int offset; uae_u8 *buffer; int buffer_size; - struct hd_hardfiledata *hfd; + struct hd_hardfiledata *hdhfd; + struct hardfiledata *hfd; struct scsi_data_tape *tape; int device_type; int nativescsiunit; @@ -53,6 +54,7 @@ struct scsi_data uae_u32 unit_attention; }; +extern struct scsi_data *scsi_alloc_generic(struct hardfiledata *hfd, int type); extern struct scsi_data *scsi_alloc_hd(int, struct hd_hardfiledata*); extern struct scsi_data *scsi_alloc_cd(int, int, bool); extern struct scsi_data *scsi_alloc_tape(int id, const TCHAR *tape_directory, bool readonly); diff --git a/include/xwin.h b/include/xwin.h index 14fc5920..cd53c44e 100644 --- a/include/xwin.h +++ b/include/xwin.h @@ -17,8 +17,6 @@ typedef uae_u32 xcolnr; typedef int (*allocfunc_type)(int, int, int, xcolnr *); extern xcolnr xcolors[4096]; -extern xcolnr xcolors_16[4096]; -extern xcolnr xcolors_32[4096]; extern uae_u32 p96_rgbx16[65536]; extern int graphics_setup (void); diff --git a/jit/compemu.h b/jit/compemu.h index 37d56ea6..f565a30d 100644 --- a/jit/compemu.h +++ b/jit/compemu.h @@ -473,8 +473,6 @@ extern void compile_block(cpu_history* pc_hist, int blocklen, int totcyles); /* Flags for Bernie during development/debugging. Should go away eventually */ #define DISTRUST_CONSISTENT_MEM 0 -extern uae_s32 pissoff; - typedef struct { uae_u8 use_flags; uae_u8 set_flags; diff --git a/main.cpp b/main.cpp index 6a07db56..4b2630b6 100644 --- a/main.cpp +++ b/main.cpp @@ -322,7 +322,7 @@ void fixup_cpu (struct uae_prefs *p) } } -void fixup_prefs (struct uae_prefs *p) +void fixup_prefs (struct uae_prefs *p, bool userconfig) { int err = 0; @@ -716,7 +716,7 @@ void fixup_prefs (struct uae_prefs *p) built_in_chipset_prefs (p); blkdev_fix_prefs (p); - inputdevice_fix_prefs(p); + inputdevice_fix_prefs(p, userconfig); target_fixup_options (p); } @@ -970,7 +970,7 @@ static void parse_cmdline_and_init_file (int argc, TCHAR **argv) target_cfgfile_load (&currprefs, optionsfile, CONFIG_TYPE_DEFAULT, default_config); #endif } - fixup_prefs (&currprefs); + fixup_prefs (&currprefs, false); parse_cmdline (argc, argv); } @@ -1042,7 +1042,7 @@ static int real_main2 (int argc, TCHAR **argv) set_config_changed (); if (restart_config[0]) { default_prefs (&currprefs, 0); - fixup_prefs (&currprefs); + fixup_prefs (&currprefs, true); } if (! graphics_setup ()) { @@ -1065,7 +1065,7 @@ static int real_main2 (int argc, TCHAR **argv) if (console_emulation) { consolehook_config (&currprefs); - fixup_prefs (&currprefs); + fixup_prefs (&currprefs, true); } if (! setup_sound ()) { @@ -1117,7 +1117,7 @@ static int real_main2 (int argc, TCHAR **argv) #endif #endif - fixup_prefs (&currprefs); + fixup_prefs (&currprefs, true); #ifdef RETROPLATFORM rp_fixup_options (&currprefs); #endif diff --git a/memory.cpp b/memory.cpp index 2417963a..3a7dcef4 100644 --- a/memory.cpp +++ b/memory.cpp @@ -1681,8 +1681,9 @@ bool mapped_malloc (addrbank *ab) static int recurse; ab->startmask = ab->start; - if (!needmman () && (!rtgmem || currprefs.cpu_model < 68020)) { - nocanbang (); + if ((!needmman () && (!rtgmem || currprefs.cpu_model < 68020)) || (ab->flags & ABFLAG_ALLOCINDIRECT)) { + if (!(ab->flags & ABFLAG_ALLOCINDIRECT)) + nocanbang (); ab->flags &= ~ABFLAG_DIRECTMAP; if (ab->flags & ABFLAG_NOALLOC) { #if MAPPED_MALLOC_DEBUG @@ -2425,7 +2426,7 @@ void memory_reset (void) } #ifdef AUTOCONFIG - if (need_uae_boot_rom ()) + if (need_uae_boot_rom () && currprefs.uaeboard < 2) map_banks_set(&rtarea_bank, rtarea_base >> 16, 1, 0); #endif diff --git a/od-win32/blkdev_win32_ioctl.cpp b/od-win32/blkdev_win32_ioctl.cpp index f95cf65f..277a4fd8 100644 --- a/od-win32/blkdev_win32_ioctl.cpp +++ b/od-win32/blkdev_win32_ioctl.cpp @@ -15,6 +15,7 @@ #include #include "options.h" +#include "traps.h" #include "uae.h" #include "threaddep/thread.h" #include "blkdev.h" diff --git a/od-win32/mman.cpp b/od-win32/mman.cpp index 9af19c1e..a6b43751 100644 --- a/od-win32/mman.cpp +++ b/od-win32/mman.cpp @@ -890,12 +890,12 @@ void protect_roms (bool protect) DWORD old; if (!VirtualProtect (shm->attached, shm->rosize, protect ? PAGE_READONLY : PAGE_READWRITE, &old)) { write_log (_T("protect_roms VP %08lX - %08lX %x (%dk) failed %d\n"), - (uae_u8*)shm->attached - natmem_offset, (uae_u8*)shm->attached - natmem_offset + shm->size, - shm->size, shm->size >> 10, GetLastError ()); + (uae_u8*)shm->attached - natmem_offset, (uae_u8*)shm->attached - natmem_offset + shm->rosize, + shm->rosize, shm->rosize >> 10, GetLastError ()); } else { write_log(_T("ROM VP %08lX - %08lX %x (%dk) %s\n"), - (uae_u8*)shm->attached - natmem_offset, (uae_u8*)shm->attached - natmem_offset + shm->size, - shm->size, shm->size >> 10, protect ? _T("WPROT") : _T("UNPROT")); + (uae_u8*)shm->attached - natmem_offset, (uae_u8*)shm->attached - natmem_offset + shm->rosize, + shm->rosize, shm->rosize >> 10, protect ? _T("WPROT") : _T("UNPROT")); } } } diff --git a/od-win32/resources/resource.h b/od-win32/resources/resource.h index ce31ee12..7a74921d 100644 --- a/od-win32/resources/resource.h +++ b/od-win32/resources/resource.h @@ -490,6 +490,8 @@ #define IDC_PROGRAMMED_AUTO 1181 #define IDC_AUTORESOLUTIONVGA 1181 #define IDC_RATE2ENABLE 1182 +#define IDC_GRAYSCALE 1183 +#define IDC_ATARICOLORFIX 1184 #define IDC_FRAMERATE 1185 #define IDC_XSIZE 1187 #define IDC_YSIZE 1188 @@ -1114,6 +1116,7 @@ #define IDC_DBG_MEMUP 1755 #define IDC_CS_BYTECUSTOMWRITEBUG 1755 #define IDC_DBG_MEM 1756 +#define IDC_CS_COMPOSITECOLOR 1756 #define IDC_DBG_DASM 1757 #define IDC_DBG_MEMDOWNFAST 1758 #define IDC_DBG_MEMTOPC 1759 @@ -1249,6 +1252,7 @@ #define IDC_Z3MAPPING 1844 #define IDC_CPUBOARD_SUBTYPE 1845 #define IDC_CYCLEEXACTMEMORY 1846 +#define IDC_UAEBOARD_TYPE 1848 #define ID__FLOPPYDRIVES 40004 #define ID_FLOPPYDRIVES_DF0 40005 #define ID_ST_CONFIGURATION 40010 @@ -1300,7 +1304,7 @@ #define _APS_3D_CONTROLS 1 #define _APS_NEXT_RESOURCE_VALUE 399 #define _APS_NEXT_COMMAND_VALUE 40050 -#define _APS_NEXT_CONTROL_VALUE 1848 +#define _APS_NEXT_CONTROL_VALUE 1849 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/od-win32/resources/winuae.rc b/od-win32/resources/winuae.rc index b9a88fc5..919377cc 100644 --- a/od-win32/resources/winuae.rc +++ b/od-win32/resources/winuae.rc @@ -102,7 +102,7 @@ END // Dialog // -IDD_KICKSTART DIALOGEX 0, 0, 396, 204 +IDD_KICKSTART DIALOGEX 0, 0, 396, 259 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD EXSTYLE WS_EX_CONTEXTHELP FONT 8, "MS Sans Serif", 0, 0, 0x1 @@ -118,8 +118,8 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,87,73,104,12 CONTROL "ShapeShifter support [] Patches the system ROM for ShapeShifter compatibility.",IDC_KICKSHIFTER, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,195,73,106,13 - GROUPBOX "Miscellaneous",IDC_STATIC,0,96,395,106 - LTEXT "Cartridge ROM file:",IDC_FLASHTEXT2,12,112,265,10 + GROUPBOX "Miscellaneous",IDC_STATIC,0,96,395,109 + LTEXT "Cartridge ROM file:",IDC_FLASHTEXT2,12,111,265,10 COMBOBOX IDC_CARTFILE,12,124,361,75,CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "...",IDC_CARTCHOOSER,376,123,10,15 LTEXT "Flash RAM or A2286/A2386SX BIOS CMOS RAM file:",IDC_FLASHTEXT,12,141,265,10 @@ -128,9 +128,12 @@ BEGIN LTEXT "Real Time Clock file",IDC_STATIC,12,167,313,15,SS_CENTERIMAGE EDITTEXT IDC_RTCFILE,12,183,361,12,ES_AUTOHSCROLL PUSHBUTTON "...",IDC_RTCCHOOSER,376,181,10,15 + GROUPBOX "Advanced UAE expansion board/Boot ROM Settings",IDC_STATIC,0,209,395,48 + COMBOBOX IDC_UAEBOARD_TYPE,96,228,155,75,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + RTEXT "Board type:",IDC_STATIC,20,227,67,15,SS_CENTERIMAGE END -IDD_DISPLAY DIALOGEX 0, 0, 396, 298 +IDD_DISPLAY DIALOGEX 0, 0, 396, 311 STYLE DS_LOCALEDIT | DS_SETFONT | DS_3DLOOK | DS_CONTROL | WS_CHILD FONT 8, "MS Sans Serif", 0, 0, 0x1 BEGIN @@ -144,7 +147,7 @@ BEGIN EDITTEXT IDC_XSIZE,59,56,56,12,ES_NUMBER EDITTEXT IDC_YSIZE,122,56,56,12,ES_NUMBER COMBOBOX IDC_DISPLAY_BUFFERCNT,266,56,119,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Settings",IDC_SETTINGSTEXT,1,86,283,163 + GROUPBOX "Settings",IDC_SETTINGSTEXT,1,86,283,183 RTEXT "Native:",IDC_STATIC,9,98,48,15,SS_CENTERIMAGE COMBOBOX IDC_SCREENMODE_NATIVE,61,98,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP COMBOBOX IDC_SCREENMODE_NATIVE2,142,98,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP @@ -159,21 +162,21 @@ BEGIN "Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,154,139,10 CONTROL "VGA mode resolution autoswitch [] Automatically selects between hires and superhires in programmed display modes, keeping correct aspect ratio.",IDC_AUTORESOLUTIONVGA, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,155,154,124,10 - RTEXT "Resolution:",IDC_STATIC,24,170,110,8,SS_CENTERIMAGE - COMBOBOX IDC_LORES,142,169,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - RTEXT "Resolution autoswitch:",IDC_STATIC,92,190,110,8,SS_CENTERIMAGE - COMBOBOX IDC_AUTORESOLUTIONSELECT,210,189,59,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - RTEXT "Refresh:",IDC_REFRESHTEXT,11,209,57,8 - CONTROL "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,71,204,99,20 - COMBOBOX IDC_RATE2BOX,210,209,60,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - RTEXT "FPS adj.:",IDC_REFRESH2TEXT,9,230,61,8 - CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,71,225,99,20 - EDITTEXT IDC_RATE2TEXT,210,229,46,12,ES_AUTOHSCROLL - CONTROL "",IDC_RATE2ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,230,8,10 - COMBOBOX IDC_DA_MODE,15,260,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP - CONTROL "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,96,256,96,20 - EDITTEXT IDC_DA_TEXT,205,260,56,12,ES_AUTOHSCROLL | ES_READONLY - PUSHBUTTON "Reset to defaults",IDC_DA_RESET,156,278,106,14 + RTEXT "Resolution:",IDC_STATIC,24,192,110,8,SS_CENTERIMAGE + COMBOBOX IDC_LORES,142,191,127,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + RTEXT "Resolution autoswitch:",IDC_STATIC,92,212,110,8,SS_CENTERIMAGE + COMBOBOX IDC_AUTORESOLUTIONSELECT,210,211,59,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + RTEXT "Refresh:",IDC_REFRESHTEXT,11,231,57,8 + CONTROL "Slider1",IDC_FRAMERATE,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,71,226,99,20 + COMBOBOX IDC_RATE2BOX,210,231,60,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + RTEXT "FPS adj.:",IDC_REFRESH2TEXT,9,252,61,8 + CONTROL "",IDC_FRAMERATE2,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,71,247,99,20 + EDITTEXT IDC_RATE2TEXT,210,251,46,12,ES_AUTOHSCROLL + CONTROL "",IDC_RATE2ENABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,261,252,8,10 + COMBOBOX IDC_DA_MODE,15,276,71,150,CBS_DROPDOWNLIST | CBS_HASSTRINGS | WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_DA_SLIDER,"msctls_trackbar32",TBS_AUTOTICKS | TBS_TOP | WS_TABSTOP,96,272,96,20 + EDITTEXT IDC_DA_TEXT,205,276,56,12,ES_AUTOHSCROLL | ES_READONLY + PUSHBUTTON "Reset to defaults",IDC_DA_RESET,156,294,106,14 GROUPBOX "Centering",IDC_STATIC,289,86,105,46 CONTROL "Horizontal",IDC_XCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,300,100,90,10 CONTROL "Vertical",IDC_YCENTER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,300,116,90,10 @@ -188,6 +191,8 @@ BEGIN CONTROL "Double, frames",IDC_LM_IDOUBLED,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,251,90,10 CONTROL "Double, fields",IDC_LM_IDOUBLED2,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,264,90,10 CONTROL "Double, fields+",IDC_LM_IDOUBLED3,"Button",BS_AUTORADIOBUTTON | BS_LEFT | WS_TABSTOP,299,277,90,10 + CONTROL "Monochrome video out",IDC_GRAYSCALE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,11,167,139,10 + CONTROL "Dark palette fix",IDC_ATARICOLORFIX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,15,295,129,10 END IDD_MEMORY DIALOGEX 0, 0, 396, 246 @@ -778,6 +783,7 @@ BEGIN EDITTEXT IDC_CS_DENISEREV,311,289,45,13,ES_AUTOHSCROLL CONTROL "Custom register byte write bug",IDC_CS_BYTECUSTOMWRITEBUG, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,197,130,11 + CONTROL "Composite color burst",IDC_CS_COMPOSITECOLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,196,125,12 END IDD_AVIOUTPUT DIALOGEX 0, 0, 396, 260 @@ -1450,6 +1456,7 @@ GUIDELINES DESIGNINFO BEGIN IDD_KICKSTART, DIALOG BEGIN + BOTTOMMARGIN, 258 END IDD_DISPLAY, DIALOG diff --git a/od-win32/rp.cpp b/od-win32/rp.cpp index 9ce8e32a..176d4da5 100644 --- a/od-win32/rp.cpp +++ b/od-win32/rp.cpp @@ -377,7 +377,7 @@ static int port_insert (int inputmap_port, int devicetype, DWORD flags, const TC inputdevice_compa_clear (&changed_prefs, inputmap_port); if (_tcslen (name) == 0) { - inputdevice_joyport_config (&changed_prefs, _T("none"), inputmap_port, 0, 0); + inputdevice_joyport_config (&changed_prefs, _T("none"), NULL, inputmap_port, 0, 0, true); return TRUE; } devicetype2 = -1; @@ -399,10 +399,10 @@ static int port_insert (int inputmap_port, int devicetype, DWORD flags, const TC _stprintf (tmp2, _T("KeyboardLayout%d"), i); if (!_tcscmp (tmp2, name)) { _stprintf (tmp2, _T("kbd%d"), i + 1); - return inputdevice_joyport_config (&changed_prefs, tmp2, inputmap_port, devicetype2, 0); + return inputdevice_joyport_config (&changed_prefs, tmp2, NULL, inputmap_port, devicetype2, 0, true); } } - return inputdevice_joyport_config (&changed_prefs, name, inputmap_port, devicetype2, 1); + return inputdevice_joyport_config (&changed_prefs, name, NULL, inputmap_port, devicetype2, 1, true); } static int cd_insert (int num, const TCHAR *name) diff --git a/od-win32/sysconfig.h b/od-win32/sysconfig.h index d0010db9..f887120b 100644 --- a/od-win32/sysconfig.h +++ b/od-win32/sysconfig.h @@ -165,6 +165,8 @@ #undef ENFORCER #endif +typedef long uae_atomic; + /* src/sysconfig.h. Generated automatically by configure. */ /* src/sysconfig.h.in. Generated automatically from configure.in by autoheader. */ diff --git a/od-win32/win32.h b/od-win32/win32.h index 1ef39036..93b2b844 100644 --- a/od-win32/win32.h +++ b/od-win32/win32.h @@ -25,13 +25,13 @@ #define WINUAEBETA _T("") #endif -#define WINUAEDATE MAKEBD(2016, 1, 12) +#define WINUAEDATE MAKEBD(2016, 1, 31) //#define WINUAEEXTRA _T("AmiKit Preview") //#define WINUAEEXTRA _T("Amiga Forever Edition") #ifndef WINUAEEXTRA -#define WINUAEEXTRA _T("") +#define WINUAEEXTRA _T("OS4_UAE") #endif #ifndef WINUAEREV #define WINUAEREV _T("") diff --git a/od-win32/win32gui.cpp b/od-win32/win32gui.cpp index 156facd4..c33efaec 100644 --- a/od-win32/win32gui.cpp +++ b/od-win32/win32gui.cpp @@ -1368,7 +1368,7 @@ static const int msi_cpuboard[] = { 0, 5, 6, 7, 8, 9, 10, 11, 12, 13 }; #define MIN_M68K_PRIORITY 1 #define MAX_M68K_PRIORITY 16 #define MIN_CACHE_SIZE 0 -#define MAX_CACHE_SIZE 9 +#define MAX_CACHE_SIZE 5 #define MIN_REFRESH_RATE 1 #define MAX_REFRESH_RATE 10 #define MIN_SOUND_MEM 0 @@ -2212,7 +2212,7 @@ static void gui_to_prefs (void) /* filesys hack */ currprefs.mountitems = changed_prefs.mountitems; memcpy (&currprefs.mountconfig, &changed_prefs.mountconfig, MOUNT_CONFIG_SIZE * sizeof (struct uaedev_config_info)); - fixup_prefs (&changed_prefs); + fixup_prefs (&changed_prefs, true); updatewinfsmode (&changed_prefs); } @@ -6598,7 +6598,7 @@ void init_da (HWND hDlg) da_mode_selected = 0; SendDlgItemMessage (hDlg, IDC_DA_MODE, CB_SETCURSEL, da_mode_selected, 0); SendDlgItemMessage (hDlg, IDC_DA_SLIDER, TBM_SETPAGESIZE, 0, 1); - SendDlgItemMessage (hDlg, IDC_DA_SLIDER, TBM_SETRANGE, TRUE, MAKELONG (-99, 99)); + SendDlgItemMessage (hDlg, IDC_DA_SLIDER, TBM_SETRANGE, TRUE, MAKELONG (-200, 200)); p = getp_da (); if (p) set_da (hDlg); @@ -6875,10 +6875,12 @@ static void values_to_displaydlg (HWND hDlg) else SendDlgItemMessage(hDlg, IDC_AUTORESOLUTIONSELECT, CB_SETCURSEL, 5, 0); - CheckDlgButton (hDlg, IDC_AUTORESOLUTIONVGA, workprefs.gfx_autoresolution_vga); - CheckDlgButton (hDlg, IDC_BLACKER_THAN_BLACK, workprefs.gfx_blackerthanblack); - CheckDlgButton (hDlg, IDC_LORES_SMOOTHED, workprefs.gfx_lores_mode); - CheckDlgButton (hDlg, IDC_FLICKERFIXER, workprefs.gfx_scandoubler); + CheckDlgButton(hDlg, IDC_AUTORESOLUTIONVGA, workprefs.gfx_autoresolution_vga); + CheckDlgButton(hDlg, IDC_BLACKER_THAN_BLACK, workprefs.gfx_blackerthanblack); + CheckDlgButton(hDlg, IDC_LORES_SMOOTHED, workprefs.gfx_lores_mode); + CheckDlgButton(hDlg, IDC_FLICKERFIXER, workprefs.gfx_scandoubler); + CheckDlgButton(hDlg, IDC_GRAYSCALE, workprefs.gfx_grayscale); + CheckDlgButton(hDlg, IDC_ATARICOLORFIX, workprefs.gfx_threebitcolors); CheckDlgButton (hDlg, IDC_XCENTER, workprefs.gfx_xcenter); CheckDlgButton (hDlg, IDC_YCENTER, workprefs.gfx_ycenter); @@ -7000,8 +7002,10 @@ static void values_from_displaydlg (HWND hDlg, UINT msg, WPARAM wParam, LPARAM l workprefs.gfx_lores_mode = ischecked (hDlg, IDC_LORES_SMOOTHED); workprefs.gfx_scandoubler = ischecked (hDlg, IDC_FLICKERFIXER); workprefs.gfx_blackerthanblack = ischecked (hDlg, IDC_BLACKER_THAN_BLACK); - workprefs.gfx_autoresolution_vga = ischecked (hDlg, IDC_AUTORESOLUTIONVGA); - + workprefs.gfx_autoresolution_vga = ischecked(hDlg, IDC_AUTORESOLUTIONVGA); + workprefs.gfx_grayscale = ischecked(hDlg, IDC_GRAYSCALE); + workprefs.gfx_threebitcolors = ischecked(hDlg, IDC_ATARICOLORFIX); + int vres = workprefs.gfx_vresolution; int viscan = workprefs.gfx_iscanlines; int vpscan = workprefs.gfx_pscanlines; @@ -7550,6 +7554,7 @@ static void values_to_chipsetdlg2 (HWND hDlg) CheckDlgButton(hDlg, IDC_CS_IDE2, workprefs.cs_ide > 0 && (workprefs.cs_ide & 2)); CheckDlgButton(hDlg, IDC_CS_1MCHIPJUMPER, workprefs.cs_1mchipjumper || workprefs.chipmem_size >= 0x100000); CheckDlgButton(hDlg, IDC_CS_BYTECUSTOMWRITEBUG, workprefs.cs_bytecustomwritebug); + CheckDlgButton(hDlg, IDC_CS_COMPOSITECOLOR, workprefs.cs_color_burst); txt[0] = 0; _stprintf (txt, _T("%d"), workprefs.cs_rtc_adjust); SetDlgItemText(hDlg, IDC_CS_RTCADJUST, txt); @@ -7629,6 +7634,7 @@ static void values_from_chipsetdlg2 (HWND hDlg, UINT msg, WPARAM wParam, LPARAM : ischecked (hDlg, IDC_CS_RTC2) ? 1 : ischecked (hDlg, IDC_CS_RTC3) ? 2 : 3; workprefs.cs_1mchipjumper = ischecked(hDlg, IDC_CS_1MCHIPJUMPER); workprefs.cs_bytecustomwritebug = ischecked(hDlg, IDC_CS_BYTECUSTOMWRITEBUG); + workprefs.cs_color_burst = ischecked(hDlg, IDC_CS_COMPOSITECOLOR); if (workprefs.cs_rtc) { txt[0] = 0; @@ -7712,6 +7718,7 @@ static void enable_for_chipsetdlg2 (HWND hDlg) ew(hDlg, IDC_CS_RTCADJUST, e); ew(hDlg, IDC_CS_1MCHIPJUMPER, e && workprefs.chipmem_size < 0x100000); ew(hDlg, IDC_CS_BYTECUSTOMWRITEBUG, e); + ew(hDlg, IDC_CS_COMPOSITECOLOR, e); } static INT_PTR CALLBACK ChipsetDlgProc2 (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -9590,6 +9597,8 @@ static void values_to_kickstartdlg (HWND hDlg) SetDlgItemText(hDlg, IDC_RTCFILE, workprefs.rtcfile); CheckDlgButton(hDlg, IDC_KICKSHIFTER, workprefs.kickshifter); CheckDlgButton(hDlg, IDC_MAPROM, workprefs.maprom); + + SendDlgItemMessage(hDlg, IDC_UAEBOARD_TYPE, CB_SETCURSEL, workprefs.uaeboard, 0); } static void values_from_kickstartdlg(HWND hDlg) @@ -9597,6 +9606,8 @@ static void values_from_kickstartdlg(HWND hDlg) getromfile(hDlg, IDC_ROMFILE, workprefs.romfile, sizeof(workprefs.romfile) / sizeof(TCHAR)); getromfile(hDlg, IDC_ROMFILE2, workprefs.romextfile, sizeof(workprefs.romextfile) / sizeof(TCHAR)); getromfile(hDlg, IDC_CARTFILE, workprefs.cartfile, sizeof(workprefs.cartfile) / sizeof(TCHAR)); + + workprefs.uaeboard = SendDlgItemMessage(hDlg, IDC_UAEBOARD_TYPE, CB_GETCURSEL, 0, 0); } static void init_kickstart (HWND hDlg) @@ -9618,6 +9629,14 @@ static void init_kickstart (HWND hDlg) ew (hDlg, IDC_FLASHCHOOSER), FALSE); #endif + ew(hDlg, IDC_UAEBOARD_TYPE, full_property_sheet); + + SendDlgItemMessage(hDlg, IDC_UAEBOARD_TYPE, CB_RESETCONTENT, 0, 0); + SendDlgItemMessage(hDlg, IDC_UAEBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("Original UAE (FS + F0 ROM)")); + SendDlgItemMessage(hDlg, IDC_UAEBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("New UAE (64k + F0 ROM)")); + SendDlgItemMessage(hDlg, IDC_UAEBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("New UAE (128k, ROM, Direct)")); + SendDlgItemMessage(hDlg, IDC_UAEBOARD_TYPE, CB_ADDSTRING, 0, (LPARAM)_T("New UAE (128k, ROM, Indirect)")); + if (!regexiststree(NULL, _T("DetectedROMs"))) scan_roms (NULL, rp_isactive () ? 0 : 1); @@ -9697,6 +9716,7 @@ static INT_PTR CALLBACK KickstartDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP case IDC_ROMFILE: case IDC_ROMFILE2: case IDC_CARTFILE: + case IDC_UAEBOARD_TYPE: values_from_kickstartdlg (hDlg); break; } @@ -10454,7 +10474,14 @@ static void values_to_cpudlg (HWND hDlg) CheckRadioButton (hDlg, IDC_TRUST0, IDC_TRUST1, trust_ids[workprefs.comptrustbyte]); - SendDlgItemMessage (hDlg, IDC_CACHE, TBM_SETPOS, TRUE, workprefs.cachesize / 1024); + int idx = 0; + for (int i = 0; i < MAX_CACHE_SIZE; i++) { + if (workprefs.cachesize >= (1024 << i) && workprefs.cachesize < (1024 << i) * 2) { + idx = i + 1; + break; + } + } + SendDlgItemMessage (hDlg, IDC_CACHE, TBM_SETPOS, TRUE, idx); _stprintf (buffer, _T("%d MB"), workprefs.cachesize / 1024 ); SetDlgItemText (hDlg, IDC_CACHETEXT, buffer); @@ -10562,7 +10589,11 @@ static void values_from_cpudlg (HWND hDlg) #ifdef JIT oldcache = workprefs.cachesize; jitena = (ischecked (hDlg, IDC_JITENABLE) ? 1 : 0) && !workprefs.address_space_24 && workprefs.cpu_model >= 68020; - workprefs.cachesize = SendMessage (GetDlgItem (hDlg, IDC_CACHE), TBM_GETPOS, 0, 0) * 1024; + workprefs.cachesize = 1024 << SendMessage (GetDlgItem (hDlg, IDC_CACHE), TBM_GETPOS, 0, 0); + if (workprefs.cachesize <= 1024) + workprefs.cachesize = 0; + else + workprefs.cachesize /= 2; if (!jitena) { cachesize_prev = workprefs.cachesize; trust_prev = workprefs.comptrustbyte; @@ -14463,6 +14494,8 @@ static INT_PTR CALLBACK GamePortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP joyxprevious[1] = temp; enable_for_gameportsdlg (hDlg); updatejoyport (hDlg, -1); + inputdevice_forget_unplugged_device(0); + inputdevice_forget_unplugged_device(1); } else if (LOWORD (wParam) == IDC_PORT0_REMAP) { ports_remap (hDlg, 0); enable_for_gameportsdlg (hDlg); @@ -14504,8 +14537,10 @@ static INT_PTR CALLBACK GamePortsDlgProc (HWND hDlg, UINT msg, WPARAM wParam, LP port = 2; if (LOWORD (wParam) == IDC_PORT3_JOYS) port = 3; - if (port >= 0) + if (port >= 0) { processport (hDlg, true, port); + inputdevice_forget_unplugged_device(port); + } break; } } diff --git a/scsi.cpp b/scsi.cpp index 8ae11adc..78f1a658 100644 --- a/scsi.cpp +++ b/scsi.cpp @@ -120,7 +120,7 @@ bool scsi_emulate_analyze (struct scsi_data *sd) data_len = sd->data_len; data_len2 = 0; cmd_len = scsicmdsizes[sd->cmd[0] >> 5]; - if (sd->hfd && sd->hfd->ansi_version < 2 && cmd_len > 10) + if (sd->hdhfd && sd->hdhfd->ansi_version < 2 && cmd_len > 10) goto nocmd; sd->cmd_len = cmd_len; switch (sd->cmd[0]) @@ -140,7 +140,7 @@ bool scsi_emulate_analyze (struct scsi_data *sd) } break; case 0x0c: // INITIALIZE DRIVE CHARACTERICS (SASI) - if (sd->hfd && sd->hfd->hfd.ci.unit_feature_level < HD_LEVEL_SASI) + if (sd->hfd && sd->hfd->ci.unit_feature_level < HD_LEVEL_SASI) goto nocmd; data_len = 8; break; @@ -370,15 +370,15 @@ void scsi_emulate_cmd(struct scsi_data *sd) } } else if (sd->device_type == UAEDEV_HDF && sd->nativescsiunit < 0) { uae_u32 ua = 0; - ua = scsi_hd_emulate(&sd->hfd->hfd, sd->hfd, NULL, 0, 0, 0, 0, 0, 0, 0); + ua = scsi_hd_emulate(sd->hfd, sd->hdhfd, NULL, 0, 0, 0, 0, 0, 0, 0); if (ua) sd->unit_attention = ua; if (handle_ca(sd)) { if (sd->cmd[0] == 0x03) { /* REQUEST SENSE */ - scsi_hd_emulate(&sd->hfd->hfd, sd->hfd, sd->cmd, 0, 0, 0, 0, 0, sd->sense, &sd->sense_len); + scsi_hd_emulate(sd->hfd, sd->hdhfd, sd->cmd, 0, 0, 0, 0, 0, sd->sense, &sd->sense_len); copysense(sd); } else { - sd->status = scsi_hd_emulate(&sd->hfd->hfd, sd->hfd, + sd->status = scsi_hd_emulate(sd->hfd, sd->hdhfd, sd->cmd, sd->cmd_len, sd->buffer, &sd->data_len, sd->reply, &sd->reply_len, sd->sense, &sd->sense_len); copyreply(sd); } @@ -429,10 +429,24 @@ static void allocscsibuf(struct scsi_data *sd) sd->buffer = xcalloc(uae_u8, sd->buffer_size); } +struct scsi_data *scsi_alloc_generic(struct hardfiledata *hfd, int type) +{ + struct scsi_data *sd = xcalloc(struct scsi_data, 1); + sd->hfd = hfd; + sd->id = -1; + sd->nativescsiunit = -1; + sd->cd_emu_unit = -1; + sd->blocksize = hfd->ci.blocksize; + sd->device_type = type; + allocscsibuf(sd); + return sd; +} + struct scsi_data *scsi_alloc_hd(int id, struct hd_hardfiledata *hfd) { struct scsi_data *sd = xcalloc (struct scsi_data, 1); - sd->hfd = hfd; + sd->hdhfd = hfd; + sd->hfd = &hfd->hfd; sd->id = id; sd->nativescsiunit = -1; sd->cd_emu_unit = -1; @@ -563,7 +577,7 @@ void free_scsi (struct scsi_data *sd) { if (!sd) return; - hdf_hd_close (sd->hfd); + hdf_hd_close(sd->hdhfd); scsi_free (sd); } -- 2.47.3