From 82c6116019425968c0be103a76b83b371a4bac3e Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Thu, 24 Oct 2019 18:51:11 +0300 Subject: [PATCH] PCMCIA attribute image support fix, slot was not enable at reset. --- gayle.cpp | 13 +++++++++---- include/gayle.h | 1 - memory.cpp | 1 - 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/gayle.cpp b/gayle.cpp index f06e11c3..5628abab 100644 --- a/gayle.cpp +++ b/gayle.cpp @@ -173,6 +173,7 @@ static int dataflyer_disable_irq; static uae_u8 dataflyer_byte; static void gayle_reset(int hardreset); +static void gayle_map_pcmcia(void); static void pcmcia_reset (void) { @@ -1503,14 +1504,17 @@ static int initpcmcia (const TCHAR *path, int readonly, int type, int reset, str if (pcmcia_disk->hfd.virtsize > 4 * 1024 * 1024) { write_log (_T("PCMCIA SRAM: too large device, %llu bytes\n"), pcmcia_disk->hfd.virtsize); extrasize = pcmcia_disk->hfd.virtsize - 4 * 1024 * 1024; + if (extrasize > 262144) + extrasize = 262144; + extrasize &= ~511; pcmcia_common_size = 4 * 1024 * 1024; } pcmcia_common = xcalloc (uae_u8, pcmcia_common_size); hdf_read (&pcmcia_disk->hfd, pcmcia_common, 0, pcmcia_common_size); pcmcia_card = 1; - if (extrasize >= 256 && extrasize < 1 * 1024 * 1024) { - hdf_read(&pcmcia_disk->hfd, pcmcia_attrs, pcmcia_common_size, 0x40000); - write_log(_T("PCMCIA SRAM: Attribute data read\n")); + if (extrasize >= 512 && extrasize < 1 * 1024 * 1024) { + hdf_read(&pcmcia_disk->hfd, pcmcia_attrs, pcmcia_common_size, extrasize); + write_log(_T("PCMCIA SRAM: Attribute data read %ld bytes\n"), extrasize); pcmcia_attrs_full = 1; } else { initsramattr(pcmcia_common_size, readonly); @@ -1837,7 +1841,7 @@ static void REGPARAM2 gayle_common_bput (uaecptr addr, uae_u32 value) gayle_common_write_byte (addr, value); } -void gayle_map_pcmcia (void) +static void gayle_map_pcmcia (void) { if (currprefs.cs_pcmcia == 0) return; @@ -2151,6 +2155,7 @@ static void gayle_reset (int hardreset) gayle_dataflyer_enable(false); pcmcia_card_check(0, -1); + gayle_map_pcmcia(); } uae_u8 *restore_gayle (uae_u8 *src) diff --git a/include/gayle.h b/include/gayle.h index 94b6dd42..7badbd42 100644 --- a/include/gayle.h +++ b/include/gayle.h @@ -6,7 +6,6 @@ void gayle_add_ide_unit (int ch, struct uaedev_config_info *ci, struct romconfig *rc); bool gayle_ide_init(struct autoconfig_info*); void gayle_free_units (void); -void gayle_map_pcmcia (void); bool gayle_init_pcmcia(struct autoconfig_info *aci); bool gayle_init_board_io_pcmcia(struct autoconfig_info *aci); bool gayle_init_board_common_pcmcia(struct autoconfig_info *aci); diff --git a/memory.cpp b/memory.cpp index d20c2a8e..487d83ad 100644 --- a/memory.cpp +++ b/memory.cpp @@ -2723,7 +2723,6 @@ void memory_reset (void) map_banks (&gayle_bank, 0xD8, 6, 0); map_banks (&gayle2_bank, 0xDD, 2, 0); } - gayle_map_pcmcia (); if (currprefs.cs_ide == IDE_A4000 || is_device_rom(&currprefs, ROMTYPE_SCSI_A4000T, 0)) map_banks (&gayle_bank, 0xDD, 1, 0); if (currprefs.cs_ide < 0 && !currprefs.cs_pcmcia) -- 2.47.3