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;
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;
_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"),
_T("pcibridge_rom_options"),
_T("cpuboard_ext_rom_file"),
+ _T("uaeboard_mode"),
_T("comp_oldsegv"),
_T("comp_midopt"),
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;
_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);
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);
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);
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]);
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);
}
|| 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)
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)
|| 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;
|| 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;
}
end:
recursive--;
- fixup_prefs (p);
+ fixup_prefs (p, userconfig != 0);
return v;
}
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);
}
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;
}
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:
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;
}
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];
; 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
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
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
bsr.w getrtbase
jsr (a0)
+
+
FSIN_tooold
movem.l (sp)+,d0-d7/a0-a6
.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
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
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
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
; 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.
;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
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
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
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);
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);
#include "uae/types.h"
+#include "traps.h"
+
#define UAEMAJOR 3
#define UAEMINOR 3
#define UAESUBREV 0
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
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];
bool cs_1mchipjumper;
bool cs_cia6526;
bool cs_bytecustomwritebug;
+ bool cs_color_burst;
int cs_hacks;
struct boardromconfig expansionboard[MAX_EXPANSION_BOARDS];
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);
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);
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;
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);
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);
/* 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;
}
}
-void fixup_prefs (struct uae_prefs *p)
+void fixup_prefs (struct uae_prefs *p, bool userconfig)
{
int err = 0;
built_in_chipset_prefs (p);
blkdev_fix_prefs (p);
- inputdevice_fix_prefs(p);
+ inputdevice_fix_prefs(p, userconfig);
target_fixup_options (p);
}
target_cfgfile_load (&currprefs, optionsfile, CONFIG_TYPE_DEFAULT, default_config);
#endif
}
- fixup_prefs (&currprefs);
+ fixup_prefs (&currprefs, false);
parse_cmdline (argc, argv);
}
set_config_changed ();
if (restart_config[0]) {
default_prefs (&currprefs, 0);
- fixup_prefs (&currprefs);
+ fixup_prefs (&currprefs, true);
}
if (! graphics_setup ()) {
if (console_emulation) {
consolehook_config (&currprefs);
- fixup_prefs (&currprefs);
+ fixup_prefs (&currprefs, true);
}
if (! setup_sound ()) {
#endif
#endif
- fixup_prefs (&currprefs);
+ fixup_prefs (&currprefs, true);
#ifdef RETROPLATFORM
rp_fixup_options (&currprefs);
#endif
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
}
#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
#include <sys/timeb.h>
#include "options.h"
+#include "traps.h"
#include "uae.h"
#include "threaddep/thread.h"
#include "blkdev.h"
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"));
}
}
}
#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
// 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
"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
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
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
"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
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
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
BEGIN
IDD_KICKSTART, DIALOG
BEGIN
+ BOTTOMMARGIN, 258
END
IDD_DISPLAY, DIALOG
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;
_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)
#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. */
#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("")
#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
/* 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);
}
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);
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);
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;
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);
: 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;
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)
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)
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)
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);
case IDC_ROMFILE:
case IDC_ROMFILE2:
case IDC_CARTFILE:
+ case IDC_UAEBOARD_TYPE:
values_from_kickstartdlg (hDlg);
break;
}
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);
#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;
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);
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;
}
}
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])
}
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;
}
} 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);
}
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;
{
if (!sd)
return;
- hdf_hd_close (sd->hfd);
+ hdf_hd_close(sd->hdhfd);
scsi_free (sd);
}