Previous 15994 Revisions Next

r9552 Wednesday 10th November, 2010 at 19:02:38 UTC by Fabio Priuli
Fixing SRAM regression in Donkey Kong Country
[src/mame/machine]snes.c

src/mame/machine/snes.c
r9551r9552
10051005      }
10061006      else if ((state->cart[0].mode == SNES_MODE_21) && (state->cart[0].sram > 0))
10071007      {
1008//          int mask = state->cart[0].sram - 1; /* Limit SRAM size to what's actually present */
1009         value = snes_ram[0x300000 + offset];
1008         /* Donkey Kong Country checks this */
1009         int mask = state->cart[0].sram - 1; /* Limit SRAM size to what's actually present */
1010         value = snes_ram[0x300000 + (offset & mask)];
10101011      }
10111012      else
10121013      {
r9551r9552
11761177            value = space->read_byte(offset);
11771178         else if ((offset >= 0x300000) && (state->cart[0].sram > 0))
11781179         {
1179//              int mask = state->cart[0].sram - 1; /* Limit SRAM size to what's actually present */
1180            value = snes_ram[0x800000 + offset];
1180            int mask = (state->cart[0].sram - 1) | 0xff0000; /* Limit SRAM size to what's actually present */
1181            value = snes_ram[0x800000 + (offset & mask)];
11811182         }
11821183         else                  /* Area 0x6000-0x8000 with offset < 0x300000 is reserved */
11831184         {
r9551r9552
13441345      }
13451346      else if ((state->cart[0].mode == SNES_MODE_21) && (state->cart[0].sram > 0))
13461347      {
1347//          int mask = state->cart[0].sram - 1; /* Limit SRAM size to what's actually present */
1348         snes_ram[0x300000 + offset] = data;
1348         /* Donkey Kong Country checks this */
1349         int mask = state->cart[0].sram - 1; /* Limit SRAM size to what's actually present */
1350         snes_ram[0x300000 + (offset & mask)] = data;
13491351      }
13501352      else
13511353         logerror("snes_w_bank2: Attempt to write to reserved address: %X = %02x\n", offset + 0x300000, data);
r9551r9552
14141416      if (state->cart[0].sram > 0)
14151417      {
14161418         int mask = state->cart[0].sram - 1;   /* Limit SRAM size to what's actually present */
1417         snes_ram[0x700000 + + (offset & mask)] = data;
1419         snes_ram[0x700000 + (offset & mask)] = data;
14181420      }
14191421      else
14201422         logerror("snes_w_bank5: Attempt to write to reserved address: %X = %02x\n", offset + 0x700000, data);
r9551r9552
14491451            space->write_byte(offset, data);
14501452         else if ((offset >= 0x300000) && (state->cart[0].sram > 0))
14511453         {
1454            int mask = (state->cart[0].sram - 1) | 0xff0000; /* Limit SRAM size to what's actually present */
14521455//              int mask = state->cart[0].sram - 1; /* Limit SRAM size to what's actually present */
1453            snes_ram[0x800000 + offset] = data;
1456            snes_ram[0x800000 + (offset & mask)] = data;
14541457         }
14551458         else   /* Area in 0x6000-0x8000 && offset < 0x300000 is Reserved! */
14561459            logerror("snes_w_bank6: Attempt to write to reserved address: %X = %02x\n", offset + 0x800000, data);

Previous 15994 Revisions Next


© 1998-2018 The MESS Team