#include "savestate.h"
#include "scsi.h"
#include "devices.h"
+#include "rommgr.h"
/* DMAC CNTR bits. */
#define CNTR_TCEN (1<<7)
#define CDTV_NVRAM_SIZE 32768
static uae_u8 cdtv_battram[CDTV_NVRAM_SIZE];
-void cdtv_loadcardmem (uae_u8 *p, int size)
+static void cdtv_loadcardmem (uae_u8 *p, int size)
{
struct zfile *f;
+ if (!size)
+ return;
memset (p, 0, size);
f = zfile_fopen (currprefs.flashfile, _T("rb"), ZFD_NORMAL);
if (!f)
zfile_fclose (f);
}
-void cdtv_savecardmem (uae_u8 *p, int size)
+static void cdtv_savecardmem (uae_u8 *p, int size)
{
struct zfile *f;
+ if (!size)
+ return;
f = zfile_fopen (currprefs.flashfile, _T("rb+"), ZFD_NORMAL);
if (!f)
return;
return v;
}
+/* CDTV expension memory card memory */
+
+MEMORY_FUNCTIONS(cardmem);
+
+static addrbank cardmem_bank = {
+ cardmem_lget, cardmem_wget, cardmem_bget,
+ cardmem_lput, cardmem_wput, cardmem_bput,
+ cardmem_xlate, cardmem_check, NULL, _T("rom_e0"), _T("CDTV memory card"),
+ cardmem_lget, cardmem_wget,
+ ABFLAG_RAM, 0, 0
+};
+
void cdtv_free (void)
{
if (thread_alive > 0) {
}
thread_alive = 0;
close_unit ();
+ if (cardmem_bank.baseaddr) {
+ cdtv_savecardmem(cardmem_bank.baseaddr, cardmem_bank.allocated_size);
+ mapped_free(&cardmem_bank);
+ cardmem_bank.baseaddr = NULL;
+ }
configured = 0;
}
-bool cdtv_init (struct autoconfig_info *aci)
+bool cdtvsram_init(struct autoconfig_info *aci)
+{
+ return true;
+}
+
+bool cdtv_init(struct autoconfig_info *aci)
{
memset(dmacmemory, 0xff, sizeof dmacmemory);
ew(0x00, 0xc0 | 0x01);
cdtvscsi = 0;
}
+ int cardsize = 0;
+ if (is_board_enabled(aci->prefs, ROMTYPE_CDTVSRAM, 0)) {
+ struct romconfig *rc = get_device_romconfig(aci->prefs, ROMTYPE_CDTVSRAM, 0);
+ cardsize = 64 << (rc->device_settings & 3);
+ }
+ if (cardmem_bank.reserved_size != cardsize * 1024) {
+ mapped_free(&cardmem_bank);
+ cardmem_bank.baseaddr = NULL;
+
+ cardmem_bank.reserved_size = cardsize * 1024;
+ cardmem_bank.mask = cardmem_bank.reserved_size - 1;
+ cardmem_bank.start = 0xe00000;
+ if (cardmem_bank.reserved_size) {
+ if (!mapped_malloc(&cardmem_bank)) {
+ write_log(_T("Out of memory for cardmem.\n"));
+ cardmem_bank.reserved_size = 0;
+ }
+ }
+ cdtv_loadcardmem(cardmem_bank.baseaddr, cardmem_bank.reserved_size);
+ }
+ if (cardmem_bank.baseaddr)
+ map_banks(&cardmem_bank, cardmem_bank.start >> 16, cardmem_bank.allocated_size >> 16, 0);
+
cdtv_battram_reset ();
open_unit ();
gui_flicker_led (LED_CD, 0, -1);
_T("gfx_filter_vert_zoom"),_T("gfx_filter_horiz_zoom"),
_T("gfx_filter_vert_zoom_mult"), _T("gfx_filter_horiz_zoom_mult"),
_T("gfx_filter_vert_offset"), _T("gfx_filter_horiz_offset"),
+ _T("gfx_tearing"), _T("gfx_tearing_rtg"),
// created by some buggy beta
_T("uaehf0%s,%s"),
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_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);
static int cfgfile_parse_hardware (struct uae_prefs *p, const TCHAR *option, TCHAR *value)
{
int tmpval, dummyint, i;
+ uae_u32 utmpval;
bool dummybool;
TCHAR tmpbuf[CONFIG_BLEN];
|| cfgfile_intval(option, value, _T("serial_stopbits"), &p->serial_stopbits, 1)
|| cfgfile_intval(option, value, _T("cpu060_revision"), &p->cpu060_revision, 1)
|| cfgfile_intval(option, value, _T("fpu_revision"), &p->fpu_revision, 1)
- || cfgfile_intval(option, value, _T("cdtvramcard"), &p->cs_cdtvcard, 1)
|| cfgfile_intval(option, value, _T("fatgary"), &p->cs_fatgaryrev, 1)
|| cfgfile_intval(option, value, _T("ramsey"), &p->cs_ramseyrev, 1)
|| cfgfile_doubleval(option, value, _T("chipset_refreshrate"), &p->chipset_refreshrate)
return 1;
}
+ if (cfgfile_intval(option, value, _T("cdtvramcard"), &utmpval, 1)) {
+ if (utmpval)
+ addbcromtype(p, ROMTYPE_CDTVSRAM, true, NULL, 0);
+ return 1;
+ }
+
if (cfgfile_yesno(option, value, _T("scsi_cdtv"), &tmpval)) {
if (tmpval)
addbcromtype(p, ROMTYPE_CDTVSCSI, true, NULL, 0);
p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = p->cs_cd32fmv = false;
p->cs_cd32nvram_size = 1024;
p->cs_cdtvcd = p->cs_cdtvram = false;
- p->cs_cdtvcard = 0;
p->cs_pcmcia = 0;
p->cs_ksmirror_e0 = 1;
p->cs_ksmirror_a8 = 0;
p->cs_deniserev = -1;
p->cs_mbdmac = 0;
p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = p->cs_cd32fmv = false;
- p->cs_cdtvcd = p->cs_cdtvram = p->cs_cdtvcard = false;
+ p->cs_cdtvcd = p->cs_cdtvram = false;
p->cs_ide = 0;
p->cs_pcmcia = 0;
p->cs_ksmirror_e0 = 1;
p->chipmem_size = 0x100000;
p->chipset_mask = CSMASK_ECS_AGNUS;
p->cs_cdtvcd = p->cs_cdtvram = 1;
- if (config > 0)
- p->cs_cdtvcard = 64;
+ if (config > 0) {
+ addbcromtype(p, ROMTYPE_CDTVSRAM, true, NULL, 0);
+ }
p->cs_rtc = 1;
p->nr_floppies = 0;
p->floppyslots[0].dfxtype = DRV_NONE;
p->cs_a1000ram = 0;
p->cs_cd32c2p = p->cs_cd32cd = p->cs_cd32nvram = 0;
p->cs_cdtvcd = p->cs_cdtvram = p->cs_cdtvcr = 0;
- p->cs_cdtvcard = 0;
p->cs_fatgaryrev = -1;
p->cs_ide = 0;
p->cs_ramseyrev = -1;
currprefs.cs_cd32nvram = changed_prefs.cs_cd32nvram = RBB;
currprefs.cs_cdtvcd = changed_prefs.cs_cdtvcd = RBB;
currprefs.cs_cdtvram = changed_prefs.cs_cdtvram = RBB;
- currprefs.cs_cdtvcard = changed_prefs.cs_cdtvcard = RB;
+ RB;
currprefs.cs_df0idhw = changed_prefs.cs_df0idhw = RBB;
currprefs.cs_dipagnus = changed_prefs.cs_dipagnus = RBB;
SB (currprefs.cs_cd32nvram);
SB (currprefs.cs_cdtvcd ? 1 : 0);
SB (currprefs.cs_cdtvram ? 1 : 0);
- SB (currprefs.cs_cdtvcard);
+ SB (0);
SB (currprefs.cs_df0idhw ? 1 : 0);
SB (currprefs.cs_dipagnus ? 1 : 0);
NULL
}
};
-
+static const struct expansionboardsettings cdtvsram_settings[] = {
+ {
+ _T("SRAM size\0") _T("64k\0") _T("128k\0") _T("256k\0"),
+ _T("sram\0") _T("64k\0") _T("128k\0") _T("256k\0"),
+ true
+ },
+ {
+ NULL
+ }
+};
const struct expansionromtype expansionroms[] = {
NULL, 0,
false, EXPANSIONTYPE_INTERNAL | EXPANSIONTYPE_SCSI
},
+ {
+ _T("cdtvsram"), _T("CDTV SRAM"), _T("Commodore"),
+ NULL, cdtvsram_init, NULL, NULL, ROMTYPE_CDTVSRAM | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_BEFORE, true,
+ NULL, 0,
+ false, EXPANSIONTYPE_INTERNAL,
+ 0, 0, 0, false, NULL,
+ false, 0, cdtvsram_settings
+ },
{
_T("cdtvcr"), _T("CDTV-CR"), _T("Commodore"),
NULL, cdtvcr_init, NULL, NULL, ROMTYPE_CDTVCR | ROMTYPE_NOT, 0, 0, BOARD_NONAUTOCONFIG_AFTER_Z2, true,
void cdtv_battram_write (int addr, int v);
uae_u8 cdtv_battram_read (int addr);
-extern void cdtv_loadcardmem (uae_u8*, int);
-extern void cdtv_savecardmem (uae_u8*, int);
-
extern void cdtv_add_scsi_unit (int ch, struct uaedev_config_info *ci, struct romconfig *rc);
extern bool cdtvscsi_init(struct autoconfig_info *aci);
+extern bool cdtvsram_init(struct autoconfig_info *aci);
extern void cdtv_getdmadata (uae_u32*);
int cs_cd32nvram_size;
bool cs_cdtvcd;
bool cs_cdtvram;
- int cs_cdtvcard;
int cs_ide;
bool cs_pcmcia;
bool cs_a1000ram;
#define ROMTYPE_ELSATHD 0x00100071
#define ROMTYPE_ALF3 0x00100072
#define ROMTYPE_FASTTRAK 0x00100073
+#define ROMTYPE_CDTVSRAM 0x00100074
#define ROMTYPE_NOT 0x00800000
#define ROMTYPE_QUAD 0x01000000
struct boardromconfig *get_boardromconfig(struct uae_prefs *p, int romtype, int *index);
bool is_board_enabled(struct uae_prefs *p, int romtype, int devnum);
void board_prefs_changed(int romtype, int devnum);
-void check_board_prefs_changed(void);
#define LOADROM_FILL 1
#define LOADROM_EVENONLY 2
MEMORY_FUNCTIONS(bogomem);
-/* CDTV expension memory card memory */
-
-MEMORY_FUNCTIONS(cardmem);
-
/* A3000 motherboard fast memory */
MEMORY_FUNCTIONS(a3000lmem);
ABFLAG_RAM | ABFLAG_THREADSAFE | ABFLAG_CACHE_ENABLE_BOTH, 0, 0
};
-addrbank cardmem_bank = {
- cardmem_lget, cardmem_wget, cardmem_bget,
- cardmem_lput, cardmem_wput, cardmem_bput,
- cardmem_xlate, cardmem_check, NULL, _T("rom_e0"), _T("CDTV memory card"),
- cardmem_lget, cardmem_wget,
- ABFLAG_RAM, 0, 0
-};
-
addrbank mem25bit_bank = {
mem25bit_lget, mem25bit_wget, mem25bit_bget,
mem25bit_lput, mem25bit_wput, mem25bit_bput,
}
need_hardreset = true;
}
-#ifdef CDTV
- if (cardmem_bank.reserved_size != currprefs.cs_cdtvcard * 1024) {
- mapped_free (&cardmem_bank);
- cardmem_bank.baseaddr = NULL;
-
- cardmem_bank.reserved_size = currprefs.cs_cdtvcard * 1024;
- cardmem_bank.mask = cardmem_bank.reserved_size - 1;
- cardmem_bank.start = 0xe00000;
- if (cardmem_bank.reserved_size) {
- if (!mapped_malloc (&cardmem_bank)) {
- write_log (_T("Out of memory for cardmem.\n"));
- cardmem_bank.reserved_size = 0;
- }
- }
- cdtv_loadcardmem(cardmem_bank.baseaddr, cardmem_bank.reserved_size);
- }
-#endif
if (custmem1_bank.reserved_size != currprefs.custom_memory_sizes[0]) {
mapped_free (&custmem1_bank);
custmem1_bank.reserved_size = currprefs.custom_memory_sizes[0];
currprefs.cs_ksmirror_a8 = changed_prefs.cs_ksmirror_a8;
currprefs.cs_ciaoverlay = changed_prefs.cs_ciaoverlay;
currprefs.cs_cdtvram = changed_prefs.cs_cdtvram;
- currprefs.cs_cdtvcard = changed_prefs.cs_cdtvcard;
currprefs.cs_a1000ram = changed_prefs.cs_a1000ram;
currprefs.cs_ide = changed_prefs.cs_ide;
currprefs.cs_fatgaryrev = changed_prefs.cs_fatgaryrev;
map_banks(&a3000hmem_bank, a3000hmem_bank.start >> 16, a3000hmem_bank.allocated_size >> 16, 0);
if (debugmem_bank.baseaddr)
map_banks(&debugmem_bank, debugmem_bank.start >> 16, debugmem_bank.allocated_size >> 16, 0);
-#ifdef CDTV
- if (cardmem_bank.baseaddr)
- map_banks (&cardmem_bank, cardmem_bank.start >> 16, cardmem_bank.allocated_size >> 16, 0);
-#endif
cpuboard_map();
map_banks_set(&kickmem_bank, 0xF8, 8, 0);
if (currprefs.maprom) {
a3000lmem_bank.reserved_size = a3000hmem_bank.reserved_size = 0;
a3000lmem_bank.baseaddr = a3000hmem_bank.baseaddr = NULL;
bogomem_bank.baseaddr = NULL;
- cardmem_bank.baseaddr = NULL;
custmem1_bank.reserved_size = custmem2_bank.reserved_size = 0;
custmem1_bank.baseaddr = NULL;
custmem2_bank.baseaddr = NULL;
mapped_free(&kickmem_bank);
xfree(a1000_bootrom);
mapped_free(&chipmem_bank);
-#ifdef CDTV
- if (cardmem_bank.baseaddr) {
- cdtv_savecardmem (cardmem_bank.baseaddr, cardmem_bank.allocated_size);
- mapped_free (&cardmem_bank);
- }
-#endif
mapped_free(&custmem1_bank);
mapped_free(&custmem2_bank);
mapped_free(&fakeuaebootrom_bank);
a1000_bootrom = NULL;
a1000_kickstart_mode = 0;
chipmem_bank.baseaddr = NULL;
- cardmem_bank.baseaddr = NULL;
custmem1_bank.baseaddr = NULL;
custmem2_bank.baseaddr = NULL;
#define IDC_CS_DMAC 1727
#define IDC_CS_RTCADJUST 1728
#define IDC_CS_FATGARYREV 1729
-#define IDC_CS_CDTVRAMEXP 1730
#define IDC_CS_RTC1 1731
#define IDC_CS_RTC2 1732
#define IDC_CS_RTC3 1733
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,184,130,11
CONTROL "DF0: ID Hardware",IDC_CS_DF0IDHW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,93,125,11
CONTROL "CD32 NVRAM",IDC_CS_CD32NVRAM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,106,125,11
- CONTROL "CDTV SRAM Expansion",IDC_CS_CDTVRAMEXP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,119,125,11
- CONTROL "CDTV-CR",IDC_CS_CDTVCR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,132,123,11
- CONTROL "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,145,125,11
- CONTROL "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,158,125,11
- CONTROL "A1000 Agnus (8361/8367)",IDC_CS_DIPAGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,171,125,11
- CONTROL "Composite color burst",IDC_CS_COMPOSITECOLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,184,125,12
+ CONTROL "CDTV-CR",IDC_CS_CDTVCR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,119,123,11
+ CONTROL "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,132,125,11
+ CONTROL "C00000 is Fast RAM",IDC_CS_SLOWISFAST,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,145,125,11
+ CONTROL "A1000 Agnus (8361/8367)",IDC_CS_DIPAGNUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,158,125,11
+ CONTROL "Composite color burst",IDC_CS_COMPOSITECOLOR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,171,125,12
GROUPBOX "Internal SCSI Hardware",IDC_STATIC,0,232,395,30
CONTROL "A3000 WD33C93 SCSI",IDC_CS_DMAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,84,247,108,11
CONTROL "A4000T NCR53C710 SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,200,247,125,11
CONTROL "Toshiba Gary",IDC_CS_TOSHIBAGARY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,197,106,12
CONTROL "KS ROM has Chip RAM speed",IDC_CS_ROMISSLOW,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,127,198,125,12
CONTROL "CIA 391078-01 [] CIA revision that can't read IO pin status in output mode",IDC_CS_CIA,
- "Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,198,125,12
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,264,185,125,12
END
IDD_AVIOUTPUT DIALOGEX 0, 0, 396, 260
CheckDlgButton(hDlg, IDC_CS_CDTVCD, workprefs.cs_cdtvcd);
CheckDlgButton(hDlg, IDC_CS_CDTVCR, workprefs.cs_cdtvcr);
CheckDlgButton(hDlg, IDC_CS_CDTVRAM, workprefs.cs_cdtvram);
- CheckDlgButton(hDlg, IDC_CS_CDTVRAMEXP, workprefs.cs_cdtvcard);
CheckDlgButton(hDlg, IDC_CS_A1000RAM, workprefs.cs_a1000ram);
CheckDlgButton(hDlg, IDC_CS_RAMSEY, workprefs.cs_ramseyrev >= 0);
CheckDlgButton(hDlg, IDC_CS_FATGARY, workprefs.cs_fatgaryrev >= 0);
workprefs.cs_cdtvcd = ischecked (hDlg, IDC_CS_CDTVCD);
workprefs.cs_cdtvcr = ischecked (hDlg, IDC_CS_CDTVCR);
workprefs.cs_cdtvram = ischecked (hDlg, IDC_CS_CDTVRAM);
- workprefs.cs_cdtvcard = ischecked (hDlg, IDC_CS_CDTVRAMEXP) ? 64 : 0;
workprefs.cs_a1000ram = ischecked (hDlg, IDC_CS_A1000RAM);
workprefs.cs_ramseyrev = ischecked (hDlg, IDC_CS_RAMSEY) ? 0x0f : -1;
workprefs.cs_fatgaryrev = ischecked (hDlg, IDC_CS_FATGARY) ? 0x00 : -1;
ew(hDlg, IDC_CS_CDTVCD, e);
ew(hDlg, IDC_CS_CDTVCR, e);
ew(hDlg, IDC_CS_CDTVRAM, e);
- ew(hDlg, IDC_CS_CDTVRAMEXP, e);
ew(hDlg, IDC_CS_RESETWARNING, e);
ew(hDlg, IDC_CS_CIATODBUG, e);
ew(hDlg, IDC_CS_NOEHB, e);