Previous 199869 Revisions Next

r32699 Monday 13th October, 2014 at 04:35:25 UTC by Fabio Priuli
(MESS) channelf: added older multicart revision (the one with the bankswitch
we were emulating) and added support for the bankswitch mechanism used
by the final revision. nw.

(some work is still needed before promoting the two carts to working state)
[hash]channelf.xml
[src/emu/bus/chanf]rom.c rom.h slot.c slot.h
[src/mess/drivers]channelf.c

trunk/hash/channelf.xml
r32698r32699
530530   </software>
531531
532532
533   <software name="multicrt">
534      <description>Channel F Multi-Cart</description>
533   <software name="multicrt" supported="partial">
534      <description>Channel F Multi-Cart (Final)</description>
535535      <year>2004</year>
536536      <publisher>&lt;homebrew&gt;</publisher>
537537      <part name="cart" interface="channelf_cart">
r32698r32699
542542      </part>
543543   </software>
544544
545   <software name="multicrto" cloneof="multicrt" supported="partial">
546      <description>Channel F Multi-Cart (Older)</description>
547      <year>2004</year>
548      <publisher>&lt;homebrew&gt;</publisher>
549      <part name="cart" interface="channelf_cart">
550         <feature name="slot" value="multi_old" />
551         <dataarea name="rom" size="262144">
552            <rom name="multigame older.bin" size="262144" crc="ad4ebe3f" sha1="6064489fd4ba0b95fa4effcd8ee971751504c63f" offset="0" />
553         </dataarea>
554      </part>
555   </software>
545556
557
546558</softwarelist>
trunk/src/emu/bus/chanf/rom.c
r32698r32699
2525const device_type CHANF_ROM_MAZE = &device_creator<chanf_maze_device>;
2626const device_type CHANF_ROM_HANGMAN = &device_creator<chanf_hangman_device>;
2727const device_type CHANF_ROM_CHESS = &device_creator<chanf_chess_device>;
28const device_type CHANF_ROM_MULTI = &device_creator<chanf_multi_device>;
28const device_type CHANF_ROM_MULTI_OLD = &device_creator<chanf_multi_old_device>;
29const device_type CHANF_ROM_MULTI_FINAL = &device_creator<chanf_multi_final_device>;
2930
3031
3132chanf_rom_device::chanf_rom_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)
r32698r32699
5556{
5657}
5758
58chanf_multi_device::chanf_multi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
59               : chanf_rom_device(mconfig, CHANF_ROM_MULTI, "Channel F Multigame Cart", tag, owner, clock, "chanf_multi", __FILE__)
59chanf_multi_old_device::chanf_multi_old_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
60               : chanf_rom_device(mconfig, CHANF_ROM_MULTI_OLD, "Channel F Multigame (Earlier Version) Cart", tag, owner, clock, "chanf_multi_old", __FILE__)
6061{
6162}
6263
64chanf_multi_final_device::chanf_multi_final_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
65               : chanf_rom_device(mconfig, CHANF_ROM_MULTI_FINAL, "Channel F Multigame (Final Version) Cart", tag, owner, clock, "chanf_multi_fin", __FILE__)
66{
67}
6368
6469
70
6571//-------------------------------------------------
6672//  mapper specific start/reset
6773//-------------------------------------------------
r32698r32699
109115}
110116
111117
112void chanf_multi_device::device_start()
118void chanf_multi_old_device::device_start()
113119{
114120   save_item(NAME(m_base_bank));
115121}
116122
117void chanf_multi_device::device_reset()
123void chanf_multi_old_device::device_reset()
118124{
119125   m_base_bank = 0;
120126}
121127
122128
129void chanf_multi_final_device::device_start()
130{
131   save_item(NAME(m_base_bank));
132   save_item(NAME(m_half_bank));
133}
134
135void chanf_multi_final_device::device_reset()
136{
137   m_base_bank = 0;
138   m_half_bank = 0;
139}
140
141
123142/*-------------------------------------------------
124143 mapper specific handlers
125144 -------------------------------------------------*/
r32698r32699
191210      m_ram[offset] = data;
192211}
193212
194READ8_MEMBER(chanf_multi_device::read_rom)
213READ8_MEMBER(chanf_multi_old_device::read_rom)
195214{
196215   if (offset < 0x2000)
197      return m_rom[offset + (m_base_bank * 0x2000)];
216      return m_rom[offset + m_base_bank * 0x2000];
198217   else
199218      return 0xff;
200219}
201220
202WRITE8_MEMBER(chanf_multi_device::write_bank)
221WRITE8_MEMBER(chanf_multi_old_device::write_bank)
203222{
204   m_base_bank = data;
223   //printf("0x%x\n", data);
224   m_base_bank = data & 0x1f;
205225}
206226
227READ8_MEMBER(chanf_multi_final_device::read_rom)
228{
229   if (offset < 0x2000)
230      return m_rom[offset + (m_base_bank * 0x2000) + (m_half_bank * 0x1000)];
231   else
232      return 0xff;
233}
234
235WRITE8_MEMBER(chanf_multi_final_device::write_bank)
236{
237   //printf("0x%x\n", data);
238   m_base_bank = data & 0x1f;
239   m_half_bank = BIT(data, 5);
240}
241
trunk/src/emu/bus/chanf/slot.c
r32698r32699
124124// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
125125static const chanf_slot slot_list[] =
126126{
127   { CF_STD,     "std" },
128   { CF_MAZE,    "maze" },
129   { CF_HANGMAN, "hangman" },
130   { CF_CHESS,   "chess" },
131   { CF_MULTI,   "multi" }
127   { CF_STD,      "std" },
128   { CF_MAZE,     "maze" },
129   { CF_HANGMAN,  "hangman" },
130   { CF_CHESS,    "chess" },
131   { CF_MULTI_OLD,"multi_old" },
132   { CF_MULTI,    "multi" }
132133};
133134
134135static int chanf_get_pcb_id(const char *slot)
r32698r32699
175176         // we default to "chess" slot because some homebrew programs have been written to run
176177         // on PCBs with RAM at $2000-$2800 as Saba Schach!
177178         if (len == 0x40000)
178            m_type = CF_MULTI;
179            m_type = CF_MULTI;   // TODO1: differentiate multicart final and earlier from fullpath
179180         else
180            m_type = CF_CHESS;   // is there any way to detect Maze and Hangman from fullpath?
181            m_type = CF_CHESS;   // TODO2: is there any way to detect Maze and Hangman from fullpath?
181182
182183         m_cart->ram_alloc(0x800);
183184      }
trunk/src/emu/bus/chanf/rom.h
r32698r32699
8484};
8585
8686
87// ======================> chanf_multi_device
87// ======================> chanf_multi_old_device
8888
89class chanf_multi_device : public chanf_rom_device
89class chanf_multi_old_device : public chanf_rom_device
9090{
9191public:
9292   // construction/destruction
93   chanf_multi_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
93   chanf_multi_old_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
9494   
9595   // device-level overrides
9696   virtual void device_start();
r32698r32699
107107};
108108
109109
110// ======================> chanf_multi_final_device
110111
112class chanf_multi_final_device : public chanf_rom_device
113{
114public:
115   // construction/destruction
116   chanf_multi_final_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
117   
118   // device-level overrides
119   virtual void device_start();
120   virtual void device_reset();
121   
122   // reading and writing
123   virtual DECLARE_READ8_MEMBER(read_rom);
124   virtual DECLARE_READ8_MEMBER(read_ram) { return common_read_3853(offset); }
125   virtual DECLARE_WRITE8_MEMBER(write_ram) { common_write_3853(offset, data); }
126   virtual DECLARE_WRITE8_MEMBER(write_bank);
127   
128private:
129   int m_base_bank, m_half_bank;
130};
131
132
111133// device type definition
112134extern const device_type CHANF_ROM_STD;
113135extern const device_type CHANF_ROM_MAZE;
114136extern const device_type CHANF_ROM_HANGMAN;
115137extern const device_type CHANF_ROM_CHESS;
116extern const device_type CHANF_ROM_MULTI;
138extern const device_type CHANF_ROM_MULTI_OLD;
139extern const device_type CHANF_ROM_MULTI_FINAL;
117140
118141
119142#endif
trunk/src/emu/bus/chanf/slot.h
r32698r32699
1313   CF_MAZE,
1414   CF_HANGMAN,
1515   CF_CHESS,
16   CF_MULTI_OLD,
1617   CF_MULTI
1718};
1819
trunk/src/mess/drivers/channelf.c
r32698r32699
173173            m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x2800, 0x2fff, read8_delegate(FUNC(channelf_cart_slot_device::read_ram),(channelf_cart_slot_device*)m_cart), write8_delegate(FUNC(channelf_cart_slot_device::write_ram),(channelf_cart_slot_device*)m_cart));
174174            break;
175175         case CF_MULTI:
176         case CF_MULTI_OLD:
176177            m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x2800, 0x2fff, read8_delegate(FUNC(channelf_cart_slot_device::read_ram),(channelf_cart_slot_device*)m_cart), write8_delegate(FUNC(channelf_cart_slot_device::write_ram),(channelf_cart_slot_device*)m_cart));
177178            m_maincpu->space(AS_PROGRAM).install_write_handler(0x3000, 0x3fff, write8_delegate(FUNC(channelf_cart_slot_device::write_bank),(channelf_cart_slot_device*)m_cart));
178179            break;
r32698r32699
187188   SLOT_INTERFACE_INTERNAL("maze",     CHANF_ROM_MAZE)
188189   SLOT_INTERFACE_INTERNAL("hangman",  CHANF_ROM_HANGMAN)
189190   SLOT_INTERFACE_INTERNAL("chess",    CHANF_ROM_CHESS)
190   SLOT_INTERFACE_INTERNAL("multi",    CHANF_ROM_MULTI)
191   SLOT_INTERFACE_INTERNAL("multi_old",CHANF_ROM_MULTI_OLD)
192   SLOT_INTERFACE_INTERNAL("multi",    CHANF_ROM_MULTI_FINAL)
191193SLOT_INTERFACE_END
192194
193195

Previous 199869 Revisions Next


© 1997-2024 The MAME Team