]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Z3/Z2 autoconfig space/24bit address capable CPU fixes.
authorToni Wilen <twilen@winuae.net>
Fri, 23 Jan 2015 17:31:06 +0000 (19:31 +0200)
committerToni Wilen <twilen@winuae.net>
Fri, 23 Jan 2015 17:31:06 +0000 (19:31 +0200)
expansion.cpp
main.cpp
ncr9x_scsi.cpp
ncr_scsi.cpp

index 7954150c1242c2c2489e4651e10ae63cb12a092e..17d5b28df09489c06c9261b01ffd7addf446b369 100644 (file)
@@ -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;
                }
index d2bfb1d89f54f406936980cfc53f64b43c009e7c..0255702d8d69f956bc6564873faf7f5e92e0f33e 100644 (file)
--- 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"));
index d2bc0baa11da67266754a4ead80ef9ce15d03660..72d5bd30b4fd22ecbe3624545d01898c1beb409e 100644 (file)
@@ -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:
index 6ebb5dbdcd6aec9efd28d23439c98b30a9662e65..f01c395039e9c68700438d4690734d831cad212e 100644 (file)
@@ -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: