From 19a376698292f004bfc780c3651c4a03e445d98e Mon Sep 17 00:00:00 2001 From: Toni Wilen Date: Fri, 23 Jan 2015 19:31:06 +0200 Subject: [PATCH] Z3/Z2 autoconfig space/24bit address capable CPU fixes. --- expansion.cpp | 10 +++++----- main.cpp | 5 +++++ ncr9x_scsi.cpp | 3 +++ ncr_scsi.cpp | 3 +++ 4 files changed, 16 insertions(+), 5 deletions(-) diff --git a/expansion.cpp b/expansion.cpp index 7954150c..17d5b28d 100644 --- a/expansion.cpp +++ b/expansion.cpp @@ -339,7 +339,7 @@ static void call_card_init(int index) expamem_init_clear(); expamem_init_clear_zero(); map_banks(&expamem_bank, 0xE8, 1, 0); - if (currprefs.address_space_24) + if (!currprefs.address_space_24) map_banks(&dummy_bank, 0xff000000 >> 16, 1, 0); expamem_bank_current = NULL; return; @@ -405,22 +405,22 @@ static void call_card_init(int index) if (ab) { // non-NULL: not using expamem_bank expamem_bank_current = ab; - if ((card_flags[ecard] & 1) && currprefs.cs_z3autoconfig) { + if ((card_flags[ecard] & 1) && currprefs.cs_z3autoconfig && !currprefs.address_space_24) { map_banks(&expamemz3_bank, 0xff000000 >> 16, 1, 0); map_banks(&dummy_bank, 0xE8, 1, 0); } else { map_banks(&expamem_bank, 0xE8, 1, 0); - if (currprefs.address_space_24) + if (!currprefs.address_space_24) map_banks(&dummy_bank, 0xff000000 >> 16, 1, 0); } } else { - if ((card_flags[ecard] & 1) && currprefs.cs_z3autoconfig) { + if ((card_flags[ecard] & 1) && currprefs.cs_z3autoconfig && !currprefs.address_space_24) { map_banks(&expamemz3_bank, 0xff000000 >> 16, 1, 0); map_banks(&dummy_bank, 0xE8, 1, 0); expamem_bank_current = &expamem_bank; } else { map_banks(&expamem_bank, 0xE8, 1, 0); - if (currprefs.address_space_24) + if (!currprefs.address_space_24) map_banks(&dummy_bank, 0xff000000 >> 16, 1, 0); expamem_bank_current = NULL; } diff --git a/main.cpp b/main.cpp index d2bfb1d8..0255702d 100644 --- a/main.cpp +++ b/main.cpp @@ -464,6 +464,11 @@ void fixup_prefs (struct uae_prefs *p) error_log (_T("Too large Z2 RTG memory size.")); } + if (p->cs_z3autoconfig && p->address_space_24) { + p->cs_z3autoconfig = false; + error_log (_T("Z3 autoconfig and 24bit address space are not compatible.")); + } + #if 0 if (p->m68k_speed < -1 || p->m68k_speed > 20) { write_log (_T("Bad value for -w parameter: must be -1, 0, or within 1..20.\n")); diff --git a/ncr9x_scsi.cpp b/ncr9x_scsi.cpp index d2bc0baa..72d5bd30 100644 --- a/ncr9x_scsi.cpp +++ b/ncr9x_scsi.cpp @@ -805,6 +805,7 @@ static uae_u32 REGPARAM2 ncr9x_bget(struct ncr9x_state *ncr, uaecptr addr) #endif addr &= ncr->board_mask; if (!ncr->configured) { + addr &= 65535; if (addr >= sizeof ncr->acmemory) return 0; return ncr->acmemory[addr]; @@ -842,6 +843,7 @@ static void REGPARAM2 ncr9x_wput(struct ncr9x_state *ncr, uaecptr addr, uae_u32 w &= 0xffff; addr &= ncr->board_mask; if (!ncr->configured) { + addr &= 65535; switch (addr) { case 0x44: @@ -869,6 +871,7 @@ static void REGPARAM2 ncr9x_bput(struct ncr9x_state *ncr, uaecptr addr, uae_u32 b &= 0xff; addr &= ncr->board_mask; if (!ncr->configured) { + addr &= 65535; switch (addr) { case 0x48: diff --git a/ncr_scsi.cpp b/ncr_scsi.cpp index 6ebb5dbd..f01c3950 100644 --- a/ncr_scsi.cpp +++ b/ncr_scsi.cpp @@ -424,6 +424,7 @@ static uae_u32 REGPARAM2 ncr_bget (struct ncr_state *ncr, uaecptr addr) #endif addr &= ncr->board_mask; if (!ncr->configured) { + addr &= 65535; if (addr >= sizeof ncr->acmemory) return 0; return ncr->acmemory[addr]; @@ -485,6 +486,7 @@ static void REGPARAM2 ncr_wput (struct ncr_state *ncr, uaecptr addr, uae_u32 w) w &= 0xffff; addr &= ncr->board_mask; if (!ncr->configured) { + addr &= 65535; switch (addr) { case 0x44: @@ -508,6 +510,7 @@ static void REGPARAM2 ncr_bput (struct ncr_state *ncr, uaecptr addr, uae_u32 b) b &= 0xff; addr &= ncr->board_mask; if (!ncr->configured) { + addr &= 65535; switch (addr) { case 0x4c: -- 2.47.3