Previous 199869 Revisions Next

r32466 Monday 29th September, 2014 at 18:08:35 UTC by Fabio Priuli
(MESS) saturn: made RAM / Backup RAM expansion internal
slot options. you now mount these with the -cart media switch,
i.e. for instance
 mess.exe saturn -cdrm ddsom -cart ram32
or
 mess.exe saturn -cdrm draculax -cart bram16
and not anymore using the -exp option. [Fabio Priuli]

out of whatsnew: this prevents users from passing conflicting setups like
"-exp ram32 -cart kof95", etc. these would have lead to unpredictable effects,
depending on the order of the option (and whether they were set at command
line or inside ini files)
[hash]sat_cart.xml
[src/emu/bus/saturn]bram.c bram.h dram.c dram.h sat_slot.c sat_slot.h
[src/mess/drivers]saturn.c

trunk/hash/sat_cart.xml
r32465r32466
1313      <publisher>SNK</publisher>
1414      <info name="serial" value="T-3101G" />
1515      <part name="cart" interface="sat_cart">
16         <feature name="slot" value="rom" />
17
1618         <!-- PCB info from Jpn cart pic -->
1719         <feature name="pcb" value="171-7088A" />
1820         <feature name="ic1" value="MPR-18811-MX" />
19         <dataarea name="cart" size="0x200000">
21         <dataarea name="rom" size="0x200000">
2022            <rom name="mpr-18811-mx.ic1" size="0x200000" crc="90412e10" sha1="a67cd4f550751f8b91de2b8b74528ab4e0c11c77" offset="0" />
2123         </dataarea>
2224      </part>
r32465r32466
2729      <year>1995</year>
2830      <publisher>Bandai</publisher>
2931      <part name="cart" interface="sat_cart">
30         <dataarea name="cart" size="0x200000">
32         <feature name="slot" value="rom" />
33         <dataarea name="rom" size="0x200000">
3134            <rom name="mpr-19367-mx.ic1" size="0x200000" crc="b9644b52" sha1="56c1b93da6b660bf393fbf48ca47569000ef4047" offset="0" />
3235         </dataarea>
3336      </part>
r32465r32466
3841      <year>1994</year>
3942      <publisher>Sega</publisher>
4043      <part name="cart" interface="sat_cart">
41         <dataarea name="cart" size="0x80000">
44         <feature name="slot" value="rom" />
45         <dataarea name="rom" size="0x80000">
4246            <rom name="sega saturn test menu v1.0f.bin" size="0x80000" crc="17031c7a" sha1="433cb101bb6e61873778dfcd61a65c72ec552dd9" offset="0" />
4347         </dataarea>
4448      </part>
r32465r32466
5054      <year>199?</year>
5155      <publisher>&lt;unknown&gt;</publisher>
5256      <part name="cart" interface="sat_cart">
53         <dataarea name="cart" size="84069">
57         <feature name="slot" value="rom" />
58         <dataarea name="rom" size="84069">
5459            <rom name="action replay rom.bin" size="84069" crc="cc518d69" sha1="8c091285a2fc863c8b3e6e9e5849a8a3469e02ff" offset="0" />
5560         </dataarea>
5661      </part>
5762   </software>
5863
64<!-- RAM cartridges -->
65
66   <software name="ram8">
67      <description>Extended RAM 8Mbit cartridge</description>
68      <year>199?</year>
69      <publisher>Sega</publisher>
70      <part name="cart" interface="sat_cart">
71         <feature name="slot" value="ram8" />
72         <dataarea name="dram0" size="0x80000">
73         </dataarea>
74         <dataarea name="dram1" size="0x80000">
75         </dataarea>
76      </part>
77   </software>
78
79   <software name="ram32">
80      <description>Extended RAM 32Mbit cartridge</description>
81      <year>199?</year>
82      <publisher>Sega</publisher>
83      <part name="cart" interface="sat_cart">
84         <feature name="slot" value="ram32" />
85         <dataarea name="dram0" size="0x200000">
86         </dataarea>
87         <dataarea name="dram1" size="0x200000">
88         </dataarea>
89      </part>
90   </software>
91
92   <software name="bram4">
93      <description>Backup RAM 4Mbit cartridge</description>
94      <year>199?</year>
95      <publisher>Sega</publisher>
96      <part name="cart" interface="sat_cart">
97         <feature name="slot" value="bram4" />
98         <dataarea name="bram" size="0x80000">
99         </dataarea>
100      </part>
101   </software>
102
103   <software name="bram8">
104      <description>Backup RAM 8Mbit cartridge</description>
105      <year>199?</year>
106      <publisher>Sega</publisher>
107      <part name="cart" interface="sat_cart">
108         <feature name="slot" value="bram8" />
109         <dataarea name="bram" size="0x100000">
110         </dataarea>
111      </part>
112   </software>
113
114   <software name="bram16">
115      <description>Backup RAM 16Mbit cartridge</description>
116      <year>199?</year>
117      <publisher>Sega</publisher>
118      <part name="cart" interface="sat_cart">
119         <feature name="slot" value="bram16" />
120         <dataarea name="bram" size="0x200000">
121         </dataarea>
122      </part>
123   </software>
124
125   <software name="bram32">
126      <description>Backup RAM 32Mbit cartridge</description>
127      <year>199?</year>
128      <publisher>Sega</publisher>
129      <part name="cart" interface="sat_cart">
130         <feature name="slot" value="bram32" />
131         <dataarea name="bram" size="0x400000">
132         </dataarea>
133      </part>
134   </software>
135
136
59137</softwarelist>
trunk/src/emu/bus/saturn/bram.c
r32465r32466
1919const device_type SATURN_BRAM_32MB = &device_creator<saturn_bram32mb_device>;
2020
2121
22saturn_bram_device::saturn_bram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 size, const char *shortname, const char *source)
22saturn_bram_device::saturn_bram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
2323               : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
2424                  device_sat_cart_interface( mconfig, *this ),
25                  device_nvram_interface(mconfig, *this),
26                  m_size(size)
25                  device_nvram_interface(mconfig, *this)
2726{
2827}
2928
3029saturn_bram4mb_device::saturn_bram4mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
31               : saturn_bram_device(mconfig, SATURN_BRAM_4MB, "Saturn Battery RAM 4Mbit Cart", tag, owner, clock, 0x80000, "sat_bram_4mb", __FILE__)
30               : saturn_bram_device(mconfig, SATURN_BRAM_4MB, "Saturn Battery RAM 4Mbit Cart", tag, owner, clock, "sat_bram_4mb", __FILE__)
3231{
3332   m_cart_type = 0x21;
3433}
3534
3635saturn_bram8mb_device::saturn_bram8mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
37               : saturn_bram_device(mconfig, SATURN_BRAM_8MB, "Saturn Battery RAM 8Mbit Cart", tag, owner, clock, 0x100000, "sat_bram_8mb", __FILE__)
36               : saturn_bram_device(mconfig, SATURN_BRAM_8MB, "Saturn Battery RAM 8Mbit Cart", tag, owner, clock, "sat_bram_8mb", __FILE__)
3837{
3938   m_cart_type = 0x22;
4039}
4140
4241saturn_bram16mb_device::saturn_bram16mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
43               : saturn_bram_device(mconfig, SATURN_BRAM_16MB, "Saturn Battery RAM 16Mbit Cart", tag, owner, clock, 0x200000, "sat_bram_16mb", __FILE__)
42               : saturn_bram_device(mconfig, SATURN_BRAM_16MB, "Saturn Battery RAM 16Mbit Cart", tag, owner, clock, "sat_bram_16mb", __FILE__)
4443{
4544   m_cart_type = 0x23;
4645}
4746
4847saturn_bram32mb_device::saturn_bram32mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
49               : saturn_bram_device(mconfig, SATURN_BRAM_32MB, "Saturn Battery RAM 32Mbit Cart", tag, owner, clock, 0x400000, "sat_bram_32mb", __FILE__)
48               : saturn_bram_device(mconfig, SATURN_BRAM_32MB, "Saturn Battery RAM 32Mbit Cart", tag, owner, clock, "sat_bram_32mb", __FILE__)
5049{
5150   m_cart_type = 0x24;
5251}
r32465r32466
5857
5958void saturn_bram_device::device_start()
6059{
61   m_ext_bram.resize(m_size);
62   save_item(NAME(m_ext_bram));
6360}
6461
6562void saturn_bram_device::device_reset()
r32465r32466
8885
8986READ32_MEMBER(saturn_bram_device::read_ext_bram)
9087{
91   if (offset < m_size/2)
88   if (offset < m_ext_bram.bytes()/2)
9289      return (m_ext_bram[offset * 2] << 16) | m_ext_bram[offset * 2 + 1];
9390   else
9491   {
95      osd_printf_error("Battery RAM read beyond its boundary! offs: %X\n", offset);
92      popmessage("Battery RAM read beyond its boundary! offs: %X\n", offset);
9693      return 0xffffffff;
9794   }
9895}
9996
10097WRITE32_MEMBER(saturn_bram_device::write_ext_bram)
10198{
102   if (offset < m_size/2)
99   if (offset < m_ext_bram.bytes()/2)
103100   {
104101      if (ACCESSING_BITS_16_23)
105102         m_ext_bram[offset * 2 + 0] = (data & 0x00ff0000) >> 16;
r32465r32466
107104         m_ext_bram[offset * 2 + 1] = (data & 0x000000ff) >> 0;
108105   }
109106   else
110      osd_printf_error("Battery RAM write beyond its boundary! offs: %X data: %X\n", offset, data);
107      popmessage("Battery RAM write beyond its boundary! offs: %X data: %X\n", offset, data);
111108}
trunk/src/emu/bus/saturn/dram.c
r32465r32466
1717const device_type SATURN_DRAM_32MB = &device_creator<saturn_dram32mb_device>;
1818
1919
20saturn_dram_device::saturn_dram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 size, const char *shortname, const char *source)
20saturn_dram_device::saturn_dram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
2121               : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
22                  device_sat_cart_interface( mconfig, *this ),
23                  m_size(size)
22                  device_sat_cart_interface( mconfig, *this )
2423{
2524}
2625
2726saturn_dram8mb_device::saturn_dram8mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
28               : saturn_dram_device(mconfig, SATURN_DRAM_8MB, "Saturn Data RAM 8Mbit Cart", tag, owner, clock, 0x100000, "sat_dram_8mb", __FILE__)
27               : saturn_dram_device(mconfig, SATURN_DRAM_8MB, "Saturn Data RAM 8Mbit Cart", tag, owner, clock, "sat_dram_8mb", __FILE__)
2928{
3029   m_cart_type = 0x5a;
3130}
3231
3332saturn_dram32mb_device::saturn_dram32mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
34               : saturn_dram_device(mconfig, SATURN_DRAM_32MB, "Saturn Data RAM 32Mbit Cart", tag, owner, clock, 0x400000, "sat_dram_32mb", __FILE__)
33               : saturn_dram_device(mconfig, SATURN_DRAM_32MB, "Saturn Data RAM 32Mbit Cart", tag, owner, clock, "sat_dram_32mb", __FILE__)
3534{
3635   m_cart_type = 0x5c;
3736}
r32465r32466
4342
4443void saturn_dram_device::device_start()
4544{
46   m_ext_dram0.resize((m_size/2)/sizeof(UINT32));
47   m_ext_dram1.resize((m_size/2)/sizeof(UINT32));
48   save_item(NAME(m_ext_dram0));
49   save_item(NAME(m_ext_dram1));
5045}
5146
5247void saturn_dram_device::device_reset()
r32465r32466
6257
6358READ32_MEMBER(saturn_dram_device::read_ext_dram0)
6459{
65   if (offset < (m_size/2)/4)
66      return m_ext_dram0[offset];
60   if (offset < (0x400000/2)/4)
61      return m_ext_dram0[offset % m_ext_dram0.count()];
6762   else
6863   {
69      osd_printf_error("DRAM0 read beyond its boundary! offs: %X\n", offset);
64      popmessage("DRAM0 read beyond its boundary! offs: %X\n", offset);
7065      return 0xffffffff;
7166   }
7267}
7368
7469READ32_MEMBER(saturn_dram_device::read_ext_dram1)
7570{
76   if (offset < (m_size/2)/4)
77      return m_ext_dram1[offset];
71   if (offset < (0x400000/2)/4)
72      return m_ext_dram1[offset % m_ext_dram1.count()];
7873   else
7974   {
80      osd_printf_error("DRAM1 read beyond its boundary! offs: %X\n", offset);
75      popmessage("DRAM1 read beyond its boundary! offs: %X\n", offset);
8176      return 0xffffffff;
8277   }
8378}
8479
8580WRITE32_MEMBER(saturn_dram_device::write_ext_dram0)
8681{
87   if (offset < (m_size/2)/4)
88      COMBINE_DATA(&m_ext_dram0[offset]);
82   if (offset < (0x400000/2)/4)
83      COMBINE_DATA(&m_ext_dram0[offset % m_ext_dram0.count()]);
8984   else
90      osd_printf_error("DRAM0 write beyond its boundary! offs: %X data: %X\n", offset, data);
85      popmessage("DRAM0 write beyond its boundary! offs: %X data: %X\n", offset, data);
9186}
9287
9388WRITE32_MEMBER(saturn_dram_device::write_ext_dram1)
9489{
95   if (offset < (m_size/2)/4)
96      COMBINE_DATA(&m_ext_dram1[offset]);
90   if (offset < (0x400000/2)/4)
91      COMBINE_DATA(&m_ext_dram1[offset % m_ext_dram1.count()]);
9792   else
98      osd_printf_error("DRAM1 write beyond its boundary! offs: %X data: %X\n", offset, data);
93      popmessage("DRAM1 write beyond its boundary! offs: %X data: %X\n", offset, data);
9994}
trunk/src/emu/bus/saturn/bram.h
r32465r32466
1212{
1313public:
1414   // construction/destruction
15   saturn_bram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 size, const char *shortname, const char *source);
15   saturn_bram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
1616
1717   // device-level overrides
1818   virtual void device_start();
r32465r32466
2626   // reading and writing
2727   virtual DECLARE_READ32_MEMBER(read_ext_bram);
2828   virtual DECLARE_WRITE32_MEMBER(write_ext_bram);
29
30   UINT32 m_size;  // this is the size of Battery RAM in bytes
3129};
3230
3331class saturn_bram4mb_device : public saturn_bram_device
trunk/src/emu/bus/saturn/dram.h
r32465r32466
1111{
1212public:
1313   // construction/destruction
14   saturn_dram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 size, const char *shortname, const char *source);
14   saturn_dram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
1515
1616   // device-level overrides
1717   virtual void device_start();
r32465r32466
2222   virtual DECLARE_READ32_MEMBER(read_ext_dram1);
2323   virtual DECLARE_WRITE32_MEMBER(write_ext_dram0);
2424   virtual DECLARE_WRITE32_MEMBER(write_ext_dram1);
25
26   UINT32 m_size;  // this is the size of DRAM0 + DRAM1, so accesses to each bank go up to ((m_size/2)/4)-1
2725};
2826
2927class saturn_dram8mb_device : public saturn_dram_device
trunk/src/emu/bus/saturn/sat_slot.c
r32465r32466
6666}
6767
6868
69//-------------------------------------------------
70//  bram_alloc - alloc the space for the Backup RAM
71//-------------------------------------------------
6972
73void device_sat_cart_interface::bram_alloc(UINT32 size)
74{
75   m_ext_bram.resize(size);
76   device().save_item(NAME(m_ext_bram));
77}
78
79
80//-------------------------------------------------
81//  dram*_alloc - alloc the space for the DRAM
82//-------------------------------------------------
83
84void device_sat_cart_interface::dram0_alloc(UINT32 size)
85{
86   m_ext_dram0.resize(size/sizeof(UINT32));
87   device().save_item(NAME(m_ext_dram0));
88}
89
90void device_sat_cart_interface::dram1_alloc(UINT32 size)
91{
92   m_ext_dram1.resize(size/sizeof(UINT32));
93   device().save_item(NAME(m_ext_dram1));
94}
95
96
7097//**************************************************************************
7198//  LIVE DEVICE
7299//**************************************************************************
r32465r32466
122149{
123150   if (m_cart)
124151   {
125      UINT32 *ROM;
126      UINT32 len;
152      bool is_rom = ((software_entry() == NULL) || ((software_entry() != NULL) && get_software_region("rom")));
127153
128      if (software_entry() != NULL)
129         len = get_software_region_length("cart");
154      if (is_rom)
155      {
156         // from fullpath, only ROM carts
157         UINT32 len = (software_entry() != NULL) ? get_software_region_length("rom") : length();
158         UINT32 *ROM;
159         
160         m_cart->rom_alloc(len, tag());
161         ROM = m_cart->get_rom_base();
162         
163         if (software_entry() != NULL)
164            memcpy(ROM, get_software_region("rom"), len);
165         else
166            fread(ROM, len);
167         
168         // fix endianness....
169         for (int i = 0; i < len/4; i ++)
170            ROM[i] = BITSWAP32(ROM[i],7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24);
171//          {
172//              UINT8 tempa = ROM[i+0];
173//              UINT8 tempb = ROM[i+1];
174//              ROM[i+1] = ROM[i+2];
175//              ROM[i+0] = ROM[i+3];
176//              ROM[i+3] = tempa;
177//              ROM[i+2] = tempb;
178//          }
179      }
130180      else
131         len = length();
132
133      m_cart->rom_alloc(len, tag());
134      ROM = m_cart->get_rom_base();
135
136      if (software_entry() != NULL)
137         memcpy(ROM, get_software_region("cart"), len);
138      else
139         fread(ROM, len);
140
141      // fix endianness....
142      for (int i = 0; i < len/4; i ++)
143         ROM[i] = BITSWAP32(ROM[i],7,6,5,4,3,2,1,0,15,14,13,12,11,10,9,8,23,22,21,20,19,18,17,16,31,30,29,28,27,26,25,24);
144//          UINT8 tempa = ROM[i+0];
145//          UINT8 tempb = ROM[i+1];
146//          ROM[i+1] = ROM[i+2];
147//          ROM[i+0] = ROM[i+3];
148//          ROM[i+3] = tempa;
149//          ROM[i+2] = tempb;
150//      }
181      {
182         // DRAM or BRAM carts from softlist
183         if (get_software_region("bram"))
184            m_cart->bram_alloc(get_software_region_length("bram"));
185         if (get_software_region("dram0"))
186            m_cart->dram0_alloc(get_software_region_length("dram0"));
187         if (get_software_region("dram1"))
188            m_cart->dram1_alloc(get_software_region_length("dram1"));
189      }
151190      return IMAGE_INIT_PASS;
152191   }
153192
trunk/src/emu/bus/saturn/sat_slot.h
r32465r32466
3030
3131
3232   void rom_alloc(UINT32 size, const char *tag);
33   void bram_alloc(UINT32 size);
34   void dram0_alloc(UINT32 size);
35   void dram1_alloc(UINT32 size);
3336   UINT32* get_rom_base() { return m_rom; }
3437   UINT32* get_ext_dram0_base() { return m_ext_dram0; }
3538   UINT32* get_ext_dram1_base() { return m_ext_dram1; }
trunk/src/mess/drivers/saturn.c
r32465r32466
756756MACHINE_CONFIG_END
757757
758758static SLOT_INTERFACE_START(saturn_cart)
759   SLOT_INTERFACE_INTERNAL("rom", SATURN_ROM)
760   SLOT_INTERFACE("ram8",   SATURN_DRAM_8MB)
761   SLOT_INTERFACE("ram32",  SATURN_DRAM_32MB)
762   SLOT_INTERFACE("bram4",  SATURN_BRAM_4MB)
763   SLOT_INTERFACE("bram8",  SATURN_BRAM_8MB)
764   SLOT_INTERFACE("bram16", SATURN_BRAM_16MB)
765   SLOT_INTERFACE("bram32", SATURN_BRAM_32MB)
759   SLOT_INTERFACE_INTERNAL("rom",    SATURN_ROM)
760   SLOT_INTERFACE_INTERNAL("ram8",   SATURN_DRAM_8MB)
761   SLOT_INTERFACE_INTERNAL("ram32",  SATURN_DRAM_32MB)
762   SLOT_INTERFACE_INTERNAL("bram4",  SATURN_BRAM_4MB)
763   SLOT_INTERFACE_INTERNAL("bram8",  SATURN_BRAM_8MB)
764   SLOT_INTERFACE_INTERNAL("bram16", SATURN_BRAM_16MB)
765   SLOT_INTERFACE_INTERNAL("bram32", SATURN_BRAM_32MB)
766766SLOT_INTERFACE_END
767767
768768

Previous 199869 Revisions Next


© 1997-2024 The MAME Team