]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
3300b3
authorToni Wilen <twilen@winuae.net>
Sun, 31 Jan 2016 16:42:33 +0000 (18:42 +0200)
committerToni Wilen <twilen@winuae.net>
Sun, 31 Jan 2016 16:42:33 +0000 (18:42 +0200)
19 files changed:
a2091.cpp
cfgfile.cpp
filesys.asm
include/inputdevice.h
include/options.h
include/scsi.h
include/xwin.h
jit/compemu.h
main.cpp
memory.cpp
od-win32/blkdev_win32_ioctl.cpp
od-win32/mman.cpp
od-win32/resources/resource.h
od-win32/resources/winuae.rc
od-win32/rp.cpp
od-win32/sysconfig.h
od-win32/win32.h
od-win32/win32gui.cpp
scsi.cpp

index e0429fbdb74ae22354fef50a1b83261110ae8ec5..15ca17467bb0197dcfad82e57099eda466d5e76d 100644 (file)
--- 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;
index 28cf70d49b51e6edda4e5b0fcaa7c37e985d7148..0bae300c35f8fe34028a3204da2453fa13592a26 100644 (file)
@@ -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];
index 1d13feedc32e6bd7a5c9d69daf647eedb3a4284a..2df92c3ef2c1429dfa5546f6da20d5a486bae37b 100644 (file)
 ; 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                                          ;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
index a6ef4ed97534f7a4165989031483e1102b297ef5..8402466f43ad8ba983eafacae836bf97aaa32d4f 100644 (file)
@@ -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);
index 77c32521537e3a09d7468d514e9e092151461fe4..f7a2217b11ed943c6f2118248deb44ea55a0bfc6 100644 (file)
@@ -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);
 
index 9c577ac83510f5bb7effcef9e89250c90cf38285..c40ea0efadf118382bf17bce794d4b8a8250792f 100644 (file)
@@ -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);
index 14fc5920bbb4d35508758af12047288de594e10f..cd53c44e9a2c911b7011b015f8311ff083dda041 100644 (file)
@@ -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);
index 37d56ea68b8894dfc8df0e85d1903b69f800e1c3..f565a30d3df94b162f0f86b7a36d469032235d74 100644 (file)
@@ -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;
index 6a07db5610fe1a492e92129e509aded2ed467c94..4b2630b6978db245a76f8c828817ebfa7774a82a 100644 (file)
--- 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
index 2417963ad9b994bd7ffad642ec86e5f7ae662c8a..3a7dcef4624d3fbfde8a294263441c9d8967319f 100644 (file)
@@ -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
 
index f95cf65ffffe56818b551c9c9cc8228059d57d32..277a4fd8fd2304d4511a13ab89b5db59b1826a65 100644 (file)
@@ -15,6 +15,7 @@
 #include <sys/timeb.h>
 
 #include "options.h"
+#include "traps.h"
 #include "uae.h"
 #include "threaddep/thread.h"
 #include "blkdev.h"
index 9af19c1ec3e69e8de51d0adf5175d7240e09d5f6..a6b43751e33957320dcff2b01b936c2af97a14d3 100644 (file)
@@ -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"));
                }
        }
 }
index ce31ee12ae669aeda2bcc7039a28e929b8541195..7a74921d6629709821bcee1dcfaf1855e9a8c0ed 100644 (file)
 #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
 #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
 #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
 #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
index b9a88fc588b7f0550cf030e15e2c76f1f003d18e..919377cc020817fbd2aeaf0618059af89820cef1 100644 (file)
@@ -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
index 9ce8e32aa06b730619aef6509d8dd7cfd886226e..176d4da522b3bc2ce3fb59f129c27e4c30cb760d 100644 (file)
@@ -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)
index d0010db954e9a2c6797dc5e81197c962ba86bdf3..f887120bd1544d7a834a6b1b65217cb859e8abef 100644 (file)
 #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.  */
 
index 1ef39036e03cb1dccb447c10396152424be56188..93b2b8440da6502c3051e4c0e9e6a10bbac4c614 100644 (file)
 #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("")
index 156facd4c1236e315ea40009ce4d18a1f9e10287..c33efaec287431ef83f8f9e3a961db04d6a6b035 100644 (file)
@@ -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;
                                }
                        }
index 8ae11adc1532bb9db090bc7a72a985adcde3df00..78f1a65867c6a0f23d68bb80711f96a525ae223d 100644 (file)
--- 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);
 }