Previous 199869 Revisions Next

r31767 Monday 25th August, 2014 at 11:15:32 UTC by Fabio Priuli
(MESS) a7800.c progress:  [Fabio Priuli]
- Rewritten cart emulation to use slot devices
- Removed POKEY chip from the main unit since it was inside
 the carts (of course it gets enabled when you launch a game
 who contained it in its cart)
- Added support for the High Score cart as a passthru cart: when
 you mount hiscore, a -cart2 switch will become available to mount
 the game you want to play
- Properly implemented XBoarD and XM expansions as
 passthru carts as well, so that new syntax to run dkxm.a78 is
 "mess a7800 -cart xm -cart2 path\to\games\dkxm.a78"
 High Score support for XM shall work as well.
- Big clean up of the driver, simplifying memory map, removing
 writes to ROM, etc.


Out of whatsnew: In conclusion, a7800.c has been brought into the new millennium ;-)
[hash]a7800.xml
[src/emu/bus]bus.mak
[src/emu/bus/a7800]a78_carts.h* a78_slot.c* a78_slot.h* hiscore.c* hiscore.h* rom.c* rom.h* xboard.c* xboard.h*
[src/mess]mess.mak
[src/mess/drivers]a7800.c
[src/mess/includes]a7800.h
[src/mess/machine]a7800.c
[src/mess/video]a7800.c

trunk/src/emu/bus/bus.mak
r31766r31767
1616
1717#-------------------------------------------------
1818#
19#@src/emu/bus/a7800/a78_slot.h,BUSES += A7800
20#-------------------------------------------------
21
22ifneq ($(filter A7800,$(BUSES)),)
23OBJDIRS += $(BUSOBJ)/a7800
24BUSOBJS += $(BUSOBJ)/a7800/a78_slot.o
25BUSOBJS += $(BUSOBJ)/a7800/rom.o
26BUSOBJS += $(BUSOBJ)/a7800/hiscore.o
27BUSOBJS += $(BUSOBJ)/a7800/xboard.o
28endif
29
30
31#-------------------------------------------------
32#
1933#@src/emu/bus/abcbus/abcbus.h,BUSES += ABCBUS
2034#-------------------------------------------------
2135
trunk/src/emu/bus/a7800/xboard.h
r0r31767
1#ifndef __A78_XBOARD_H
2#define __A78_XBOARD_H
3
4#include "a78_slot.h"
5#include "rom.h"
6#include "sound/pokey.h"
7
8
9// ======================> a78_xboard_device
10
11class a78_xboard_device : public a78_rom_device
12{
13public:
14   // construction/destruction
15   a78_xboard_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);
16   a78_xboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
17   
18   // device-level overrides
19   virtual void device_start();
20   virtual machine_config_constructor device_mconfig_additions() const;
21   virtual void device_reset();
22   
23   // reading and writing
24   virtual DECLARE_READ8_MEMBER(read_04xx);
25   virtual DECLARE_WRITE8_MEMBER(write_04xx);
26   virtual DECLARE_READ8_MEMBER(read_40xx);
27   virtual DECLARE_WRITE8_MEMBER(write_40xx);
28
29protected:
30   required_device<a78_cart_slot_device> m_xbslot;
31   required_device<pokey_device> m_pokey;
32   int m_reg, m_ram_bank;
33};
34
35
36// ======================> a78_xm_device
37
38class a78_xm_device : public a78_xboard_device
39{
40public:
41   // construction/destruction
42   a78_xm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
43   
44   // reading and writing
45   virtual DECLARE_READ8_MEMBER(read_10xx);
46   virtual DECLARE_WRITE8_MEMBER(write_10xx);
47   virtual DECLARE_READ8_MEMBER(read_30xx);
48};
49
50
51
52// device type definition
53extern const device_type A78_XBOARD;
54extern const device_type A78_XM;
55
56
57#endif
Property changes on: trunk/src/emu/bus/a7800/xboard.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/a7800/a78_slot.h
r0r31767
1#ifndef __A78_SLOT_H
2#define __A78_SLOT_H
3
4
5/***************************************************************************
6 TYPE DEFINITIONS
7 ***************************************************************************/
8
9
10/* PCB */
11enum
12{
13   A78_TYPE0 = 0,      // standard 8K/16K/32K games, no bankswitch
14   A78_TYPE1,         // as TYPE0 + POKEY chip on the PCB
15   A78_TYPE2,         // Atari SuperGame pcb (8x16K banks with bankswitch)
16   A78_TYPE3,         // as TYPE1 + POKEY chip on the PCB
17   A78_TYPE6,         // as TYPE1 + RAM IC on the PCB
18   A78_TYPEA,         // Alien Brigade, Crossbow (9x16K banks with diff bankswitch)
19   A78_ABSOLUTE,      // F18 Hornet
20   A78_ACTIVISION,      // Double Dragon, Rampage
21   A78_HSC,         // Atari HighScore cart
22   A78_BANKRAM,      // SuperGame + 32K RAM banked (untested)
23   A78_XB_BOARD,      // A7800 Expansion Board (it shall more or less apply to the Expansion Module too, but this is not officially released yet)
24   A78_XM_BOARD,      // A7800 XM Expansion Module (theoretical specs only, since this is not officially released yet)
25   A78_TYPEB         // Cart exploiting the XB board, but possibly also compatible with non-expanded A7800
26};
27
28
29// ======================> device_a78_cart_interface
30
31class device_a78_cart_interface : public device_slot_card_interface
32{
33public:
34   // construction/destruction
35   device_a78_cart_interface(const machine_config &mconfig, device_t &device);
36   virtual ~device_a78_cart_interface();
37
38   // memory accessor
39   virtual DECLARE_READ8_MEMBER(read_04xx) { return 0xff; }
40   virtual DECLARE_READ8_MEMBER(read_10xx) { return 0xff; }
41   virtual DECLARE_READ8_MEMBER(read_30xx) { return 0xff; }
42   virtual DECLARE_READ8_MEMBER(read_40xx) { return 0xff; }
43   virtual DECLARE_WRITE8_MEMBER(write_04xx) {}
44   virtual DECLARE_WRITE8_MEMBER(write_10xx) {}
45   virtual DECLARE_WRITE8_MEMBER(write_30xx) {}
46   virtual DECLARE_WRITE8_MEMBER(write_40xx) {}
47
48   void rom_alloc(UINT32 size);
49   void ram_alloc(UINT32 size);
50   void nvram_alloc(UINT32 size);
51   UINT8* get_rom_base() { return m_rom; }
52   UINT8*  get_ram_base() { return m_ram; }
53   UINT8*  get_nvram_base() { return m_nvram; }
54   UINT32  get_rom_size() { return m_rom.bytes(); }
55   UINT32  get_ram_size() { return m_ram.bytes(); }
56   UINT32  get_nvram_size() { return m_nvram.bytes(); }
57
58protected:
59   // internal state
60   dynamic_buffer m_rom;
61   dynamic_buffer m_ram;
62   dynamic_buffer m_nvram;   // HiScore cart can save scores!
63   // helpers
64   UINT32 m_base_rom;
65   int m_bank_mask;
66};
67
68
69void a78_partialhash(hash_collection &dest, const unsigned char *data, unsigned long length, const char *functions);
70
71
72// ======================> a78_cart_slot_device
73
74class a78_cart_slot_device : public device_t,
75                        public device_image_interface,
76                        public device_slot_interface
77{
78public:
79   // construction/destruction
80   a78_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
81   virtual ~a78_cart_slot_device();
82
83   // device-level overrides
84   virtual void device_start();
85   virtual void device_config_complete();
86
87   // image-level overrides
88   virtual bool call_load();
89   virtual void call_unload();
90   virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry);
91
92   int get_cart_type() { return m_type; };
93   int identify_cart_type(UINT8 *ROM, UINT32 len);
94   bool has_cart() { return m_cart != NULL; }
95   
96   virtual iodevice_t image_type() const { return IO_CARTSLOT; }
97   virtual bool is_readable()  const { return 1; }
98   virtual bool is_writeable() const { return 0; }
99   virtual bool is_creatable() const { return 0; }
100   virtual bool must_be_loaded() const { return 0; }
101   virtual bool is_reset_on_load() const { return 1; }
102   virtual const option_guide *create_option_guide() const { return NULL; }
103   virtual const char *image_interface() const { return "a7800_cart"; }
104   virtual const char *file_extensions() const { return "bin,a78"; }
105   virtual device_image_partialhash_func get_partial_hash() const { return &a78_partialhash; }
106
107   // slot interface overrides
108   virtual void get_default_card_software(astring &result);
109
110   // reading and writing
111   virtual DECLARE_READ8_MEMBER(read_04xx);
112   virtual DECLARE_READ8_MEMBER(read_10xx);
113   virtual DECLARE_READ8_MEMBER(read_30xx);
114   virtual DECLARE_READ8_MEMBER(read_40xx);
115   virtual DECLARE_WRITE8_MEMBER(write_04xx);
116   virtual DECLARE_WRITE8_MEMBER(write_10xx);
117   virtual DECLARE_WRITE8_MEMBER(write_30xx);
118   virtual DECLARE_WRITE8_MEMBER(write_40xx);
119   
120private:
121   device_a78_cart_interface*       m_cart;
122   int m_type;
123   int m_stick_type;
124
125   int verify_header(char *header);
126};
127
128
129// device type definition
130extern const device_type A78_CART_SLOT;
131
132
133/***************************************************************************
134 DEVICE CONFIGURATION MACROS
135 ***************************************************************************/
136
137#define MCFG_A78_CARTRIDGE_ADD(_tag,_slot_intf,_def_slot) \
138   MCFG_DEVICE_ADD(_tag, A78_CART_SLOT, 0)  \
139   MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
140
141
142#endif
Property changes on: trunk/src/emu/bus/a7800/a78_slot.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/a7800/hiscore.c
r0r31767
1/***********************************************************************************************************
2
3 A7800 HighScore passthrough cart emulation
4 
5
6***********************************************************************************************************/
7
8
9#include "emu.h"
10#include "hiscore.h"
11#include "a78_carts.h"
12
13
14//-------------------------------------------------
15//  constructor
16//-------------------------------------------------
17
18const device_type A78_HISCORE = &device_creator<a78_hiscore_device>;
19
20
21a78_hiscore_device::a78_hiscore_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
22               : a78_rom_device(mconfig, A78_HISCORE, "Atari 7800 High Score Cart", tag, owner, clock, "a78_highscore", __FILE__),
23                  m_hscslot(*this, "hsc_slot")
24{
25}
26
27
28static MACHINE_CONFIG_FRAGMENT( a78_highscore )
29   MCFG_A78_CARTRIDGE_ADD("hsc_slot", a7800_cart, NULL)
30MACHINE_CONFIG_END
31
32machine_config_constructor a78_hiscore_device::device_mconfig_additions() const
33{
34   return MACHINE_CONFIG_NAME( a78_highscore );
35}
36
37
38/*-------------------------------------------------
39 mapper specific handlers
40 -------------------------------------------------*/
41
42READ8_MEMBER(a78_hiscore_device::read_10xx)
43{
44   return m_nvram[offset];
45}
46
47WRITE8_MEMBER(a78_hiscore_device::write_10xx)
48{
49   m_nvram[offset] = data;
50}
51
52READ8_MEMBER(a78_hiscore_device::read_30xx)
53{
54   return m_rom[offset];
55}
56
57READ8_MEMBER(a78_hiscore_device::read_04xx)
58{
59   return m_hscslot->read_04xx(space, offset);
60}
61
62WRITE8_MEMBER(a78_hiscore_device::write_04xx)
63{
64   m_hscslot->write_04xx(space, offset, data);
65}
66
67READ8_MEMBER(a78_hiscore_device::read_40xx)
68{
69   return m_hscslot->read_40xx(space, offset);
70}
71
72WRITE8_MEMBER(a78_hiscore_device::write_40xx)
73{
74   m_hscslot->write_40xx(space, offset, data);
75}
76
Property changes on: trunk/src/emu/bus/a7800/hiscore.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/a7800/rom.c
r0r31767
1/***********************************************************************************************************
2
3 A7800 ROM cart emulation
4
5 For the moment we use separate devices for each combination of hardware
6 - bankswitch or not
7 - pokey or not
8 - 9 banks or not
9 etc...
10 But we might merge many of these if they become too many (e.g. could there be banked 32L RAM also
11 in a 9banks cart or in a cart with no bankswitch?)
12
13***********************************************************************************************************/
14
15
16#include "emu.h"
17#include "rom.h"
18
19
20//-------------------------------------------------
21//  constructor
22//-------------------------------------------------
23
24const device_type A78_ROM = &device_creator<a78_rom_device>;
25const device_type A78_ROM_SG = &device_creator<a78_rom_sg_device>;
26const device_type A78_ROM_POKEY = &device_creator<a78_rom_pokey_device>;
27const device_type A78_ROM_SG_POKEY = &device_creator<a78_rom_sg_pokey_device>;
28const device_type A78_ROM_SG_RAM = &device_creator<a78_rom_sg_ram_device>;
29const device_type A78_ROM_BANKRAM = &device_creator<a78_rom_bankram_device>;
30const device_type A78_ROM_SG_9BANKS = &device_creator<a78_rom_sg_9banks_device>;
31const device_type A78_ROM_XM = &device_creator<a78_rom_xm_device>;
32const device_type A78_ROM_ABSOLUTE = &device_creator<a78_rom_abs_device>;
33const device_type A78_ROM_ACTIVISION = &device_creator<a78_rom_act_device>;
34
35
36a78_rom_device::a78_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)
37               : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
38                  device_a78_cart_interface( mconfig, *this )
39{
40}
41
42a78_rom_device::a78_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
43               : device_t(mconfig, A78_ROM, "Atari 7800 ROM Carts w/no Bankswitch", tag, owner, clock, "a78_rom", __FILE__),
44                  device_a78_cart_interface( mconfig, *this )
45{
46}
47
48a78_rom_pokey_device::a78_rom_pokey_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
49               : a78_rom_device(mconfig, A78_ROM_POKEY, "Atari 7800 ROM Carts w/no Bankswitch + POKEY", tag, owner, clock, "a78_rom_pok", __FILE__),
50                  m_pokey(*this, "pokey")
51{
52}
53
54
55a78_rom_sg_device::a78_rom_sg_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)
56               : a78_rom_device(mconfig, type, name, tag, owner, clock, shortname, source)
57{
58}
59
60a78_rom_sg_device::a78_rom_sg_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
61               : a78_rom_device(mconfig, A78_ROM_SG, "Atari 7800 ROM Carts w/SuperGame Bankswitch", tag, owner, clock, "a78_rom_sg", __FILE__)
62{
63}
64
65a78_rom_sg_pokey_device::a78_rom_sg_pokey_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
66               : a78_rom_sg_device(mconfig, A78_ROM_SG_POKEY, "Atari 7800 ROM Carts w/SuperGame Bankswitch + POKEY", tag, owner, clock, "a78_rom_sgp", __FILE__),
67                  m_pokey(*this, "pokey")
68{
69}
70
71
72a78_rom_sg_ram_device::a78_rom_sg_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
73               : a78_rom_sg_device(mconfig, A78_ROM_SG_RAM, "Atari 7800 ROM Carts w/SuperGame Bankswitch + RAM", tag, owner, clock, "a78_rom_sgr", __FILE__)
74{
75}
76
77
78a78_rom_bankram_device::a78_rom_bankram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
79               : a78_rom_sg_device(mconfig, A78_ROM_BANKRAM, "Atari 7800 ROM Carts w/SuperGame Bankswitch + Banked RAM", tag, owner, clock, "a78_rom_bankram", __FILE__)
80{
81}
82
83
84a78_rom_sg_9banks_device::a78_rom_sg_9banks_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)
85               : a78_rom_sg_device(mconfig, type, name, tag, owner, clock, shortname, source)
86{
87}
88
89a78_rom_sg_9banks_device::a78_rom_sg_9banks_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
90               : a78_rom_sg_device(mconfig, A78_ROM_SG_9BANKS, "Atari 7800 ROM Carts w/SuperGame 9Banks", tag, owner, clock, "a78_rom_sg9", __FILE__)
91{
92}
93
94
95a78_rom_xm_device::a78_rom_xm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
96               : a78_rom_sg_9banks_device(mconfig, A78_ROM_XM, "Atari 7800 ROM Carts w/SuperGame 9Banks + POKEY (XM demo)", tag, owner, clock, "a78_rom_xm", __FILE__),
97                  m_pokey(*this, "pokey")
98{
99}
100
101
102a78_rom_abs_device::a78_rom_abs_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
103               : a78_rom_device(mconfig, A78_ROM_ABSOLUTE, "Atari 7800 ROM Carts w/Absolute Bankswitch", tag, owner, clock, "a78_rom_abs", __FILE__)
104{
105}
106
107
108a78_rom_act_device::a78_rom_act_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
109               : a78_rom_device(mconfig, A78_ROM_ACTIVISION, "Atari 7800 ROM Carts w/Activision Bankswitch", tag, owner, clock, "a78_rom_act", __FILE__)
110{
111}
112
113
114
115void a78_rom_device::device_start()
116{
117}
118
119void a78_rom_device::device_reset()
120{
121}
122
123void a78_rom_sg_device::device_start()
124{
125   save_item(NAME(m_bank));
126}
127
128void a78_rom_sg_device::device_reset()
129{
130   m_bank = 0;
131}
132
133void a78_rom_bankram_device::device_start()
134{
135   save_item(NAME(m_bank));
136   save_item(NAME(m_ram_bank));
137}
138
139void a78_rom_bankram_device::device_reset()
140{
141   m_bank = 0;
142   m_ram_bank = 0;
143}
144
145void a78_rom_abs_device::device_start()
146{
147   save_item(NAME(m_bank));
148}
149
150void a78_rom_abs_device::device_reset()
151{
152   m_bank = 0;
153}
154
155void a78_rom_act_device::device_start()
156{
157   save_item(NAME(m_bank));
158}
159
160void a78_rom_act_device::device_reset()
161{
162   m_bank = 0;
163}
164
165// TO DO: do we need a PAL variant?!?
166static MACHINE_CONFIG_FRAGMENT( a78_pokey )
167   MCFG_SPEAKER_STANDARD_MONO("addon")
168
169   MCFG_SOUND_ADD("pokey", POKEY, XTAL_14_31818MHz/8)
170   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "addon", 1.00)
171MACHINE_CONFIG_END
172
173
174/*-------------------------------------------------
175 mapper specific handlers
176 -------------------------------------------------*/
177
178/*-------------------------------------------------
179
180 Carts with no bankswitch (8K to 48K)
181
182 GAMES:
183
184 -------------------------------------------------*/
185
186READ8_MEMBER(a78_rom_device::read_40xx)
187{
188   if (offset + 0x4000 < m_base_rom)
189      return 0xff;
190   else
191      return m_rom[offset + 0x4000 - m_base_rom];
192}
193
194/*-------------------------------------------------
195
196 Carts with no bankswitch + POKEY chip
197 The Pokey chips is accessed at 0x0450-0x045f or
198 by writing at 0x4000-0x7fff in some games.
199 
200 GAMES:
201 
202 -------------------------------------------------*/
203
204WRITE8_MEMBER(a78_rom_pokey_device::write_40xx)
205{
206   if (offset < 0x4000)
207      m_pokey->write(space, offset & 0x0f, data);
208}
209
210READ8_MEMBER(a78_rom_pokey_device::read_04xx)
211{
212   if (offset >= 0x50 && offset < 0x60)
213      return m_pokey->read(space, offset & 0x0f);
214   else
215      return 0xff;
216}
217
218WRITE8_MEMBER(a78_rom_pokey_device::write_04xx)
219{
220   if (offset >= 0x50 && offset < 0x60)
221      m_pokey->write(space, offset & 0x0f, data);
222}
223
224machine_config_constructor a78_rom_pokey_device::device_mconfig_additions() const
225{
226   return MACHINE_CONFIG_NAME( a78_pokey );
227}
228
229
230/*-------------------------------------------------
231
232 Carts with SuperGame bankswitch:
233 8 x 16K banks mappable in 0x8000-0xbfff
234 bank 7 is always mapped in 0xc000-0xffff
235 range 0x4000-0x7fff is not clear: some games
236 expect bank 6 to be mapped there, others
237 have open bus (we assume the former until
238 a game requires more precise behavior or
239 some test is run)
240 Note that the code is written so that also
241 homebrew games with larger ROMs work!
242 
243 GAMES:
244 
245 -------------------------------------------------*/
246
247READ8_MEMBER(a78_rom_sg_device::read_40xx)
248{
249   if (offset < 0x4000)
250      return m_rom[(offset & 0x3fff) + ((m_bank_mask - 1) * 0x4000)];   // second to last bank (is this always ok?!?)
251   else if (offset < 0x8000)
252      return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
253   else
254      return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)];   // last bank
255}
256
257WRITE8_MEMBER(a78_rom_sg_device::write_40xx)
258{
259   if (offset >= 0x4000 && offset < 0x8000)
260      m_bank = data & m_bank_mask;
261}
262
263
264/*-------------------------------------------------
265
266 Carts with SuperGame bankswitch + POKEY chip
267 As above, the Pokey chips is accessed at
268 
269 GAMES:
270 
271 -------------------------------------------------*/
272
273WRITE8_MEMBER(a78_rom_sg_pokey_device::write_40xx)
274{
275   if (offset < 0x4000)
276      m_pokey->write(space, offset & 0x0f, data);
277   else if (offset < 0x8000)
278      m_bank = data & m_bank_mask;
279}
280
281READ8_MEMBER(a78_rom_sg_pokey_device::read_04xx)
282{
283   if (offset >= 0x50 && offset < 0x60)
284      return m_pokey->read(space, offset & 0x0f);
285   else
286      return 0xff;
287}
288
289WRITE8_MEMBER(a78_rom_sg_pokey_device::write_04xx)
290{
291   if (offset >= 0x50 && offset < 0x60)
292      m_pokey->write(space, offset & 0x0f, data);
293}
294
295machine_config_constructor a78_rom_sg_pokey_device::device_mconfig_additions() const
296{
297   return MACHINE_CONFIG_NAME( a78_pokey );
298}
299
300
301/*-------------------------------------------------
302
303 Carts with SuperGame bankswitch + 16K RAM
304 FIXME: Some games contained only 8K of RAM, but
305 for the moment we treat all as 16K of RAM even if
306 from softlist we shall differentiate between them.
307 
308 GAMES:
309 
310 -------------------------------------------------*/
311
312READ8_MEMBER(a78_rom_sg_ram_device::read_40xx)
313{
314   if (offset < 0x4000)
315      return m_ram[offset];
316   else if (offset < 0x8000)
317      return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
318   else
319      return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)];   // last bank
320}
321
322WRITE8_MEMBER(a78_rom_sg_ram_device::write_40xx)
323{
324   if (offset < 0x4000)
325      m_ram[offset] = data;
326   else if (offset < 0x8000)
327      m_bank = data & m_bank_mask;
328}
329
330
331/*-------------------------------------------------
332 
333 Carts with SuperGame bankswitch + 32K RAM:
334 RAM bank is selected by writing with bit5 enabled
335 in 0x4000-0x7fff range (bit0-bit4 give the ROM bank)
336 
337 GAMES:
338 
339 -------------------------------------------------*/
340
341READ8_MEMBER(a78_rom_bankram_device::read_40xx)
342{
343   if (offset < 0x4000)
344      return m_ram[offset + (m_ram_bank * 0x4000)];
345   else if (offset < 0x8000)
346      return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
347   else
348      return m_rom[(offset & 0x3fff) + (m_bank_mask * 0x4000)];   // last bank
349}
350
351WRITE8_MEMBER(a78_rom_bankram_device::write_40xx)
352{
353   if (offset < 0x4000)
354      m_ram[offset] = data;
355   else if (offset < 0x8000)
356   {
357      m_bank = data & m_bank_mask;
358      m_ram_bank = BIT(data, 5);
359   }
360}
361
362
363/*-------------------------------------------------
364
365 Carts with SuperGame bankswitch 9banks:
366 9 x 16K banks mappable in 0x8000-0xbfff
367 bank 7 is always mapped in 0xc000-0xffff
368 
369 GAMES:
370 
371 -------------------------------------------------*/
372
373READ8_MEMBER(a78_rom_sg_9banks_device::read_40xx)
374{
375   if (offset < 0x4000)
376      return m_rom[(offset & 0x3fff)];
377   else if (offset < 0x8000)
378      return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
379   else
380      return m_rom[(offset & 0x3fff) + ((m_bank_mask + 1) * 0x4000)];   // last bank
381}
382
383WRITE8_MEMBER(a78_rom_sg_9banks_device::write_40xx)
384{
385   if (offset >= 0x4000 && offset < 0x8000)
386      m_bank = (data & m_bank_mask) + 1;
387}
388
389/*-------------------------------------------------
390 
391 Carts using XM expansion module or XBoarD expansion
392 The only game using this (Donkey Kong XM demo) is
393 144K + POKEY, so that it's like the above with the
394 addition of the POKEY.
395 
396 GAMES: Donkey Kong XM demo
397 
398 -------------------------------------------------*/
399
400WRITE8_MEMBER(a78_rom_xm_device::write_40xx)
401{
402   if (offset < 0x4000)
403      m_pokey->write(space, offset & 0x0f, data);
404   else if (offset < 0x8000)
405      m_bank = (data & m_bank_mask) + 1;
406}
407
408READ8_MEMBER(a78_rom_xm_device::read_04xx)
409{
410   if (offset >= 0x50 && offset < 0x60)
411      return m_pokey->read(space, offset & 0x0f);
412   else
413      return 0xff;
414}
415
416WRITE8_MEMBER(a78_rom_xm_device::write_04xx)
417{
418   if (offset >= 0x50 && offset < 0x60)
419      m_pokey->write(space, offset & 0x0f, data);
420}
421
422machine_config_constructor a78_rom_xm_device::device_mconfig_additions() const
423{
424   return MACHINE_CONFIG_NAME( a78_pokey );
425}
426
427
428/*-------------------------------------------------
429 
430 Carts with Absolute bankswitch:
431 64K games. Lower 32K are 2 banks of 16K to be mapped
432 in 0x4000-0x7fff, depending on the value written
433 at 0x8000. Higher 32K are fixed in 0x8000-0xffff
434 
435 GAMES: F-18 Hornet
436 
437 -------------------------------------------------*/
438
439READ8_MEMBER(a78_rom_abs_device::read_40xx)
440{
441   if (offset < 0x4000)
442      return m_rom[(offset & 0x3fff) + (m_bank * 0x4000)];
443   else
444   {
445      offset -= 0x4000;
446      return m_rom[offset + 0x8000];
447   }
448}
449
450WRITE8_MEMBER(a78_rom_abs_device::write_40xx)
451{
452   if (offset == 0x4000)
453   {
454      if (data & 1)
455         m_bank = 0;
456      else if (data & 2)
457         m_bank = 1;
458   }
459}
460
461/*-------------------------------------------------
462
463 Carts with Activision bankswitch:
464 128K games. 8 x 16K banks (0-7) to be mapped at
465 0xa000-0xdfff. Bank is selected depending on the
466 address written in 0xff80-0xff87.
467 The rest of the memory is as follows:
468 0x4000-0x5fff second 8kb of bank 6
469 0x6000-0x7fff first 8kb of bank 6
470 0x8000-0x9fff second 8kb of bank 7
471 0xe000-0xffff first 8kb of bank 7
472 
473 GAMES: Double Dragon, Rampage.
474 
475 -------------------------------------------------*/
476
477READ8_MEMBER(a78_rom_act_device::read_40xx)
478{
479   UINT8 data = 0xff;
480   UINT16 addr = offset & 0x1fff;
481
482   // offset goes from 0 to 0xc000
483   switch (offset & 0xe000)
484   {
485      case 0x0000:
486         data = m_rom[addr + 0x1a000];
487         break;
488      case 0x2000:
489         data = m_rom[addr + 0x18000];
490         break;
491      case 0x4000:
492         data = m_rom[addr + 0x1e000];
493         break;
494      case 0x6000:
495         data = m_rom[addr + (m_bank * 0x4000)];
496         break;
497      case 0x8000:
498         data = m_rom[addr + (m_bank * 0x4000) + 0x2000];
499         break;
500      case 0xa000:
501         data = m_rom[addr + 0x1c000];
502         break;
503   }
504
505   return data;
506}
507
508WRITE8_MEMBER(a78_rom_act_device::write_40xx)
509{
510   if (offset >= 0xbf80 && offset <= 0xbf87)
511      m_bank = offset & 7;
512}
Property changes on: trunk/src/emu/bus/a7800/rom.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/a7800/xboard.c
r0r31767
1/***********************************************************************************************************
2
3 A7800 XBoarD & XM expansions emulation
4 
5 The XBoarD should be socketed in the A7800 pcb in place of the Maria chip.
6 It adds to the system additional 128K of RAM and an onboard pokey.
7 The XM seems to work the same as XBoarD, but it also features HighScore savings
8 (using the same ROM as Atari HighScore cart)
9
10
11 Currently, we emulate both of these as a passthru cart, even if not 100% accurate for the XBoarD
12
13 
14 Memory map:
15
16 POKEY1            $0450    $045F     16 bytes
17 POKEY2*           $0460    $046F     16 bytes
18 XCTRL             $0470    $047F     1 byte
19 RAM               $4000    $7FFF     16384 bytes
20 
21 XCTRL Bit Description
22 
23 +-------------------------------+
24 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
25 +-------------------------------+
26 |   |   |   |   |   |   |   |
27 |   |   |   |   |   |   |   +-- Bank select bit 0 \
28 |   |   |   |   |   |   +------ Bank select bit 1  | Totally 128 KByte in 16 KByte banks
29 |   |   |   |   |   +---------- Bank select bit 2 /
30 |   |   |   |   +-------------- Enable memory bit** (1 = Memory enabled, 0 after power on)
31 |   |   |   +------------------ Enable POKEY bit (1 = POKEY enabled, 0 after power on)
32 |   |   |
33 NA  NA  NA = Not Available or Not Used
34 
35 * = Can be mounted piggy back on the first POKEY. Description how to do this will come when i have tried it out.
36 ** This bit controls both POKEY chip select signals.
37 
38 TODO:
39  - verify what happens when 2 POKEYs are present
40  - verify whether high score works fine with XM
41
42***********************************************************************************************************/
43
44
45#include "emu.h"
46#include "xboard.h"
47#include "a78_carts.h"
48
49
50//-------------------------------------------------
51//  constructor
52//-------------------------------------------------
53
54const device_type A78_XBOARD = &device_creator<a78_xboard_device>;
55const device_type A78_XM = &device_creator<a78_xm_device>;
56
57
58a78_xboard_device::a78_xboard_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)
59               : a78_rom_device(mconfig, type, name, tag, owner, clock, shortname, source),
60                  m_xbslot(*this, "xb_slot"),
61                  m_pokey(*this, "xb_pokey")
62{
63}
64
65
66a78_xboard_device::a78_xboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
67               : a78_rom_device(mconfig, A78_XBOARD, "Atari 7800 XBoarD expansion", tag, owner, clock, "a78_xboard", __FILE__),
68                  m_xbslot(*this, "xb_slot"),
69                  m_pokey(*this, "xb_pokey")
70{
71}
72
73
74a78_xm_device::a78_xm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
75               : a78_xboard_device(mconfig, A78_XM, "Atari 7800 XM expansion module", tag, owner, clock, "a78_xm", __FILE__)
76{
77}
78
79
80void a78_xboard_device::device_start()
81{
82   save_item(NAME(m_reg));
83   save_item(NAME(m_ram_bank));
84}
85
86void a78_xboard_device::device_reset()
87{
88   m_reg = 0;
89   m_ram_bank = 0;
90}
91
92
93static MACHINE_CONFIG_FRAGMENT( a78_xb )
94   MCFG_A78_CARTRIDGE_ADD("xb_slot", a7800_cart, NULL)
95
96   MCFG_SPEAKER_STANDARD_MONO("xb_speaker")
97
98   MCFG_SOUND_ADD("xb_pokey", POKEY, XTAL_14_31818MHz/8)
99   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "xb_speaker", 1.00)
100MACHINE_CONFIG_END
101
102machine_config_constructor a78_xboard_device::device_mconfig_additions() const
103{
104   return MACHINE_CONFIG_NAME( a78_xb );
105}
106
107
108/*-------------------------------------------------
109 mapper specific handlers
110 -------------------------------------------------*/
111
112/*-------------------------------------------------
113 
114 XBoarD: passthru + 128K RAM + POKEY
115 
116 -------------------------------------------------*/
117
118READ8_MEMBER(a78_xboard_device::read_40xx)
119{
120   if (BIT(m_reg, 3) && offset < 0x4000)
121      return m_ram[offset + (m_ram_bank * 0x4000)];
122   else
123      return m_xbslot->read_40xx(space, offset);
124}
125
126WRITE8_MEMBER(a78_xboard_device::write_40xx)
127{
128   if (BIT(m_reg, 3) && offset < 0x4000)
129      m_ram[offset + (m_ram_bank * 0x4000)] = data;
130   else
131      m_xbslot->write_40xx(space, offset, data);
132}
133
134READ8_MEMBER(a78_xboard_device::read_04xx)
135{
136   if (BIT(m_reg, 4) && offset >= 0x50 && offset < 0x60)
137      return m_pokey->read(space, offset & 0x0f);
138   else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
139      return m_xbslot->read_04xx(space, offset - 0x10);   // access second POKEY
140   else
141      return 0xff;
142}
143
144WRITE8_MEMBER(a78_xboard_device::write_04xx)
145{
146   if (BIT(m_reg, 4) && offset >= 0x50 && offset < 0x60)
147      m_pokey->write(space, offset & 0x0f, data);
148   else if (BIT(m_reg, 4) && offset >= 0x60 && offset < 0x70)
149      m_xbslot->write_04xx(space, offset - 0x10, data);   // access second POKEY
150   else if (offset >= 0x70 && offset < 0x80)
151   {
152      m_reg = data;
153      m_ram_bank = m_reg & 7;
154   }
155}
156
157
158/*-------------------------------------------------
159 
160 XM: Same as above but also featuring High Score savings
161 
162 -------------------------------------------------*/
163
164READ8_MEMBER(a78_xm_device::read_10xx)
165{
166   return m_nvram[offset];
167}
168
169WRITE8_MEMBER(a78_xm_device::write_10xx)
170{
171   m_nvram[offset] = data;
172}
173
174READ8_MEMBER(a78_xm_device::read_30xx)
175{
176   return m_rom[offset];
177}
178
Property changes on: trunk/src/emu/bus/a7800/xboard.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/a7800/a78_carts.h
r0r31767
1#ifndef __A78_CARTS_H
2#define __A78_CARTS_H
3
4
5#include "emu.h"
6
7#include "rom.h"
8#include "xboard.h"
9#include "hiscore.h"
10
11static SLOT_INTERFACE_START(a7800_cart)
12   SLOT_INTERFACE_INTERNAL("a78_rom",      A78_ROM)
13   SLOT_INTERFACE_INTERNAL("a78_pokey",    A78_ROM_POKEY)
14   SLOT_INTERFACE_INTERNAL("a78_sg",       A78_ROM_SG)
15   SLOT_INTERFACE_INTERNAL("a78_sg_pokey", A78_ROM_SG_POKEY)
16   SLOT_INTERFACE_INTERNAL("a78_sg_ram",   A78_ROM_SG_RAM)
17   // not sure which dev cart support banked ram, nor whether there shall be a 9banks or a non-sg version of this...
18   SLOT_INTERFACE_INTERNAL("a78_bankram",  A78_ROM_BANKRAM)   
19   SLOT_INTERFACE_INTERNAL("a78_sg9",      A78_ROM_SG_9BANKS)
20   SLOT_INTERFACE_INTERNAL("a78_xmc",      A78_ROM_XM)   // carts compatible with the expansions below (basically a 9Banks+POKEY)
21   SLOT_INTERFACE_INTERNAL("a78_abs",      A78_ROM_ABSOLUTE)
22   SLOT_INTERFACE_INTERNAL("a78_act",      A78_ROM_ACTIVISION)
23   SLOT_INTERFACE_INTERNAL("a78_hsc",      A78_HISCORE)
24   SLOT_INTERFACE_INTERNAL("a78_xboard",   A78_XBOARD)   // the actual XBoarD expansion (as passthru)
25   SLOT_INTERFACE_INTERNAL("a78_xm",       A78_XM)       // the actual XM expansion (as passthru)
26SLOT_INTERFACE_END
27
28
29// supported devices
30SLOT_INTERFACE_EXTERN(a78_cart);
31
32#endif
Property changes on: trunk/src/emu/bus/a7800/a78_carts.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/a7800/a78_slot.c
r0r31767
1/***********************************************************************************************************
2
3
4    Atari 7800 cart emulation
5    (through slot devices)
6
7    Emulation of the cartslot for Atari 7800
8
9    Quoting "ATARI 7800 BANKSWITCHING GUIDE" (by Eckhard Stolberg):
10    7800 games can use the memory from $0400 to $047f, from $0500
11    to $17ff and from $2800 to $ffff, but only the High-Score cart
12    uses anything below $4000. It has 4KB of ROM at $3000-$3fff
13    and 2KB of battery-backed RAM at $1000-$17ff.
14
15    Accordingly, we use the following handlers:
16    - read_04xx/write_04xx for accesses in the $0400 to $047f range
17    - read_10xx/write_10xx for accesses in the $1000 to $17ff range
18    - read_30xx/write_30xx for accesses in the $3000 to $3fff range
19    - read_40xx/write_40xx for accesses in the $4000 to $ffff range
20    even if not all carts use all of them (in particular no cart type
21    seems to use access to the ranges $0500 to $0fff and $2800 to $2fff)
22 
23
24 ***********************************************************************************************************/
25
26
27#include "emu.h"
28#include "a78_slot.h"
29
30//**************************************************************************
31//  GLOBAL VARIABLES
32//**************************************************************************
33
34const device_type A78_CART_SLOT = &device_creator<a78_cart_slot_device>;
35
36
37//-------------------------------------------------
38//  device_vcs_cart_interface - constructor
39//-------------------------------------------------
40
41device_a78_cart_interface::device_a78_cart_interface (const machine_config &mconfig, device_t &device)
42   : device_slot_card_interface(mconfig, device)
43{
44}
45
46
47//-------------------------------------------------
48//  ~device_a78_cart_interface  - destructor
49//-------------------------------------------------
50
51device_a78_cart_interface::~device_a78_cart_interface ()
52{
53}
54
55//-------------------------------------------------
56//  rom_alloc - alloc the space for the cart
57//-------------------------------------------------
58
59void device_a78_cart_interface::rom_alloc(UINT32 size)
60{
61   if (m_rom == NULL)
62   {
63      // allocate rom
64      m_rom.resize(size);
65
66      // setup other helpers
67      if ((size / 0x4000) & 1) // compensate for SuperGame carts with 9 x 16K banks (to my knowledge no other cart has m_bank_mask != power of 2)
68         m_bank_mask = (size / 0x4000) - 2;
69      else
70         m_bank_mask = (size / 0x4000) - 1;
71
72      // the rom is mapped to the top of the memory area
73      // so we store the starting point of data to simplify
74      // the access handling
75      m_base_rom = 0x10000 - size;
76   }
77}
78
79//-------------------------------------------------
80//  ram_alloc - alloc the space for the on-cart RAM
81//-------------------------------------------------
82
83void device_a78_cart_interface::ram_alloc(UINT32 size)
84{
85   if (m_ram == NULL)
86   {
87      m_ram.resize(size);
88      device().save_item(NAME(m_ram));
89   }
90}
91
92
93//-------------------------------------------------
94//  ram_alloc - alloc the space for the on-cart RAM
95//-------------------------------------------------
96
97void device_a78_cart_interface::nvram_alloc(UINT32 size)
98{
99   if (m_nvram == NULL)
100   {
101      m_nvram.resize(size);
102      device().save_item(NAME(m_nvram));
103   }
104}
105
106
107
108//**************************************************************************
109//  LIVE DEVICE
110//**************************************************************************
111
112//-------------------------------------------------
113//  a78_cart_slot_device - constructor
114//-------------------------------------------------
115a78_cart_slot_device::a78_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
116                  device_t(mconfig, A78_CART_SLOT, "Atari 7800 Cartridge Slot", tag, owner, clock, "a78_cart_slot", __FILE__),
117                  device_image_interface(mconfig, *this),
118                  device_slot_interface(mconfig, *this)
119{
120}
121
122
123//-------------------------------------------------
124//  a78_cart_slot_device - destructor
125//-------------------------------------------------
126
127a78_cart_slot_device::~a78_cart_slot_device()
128{
129}
130
131//-------------------------------------------------
132//  device_start - device-specific startup
133//-------------------------------------------------
134
135void a78_cart_slot_device::device_start()
136{
137   m_cart = dynamic_cast<device_a78_cart_interface  *>(get_card_device());
138}
139
140//-------------------------------------------------
141//  device_config_complete - perform any
142//  operations now that the configuration is
143//  complete
144//-------------------------------------------------
145
146void a78_cart_slot_device::device_config_complete()
147{
148   // set brief and instance name
149   update_names();
150}
151
152
153
154/*-------------------------------------------------
155 call load
156 -------------------------------------------------*/
157
158//-------------------------------------------------
159//  A78 PCBs
160//-------------------------------------------------
161
162struct a78_slot
163{
164   int                     pcb_id;
165   const char              *slot_option;
166};
167
168// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
169static const a78_slot slot_list[] =
170{
171   { A78_TYPE0,    "a78_rom" },
172   { A78_TYPE1,    "a78_pokey" },
173   { A78_TYPE2,    "a78_sg" },
174   { A78_TYPE3,    "a78_sg_pokey" },
175   { A78_TYPE6,    "a78_sg_ram" },
176   { A78_TYPEA,    "a78_sg9" },
177   { A78_TYPEB,    "a78_xmc" },
178   { A78_ABSOLUTE, "a78_abs" },
179   { A78_ACTIVISION, "a78_act" },
180   { A78_HSC,      "a78_hsc" },
181   { A78_BANKRAM,  "a78_bankram" },
182   { A78_XB_BOARD, "a78_xboard" },
183   { A78_XM_BOARD, "a78_xm" },
184};
185
186static int a78_get_pcb_id(const char *slot)
187{
188   for (int i = 0; i < ARRAY_LENGTH(slot_list); i++)
189   {
190      if (!core_stricmp(slot_list[i].slot_option, slot))
191         return slot_list[i].pcb_id;
192   }
193
194   return 0;
195}
196
197static const char *a78_get_slot(int type)
198{
199   for (int i = 0; i < ARRAY_LENGTH(slot_list); i++)
200   {
201      if (slot_list[i].pcb_id == type)
202         return slot_list[i].slot_option;
203   }
204
205   return "a78_rom";
206}
207
208bool a78_cart_slot_device::call_load()
209{
210   UINT8 *ROM;
211   UINT32 len;
212
213   if (software_entry() != NULL)
214   {
215      const char *pcb_name;
216      len = get_software_region_length("rom");
217
218      m_cart->rom_alloc(len);
219      ROM = m_cart->get_rom_base();
220      memcpy(ROM, get_software_region("rom"), len);
221
222      if ((pcb_name = get_feature("slot")) != NULL)
223         m_type = a78_get_pcb_id(pcb_name);
224      else
225         m_type = A78_TYPE0;
226   }
227   else
228   {
229      // Load and check the header
230      char head[128];     
231      fread(head, 128);
232     
233      if (verify_header((char *)head) == IMAGE_VERIFY_FAIL)
234         return IMAGE_INIT_FAIL;
235
236      len = (head[49] << 24) |(head[50] << 16) |(head[51] << 8) | head[52];
237      if (len + 128 > length())
238      {
239         logerror("Invalid length in the header. The game might be corrupted.\n");
240         len = length() - 128;
241      }
242
243      switch ((head[53] << 8) | head[54])
244      {
245         case 0x0000:
246            m_type = A78_TYPE0;
247            break;
248         case 0x0001:
249            m_type = A78_TYPE1;
250            break;
251         case 0x0002:
252            m_type = A78_TYPE2;
253            break;
254         case 0x0003:
255            m_type = A78_TYPE3;
256            break;
257         case 0x0006:
258            m_type = A78_TYPE6;
259            break;
260         case 0x000a:
261            m_type = A78_TYPEA;
262            break;
263         case 0x000b:
264            m_type = A78_TYPEB;
265            break;
266         case 0x0020:
267            m_type = A78_BANKRAM;
268            break;
269         case 0x0100:
270            m_type = A78_ABSOLUTE;
271            break;
272         case 0x0200:
273            m_type = A78_ACTIVISION;
274            break;
275      }
276      logerror("Cart type: %x\n", m_type);
277     
278      // This field is currently only used for logging
279      m_stick_type = head[55];
280     
281      m_cart->rom_alloc(len);
282      ROM = m_cart->get_rom_base();
283      fread(ROM, len);
284   }
285
286   //printf("Type: %s\n", a78_get_slot(m_type));
287
288   if (m_type == A78_TYPE6)
289      m_cart->ram_alloc(0x4000);
290   if (m_type == A78_BANKRAM)
291      m_cart->ram_alloc(0x8000);
292   if (m_type == A78_XB_BOARD || m_type == A78_XM_BOARD)
293      m_cart->ram_alloc(0x20000);
294   if (m_type == A78_HSC || m_type == A78_XM_BOARD)
295   {
296      m_cart->nvram_alloc(0x800);
297      battery_load(m_cart->get_nvram_base(), 0x800, 0xff);
298   }
299
300   return IMAGE_INIT_PASS;
301}
302
303
304void a78_partialhash(hash_collection &dest, const unsigned char *data,
305                unsigned long length, const char *functions)
306{
307   if (length <= 128)
308      return;
309   dest.compute(&data[128], length - 128, functions);
310}
311
312
313/*-------------------------------------------------
314 call_unload
315 -------------------------------------------------*/
316
317void a78_cart_slot_device::call_unload()
318{
319   if (m_cart && m_cart->get_nvram_size())
320      battery_save(m_cart->get_nvram_base(), 0x800);
321}
322
323
324
325/*-------------------------------------------------
326 call softlist load
327 -------------------------------------------------*/
328
329bool a78_cart_slot_device::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry)
330{
331   load_software_part_region(*this, swlist, swname, start_entry );
332   return TRUE;
333}
334
335/*-------------------------------------------------
336 identify_cart_type - code to detect cart type from
337 fullpath
338 -------------------------------------------------*/
339
340int a78_cart_slot_device::verify_header(char *header)
341{
342   const char *magic = "ATARI7800";
343
344   if (strncmp(magic, header + 1, 9))
345   {
346      logerror("Not a valid A7800 image\n");
347      return IMAGE_VERIFY_FAIL;
348   }
349
350   logerror("returning ID_OK\n");
351   return IMAGE_VERIFY_PASS;
352}
353
354
355/*-------------------------------------------------
356 get default card software
357 -------------------------------------------------*/
358
359void a78_cart_slot_device::get_default_card_software(astring &result)
360{
361   if (open_image_file(mconfig().options()))
362   {
363      const char *slot_string = "a78_rom";
364      dynamic_buffer head(128);
365      int type = A78_TYPE0;
366     
367      // Load and check the header
368      core_fread(m_file, head, 128);     
369      switch ((head[53] << 8) | head[54])
370      {
371         case 0x0000:
372            type = A78_TYPE0;
373            break;
374         case 0x0001:
375            type = A78_TYPE1;
376            break;
377         case 0x0002:
378            type = A78_TYPE2;
379            break;
380         case 0x0003:
381            type = A78_TYPE3;
382            break;
383         case 0x0004:
384            type = A78_TYPE6;
385            break;
386         case 0x000a:
387            type = A78_TYPEA;
388            break;
389         case 0x000b:
390            type = A78_TYPEB;
391            break;
392         case 0x0020:
393            m_type = A78_BANKRAM;
394            break;
395         case 0x0100:
396            type = A78_ABSOLUTE;
397            break;
398         case 0x0200:
399            type = A78_ACTIVISION;
400            break;
401      }
402      logerror("Cart type: %x\n", type);
403      slot_string = a78_get_slot(type);
404     
405      clear();
406     
407      result.cpy(slot_string);
408   }
409   else
410      software_get_default_slot(result, "a78_rom");
411}
412
413
414/*-------------------------------------------------
415 read
416 -------------------------------------------------*/
417
418READ8_MEMBER(a78_cart_slot_device::read_04xx)
419{
420   if (m_cart)
421      return m_cart->read_04xx(space, offset, mem_mask);
422   else
423      return 0xff;
424}
425
426READ8_MEMBER(a78_cart_slot_device::read_10xx)
427{
428   if (m_cart)
429      return m_cart->read_10xx(space, offset, mem_mask);
430   else
431      return 0xff;
432}
433
434READ8_MEMBER(a78_cart_slot_device::read_30xx)
435{
436   if (m_cart)
437      return m_cart->read_30xx(space, offset, mem_mask);
438   else
439      return 0xff;
440}
441
442READ8_MEMBER(a78_cart_slot_device::read_40xx)
443{
444   if (m_cart)
445      return m_cart->read_40xx(space, offset, mem_mask);
446   else
447      return 0xff;
448}
449
450
451/*-------------------------------------------------
452 write
453 -------------------------------------------------*/
454
455WRITE8_MEMBER(a78_cart_slot_device::write_04xx)
456{
457   if (m_cart)
458      m_cart->write_04xx(space, offset, data, mem_mask);
459}
460
461WRITE8_MEMBER(a78_cart_slot_device::write_10xx)
462{
463   if (m_cart)
464      m_cart->write_10xx(space, offset, data, mem_mask);
465}
466
467WRITE8_MEMBER(a78_cart_slot_device::write_30xx)
468{
469   if (m_cart)
470      m_cart->write_30xx(space, offset, data, mem_mask);
471}
472
473WRITE8_MEMBER(a78_cart_slot_device::write_40xx)
474{
475   if (m_cart)
476      m_cart->write_40xx(space, offset, data, mem_mask);
477}
478
479
480/*  Header format
481 0     Header version     - 1 byte
482 1..16  "ATARI7800     "  - 16 bytes
483 17..48 Cart title        - 32 bytes
484 49..52 data length      - 4 bytes
485 53..54 cart type          - 2 bytes
486 bit 0 0x01 - pokey cart
487 bit 1 0x02 - supercart bank switched
488 bit 2 0x04 - supercart RAM at $4000
489 bit 3 0x08 - additional ROM at $4000
490 bit 4 0x10 - bank 6 at $4000
491 bit 5 0x20 - supercart banked RAM
492 
493 bit 8-15 - Special
494 0 = Normal cart
495 1 = Absolute (F18 Hornet)
496 2 = Activision
497 
498 55   controller 1 type  - 1 byte
499 56   controller 2 type  - 1 byte
500 0 = None
501 1 = Joystick
502 2 = Light Gun
503 57  0 = NTSC/1 = PAL
504 
505 100..127 "ACTUAL CART DATA STARTS HERE" - 28 bytes
506 
507 Versions:
508 Version 0: Initial release
509 Version 1: Added PAL/NTSC bit. Added Special cart byte.
510 Changed 53 bit 2, added bit 3
511 
512 */
513
514// TODO: log all properties from the header
No newline at end of file
Property changes on: trunk/src/emu/bus/a7800/a78_slot.c
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/a7800/hiscore.h
r0r31767
1#ifndef __A78_HISCORE_H
2#define __A78_HISCORE_H
3
4#include "a78_slot.h"
5#include "rom.h"
6
7
8// ======================> a78_hiscore_device
9
10class a78_hiscore_device : public a78_rom_device
11{
12public:
13   // construction/destruction
14   a78_hiscore_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
15   
16   // device-level overrides
17   virtual machine_config_constructor device_mconfig_additions() const;
18   
19   // reading and writing
20   virtual DECLARE_READ8_MEMBER(read_04xx);
21   virtual DECLARE_WRITE8_MEMBER(write_04xx);
22   virtual DECLARE_READ8_MEMBER(read_10xx);
23   virtual DECLARE_WRITE8_MEMBER(write_10xx);
24   virtual DECLARE_READ8_MEMBER(read_30xx);
25   virtual DECLARE_READ8_MEMBER(read_40xx);
26   virtual DECLARE_WRITE8_MEMBER(write_40xx);
27
28protected:
29   required_device<a78_cart_slot_device> m_hscslot;
30};
31
32
33
34// device type definition
35extern const device_type A78_HISCORE;
36
37
38#endif
Property changes on: trunk/src/emu/bus/a7800/hiscore.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/emu/bus/a7800/rom.h
r0r31767
1#ifndef __A78_ROM_H
2#define __A78_ROM_H
3
4#include "a78_slot.h"
5#include "sound/pokey.h"
6
7
8// ======================> a78_rom_device
9
10class a78_rom_device : public device_t,
11                  public device_a78_cart_interface
12{
13public:
14   // construction/destruction
15   a78_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);
16   a78_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
17
18   // device-level overrides
19   virtual void device_start();
20   virtual void device_reset();
21
22   // reading and writing
23   virtual DECLARE_READ8_MEMBER(read_40xx);
24};
25
26
27// ======================> a78_rom_pokey_device
28
29class a78_rom_pokey_device : public a78_rom_device
30{
31public:
32   // construction/destruction
33   a78_rom_pokey_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
34   
35   // device-level overrides
36   virtual machine_config_constructor device_mconfig_additions() const;
37   
38   // reading and writing
39   virtual DECLARE_READ8_MEMBER(read_04xx);
40   virtual DECLARE_WRITE8_MEMBER(write_04xx);
41   virtual DECLARE_WRITE8_MEMBER(write_40xx);
42   
43protected:
44   required_device<pokey_device> m_pokey;
45};
46
47
48// ======================> a78_rom_sg_device
49
50class a78_rom_sg_device : public a78_rom_device
51{
52public:
53   // construction/destruction
54   a78_rom_sg_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);
55   a78_rom_sg_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
56   
57   // device-level overrides
58   virtual void device_start();
59   virtual void device_reset();
60   
61   // reading and writing
62   virtual DECLARE_READ8_MEMBER(read_40xx);
63   virtual DECLARE_WRITE8_MEMBER(write_40xx);
64
65protected:
66   int m_bank;
67};
68
69
70// ======================> a78_rom_sg_pokey_device
71
72class a78_rom_sg_pokey_device : public a78_rom_sg_device
73{
74public:
75   // construction/destruction
76   a78_rom_sg_pokey_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
77   
78   // device-level overrides
79   virtual machine_config_constructor device_mconfig_additions() const;
80   
81   // reading and writing
82   virtual DECLARE_READ8_MEMBER(read_04xx);
83   virtual DECLARE_WRITE8_MEMBER(write_04xx);
84   virtual DECLARE_WRITE8_MEMBER(write_40xx);
85   
86protected:
87   required_device<pokey_device> m_pokey;
88};
89
90
91// ======================> a78_rom_sg_ram_device
92
93class a78_rom_sg_ram_device : public a78_rom_sg_device
94{
95public:
96   // construction/destruction
97   a78_rom_sg_ram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
98   
99   // reading and writing
100   virtual DECLARE_READ8_MEMBER(read_40xx);
101   virtual DECLARE_WRITE8_MEMBER(write_40xx);
102};
103
104
105// ======================> a78_rom_bankram_device
106
107class a78_rom_bankram_device : public a78_rom_sg_device
108{
109public:
110   // construction/destruction
111   a78_rom_bankram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
112   
113   // device-level overrides
114   virtual void device_start();
115   virtual void device_reset();
116   
117   // reading and writing
118   virtual DECLARE_READ8_MEMBER(read_40xx);
119   virtual DECLARE_WRITE8_MEMBER(write_40xx);
120
121protected:
122   int m_ram_bank;
123};
124
125
126// ======================> a78_rom_sg_9banks_device
127
128class a78_rom_sg_9banks_device : public a78_rom_sg_device
129{
130public:
131   // construction/destruction
132   a78_rom_sg_9banks_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);
133   a78_rom_sg_9banks_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
134   
135   // reading and writing
136   virtual DECLARE_READ8_MEMBER(read_40xx);
137   virtual DECLARE_WRITE8_MEMBER(write_40xx);
138};
139
140
141// ======================> a78_rom_xm_device
142
143class a78_rom_xm_device : public a78_rom_sg_9banks_device
144{
145public:
146   // construction/destruction
147   a78_rom_xm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
148   
149   // device-level overrides
150   virtual machine_config_constructor device_mconfig_additions() const;
151   
152   // reading and writing
153   virtual DECLARE_READ8_MEMBER(read_04xx);
154   virtual DECLARE_WRITE8_MEMBER(write_04xx);
155   virtual DECLARE_WRITE8_MEMBER(write_40xx);
156   
157protected:
158   required_device<pokey_device> m_pokey;
159};
160
161
162// ======================> a78_rom_abs_device
163
164class a78_rom_abs_device : public a78_rom_device
165{
166public:
167   // construction/destruction
168   a78_rom_abs_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
169   
170   // device-level overrides
171   virtual void device_start();
172   virtual void device_reset();
173   
174   // reading and writing
175   virtual DECLARE_READ8_MEMBER(read_40xx);
176   virtual DECLARE_WRITE8_MEMBER(write_40xx);
177   
178protected:
179   int m_bank;
180};
181
182
183// ======================> a78_rom_act_device
184
185class a78_rom_act_device : public a78_rom_device
186{
187public:
188   // construction/destruction
189   a78_rom_act_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
190   
191   // device-level overrides
192   virtual void device_start();
193   virtual void device_reset();
194   
195   // reading and writing
196   virtual DECLARE_READ8_MEMBER(read_40xx);
197   virtual DECLARE_WRITE8_MEMBER(write_40xx);
198   
199protected:
200   int m_bank;
201};
202
203
204// device type definition
205extern const device_type A78_ROM;
206extern const device_type A78_ROM_SG;
207extern const device_type A78_ROM_POKEY;
208extern const device_type A78_ROM_SG_POKEY;
209extern const device_type A78_ROM_SG_RAM;
210extern const device_type A78_ROM_BANKRAM;
211extern const device_type A78_ROM_SG_9BANKS;
212extern const device_type A78_ROM_XM;
213extern const device_type A78_ROM_ABSOLUTE;
214extern const device_type A78_ROM_ACTIVISION;
215
216
217#endif
Property changes on: trunk/src/emu/bus/a7800/rom.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/mess/drivers/a7800.c
r31766r31767
77  Dan Boris
88
99    2002/05/13 kubecj   added more banks for bankswitching
10                            added PAL machine description
11                            changed clock to be precise
10                        added PAL machine description
11                        changed clock to be precise
12                  improved cart emulation (in machine/)
1213
1314    2012/10/25 Robert Tuccitto  NTSC Color Generator utilized for
1415                color palette with hue shift/start
r31766r31767
8384
8485    2014/03/25 Mike Saarna  Fixed Riot Timer
8586
87    2014/04/04 Mike Saarna  Fix to controller button RIOT behavior
88
8689    2014/05/06 Mike Saarna/Robert Tuccitto Brought initial Maria cycle counts
87+           inline from measurements taken with logic analyzer and tests.
90               inline from measurements taken with logic analyzer and tests.
91 
92    2014/08/25 Fabio Priuli Converted carts to be slot devices and cleaned
93               up the driver (removed the pokey, cleaned up rom regions, etc.)
94 
8895***************************************************************************/
8996
9097#include "emu.h"
9198#include "cpu/m6502/m6502.h"
92#include "sound/pokey.h"
9399#include "sound/tiaintf.h"
94#include "imagedev/cartslot.h"
100#include "bus/a7800/a78_carts.h"
95101#include "machine/6532riot.h"
96102#include "includes/a7800.h"
97103
r31766r31767
101107
102108
103109/***************************************************************************
110 MEMORY HANDLERS
111 ***************************************************************************/
112
113// RIOT
114READ8_MEMBER(a7800_state::riot_joystick_r)
115{
116   return m_io_joysticks->read();
117}
118
119READ8_MEMBER(a7800_state::riot_console_button_r)
120{
121   return m_io_console_buttons->read();
122}
123
124WRITE8_MEMBER(a7800_state::riot_button_pullup_w)
125{
126   if(m_maincpu->space(AS_PROGRAM).read_byte(0x283) & 0x04)
127      m_p1_one_button = data & 0x04; // pin 6 of the controller port is held high by the riot chip when reading two-button controllers (from schematic)
128   if(m_maincpu->space(AS_PROGRAM).read_byte(0x283) & 0x10)
129      m_p2_one_button = data & 0x10;
130}
131
132READ8_MEMBER(a7800_state::tia_r)
133{
134   switch (offset & 0x0f)
135   {
136      case 0x00:
137      case 0x01:
138      case 0x02:
139      case 0x03:
140      case 0x04:
141      case 0x05:
142      case 0x06:
143      case 0x07:
144         /* Even though the 7800 doesn't use the TIA graphics the collision registers should
145          still return a reasonable value */
146         return 0x00;
147      case 0x08:
148         return ((m_io_buttons->read() & 0x02) << 6);
149      case 0x09:
150         return ((m_io_buttons->read() & 0x08) << 4);
151      case 0x0a:
152         return ((m_io_buttons->read() & 0x01) << 7);
153      case 0x0b:
154         return ((m_io_buttons->read() & 0x04) << 5);
155      case 0x0c:
156         if (((m_io_buttons->read() & 0x08) ||(m_io_buttons->read() & 0x02)) && m_p1_one_button)
157            return 0x00;
158         else
159            return 0x80;
160      case 0x0d:
161         if (((m_io_buttons->read() & 0x01) ||(m_io_buttons->read() & 0x04)) && m_p2_one_button)
162            return 0x00;
163         else
164            return 0x80;
165      default:
166         logerror("undefined TIA read %x\n",offset);
167         
168   }
169   return 0xff;
170}
171
172// TIA
173WRITE8_MEMBER(a7800_state::tia_w)
174{
175   if (offset < 0x20)
176   { //INPTCTRL covers TIA registers 0x00-0x1F until locked
177      if (data & 0x01)
178      {
179         if (m_ctrl_lock && offset == 0x01)
180            m_maria_flag = 1;
181         else if (!m_ctrl_lock)
182            m_maria_flag = 1;
183      }
184      if (!m_ctrl_lock)
185      {
186         m_ctrl_lock = data & 0x01;
187         m_ctrl_reg = data;
188      }
189   }
190   m_tia->tia_sound_w(space, offset, data);
191}
192
193
194// ROM
195READ8_MEMBER(a7800_state::bios_or_cart_r)
196{
197   if (!(m_ctrl_reg & 0x04))
198      return m_bios[offset];
199   else
200      return m_cartslot->read_40xx(space, offset + 0x8000);
201}
202
203/***************************************************************************
104204    ADDRESS MAPS
105205***************************************************************************/
106206
107207static ADDRESS_MAP_START( a7800_mem, AS_PROGRAM, 8, a7800_state )
108   AM_RANGE(0x0000, 0x001f) AM_MIRROR(0x300) AM_READWRITE(a7800_TIA_r, a7800_TIA_w)
109   AM_RANGE(0x0020, 0x003f) AM_MIRROR(0x300) AM_READWRITE(a7800_MARIA_r, a7800_MARIA_w)
110   AM_RANGE(0x0040, 0x00ff) AM_READ_BANK("bank5") AM_WRITE(a7800_RAM0_w)   /* RAM (6116 block 0) */
111   AM_RANGE(0x0140, 0x01ff) AM_RAMBANK("bank6")    /* RAM (6116 block 1) */
208   AM_RANGE(0x0000, 0x001f) AM_MIRROR(0x300) AM_READWRITE(tia_r, tia_w)
209   AM_RANGE(0x0020, 0x003f) AM_MIRROR(0x300) AM_READWRITE(maria_r, maria_w)
210   AM_RANGE(0x0040, 0x00ff) AM_RAMBANK("ram0")     // RAM (6116 block 0)
211   AM_RANGE(0x0140, 0x01ff) AM_RAMBANK("ram1")     // RAM (6116 block 1)
112212   AM_RANGE(0x0280, 0x02ff) AM_DEVREADWRITE("riot", riot6532_device, read, write)
113   AM_RANGE(0x0450, 0x045f) /* XBOARD POKEY1 */
114   AM_RANGE(0x0460, 0x046f) /* XBOARD POKEY2 */
115   AM_RANGE(0x0470, 0x047f) /* XBOARD CTRL */
116   AM_RANGE(0x0480, 0x04ff) AM_MIRROR(0x100) AM_RAM    /* RIOT RAM */
117   AM_RANGE(0x1000, 0x17ff) AM_RAM /* hs SRAM */
118   AM_RANGE(0x1800, 0x27ff) AM_RAM
119   AM_RANGE(0x2800, 0x2fff) AM_RAMBANK("bank7")    /* MAINRAM */
120   AM_RANGE(0x3000, 0x37ff) AM_RAMBANK("bank7")    /* MAINRAM */
121   AM_RANGE(0x3800, 0x3fff) AM_RAMBANK("bank7")    /* MAINRAM */
122   AM_RANGE(0x3000, 0x3fff) AM_ROM  /* hs ROM space */
123   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")                        /* f18 hornet */
124   AM_RANGE(0x4000, 0xffff) AM_WRITE(a7800_cart_w) /* XBOARD SRAM */
125   AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank2")                        /* sc */
126   AM_RANGE(0xa000, 0xbfff) AM_ROMBANK("bank3")                        /* sc + ac */
127   AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("bank4")                        /* ac */
128   AM_RANGE(0xe000, 0xffff) AM_ROM
213   AM_RANGE(0x0480, 0x04ff) AM_MIRROR(0x100) AM_RAMBANK("riot_ram")
214   AM_RANGE(0x1800, 0x27ff) AM_RAMBANK("main_ram")
215
216   AM_RANGE(0x2040, 0x20ff) AM_RAMBANK("ram0")     // mirror (6116 block 0)
217   AM_RANGE(0x2140, 0x21ff) AM_RAMBANK("ram1")     // mirror (6116 block 1)
218
219   AM_RANGE(0x2800, 0x2fff) AM_RAMBANK("mirror")   // these should mirror "main_ram" (according to docs)
220   AM_RANGE(0x3000, 0x37ff) AM_RAMBANK("mirror")   // but system have issues in such case...
221   AM_RANGE(0x3800, 0x3fff) AM_RAMBANK("mirror")
222   AM_RANGE(0x4000, 0xffff) AM_DEVWRITE("cartslot", a78_cart_slot_device, write_40xx)
223   AM_RANGE(0x4000, 0xbfff) AM_DEVREAD("cartslot", a78_cart_slot_device, read_40xx)
224   AM_RANGE(0xc000, 0xffff) AM_READ(bios_or_cart_r)   // here also the BIOS can be accessed
129225ADDRESS_MAP_END
130226
131227
r31766r31767
134230***************************************************************************/
135231
136232static INPUT_PORTS_START( a7800 )
137   PORT_START("joysticks")            /* IN0 */
233   PORT_START("joysticks")
138234   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP)    PORT_PLAYER(2) PORT_8WAY
139235   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN)  PORT_PLAYER(2) PORT_8WAY
140236   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT)  PORT_PLAYER(2) PORT_8WAY
r31766r31767
144240   PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT)  PORT_PLAYER(1) PORT_8WAY
145241   PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_PLAYER(1) PORT_8WAY
146242
147   PORT_START("buttons")              /* IN1 */
243   PORT_START("buttons")
148244   PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON2)       PORT_PLAYER(2)
149245   PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2)       PORT_PLAYER(1)
150246   PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON1)       PORT_PLAYER(2)
151247   PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON1)       PORT_PLAYER(1)
152248   PORT_BIT(0xF0, IP_ACTIVE_LOW, IPT_UNUSED)
153249
154   PORT_START("vblank")               /* IN2 */
250   PORT_START("vblank")
155251   PORT_BIT(0x7F, IP_ACTIVE_LOW, IPT_UNUSED)
156252   PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_VBLANK("screen")
157253
158   PORT_START("console_buttons")      /* IN3 */
254   PORT_START("console_buttons")
159255   PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER)  PORT_NAME("Reset")         PORT_CODE(KEYCODE_R)
160256   PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER)  PORT_NAME("Select")        PORT_CODE(KEYCODE_S)
161257   PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED)
r31766r31767
11331229    MACHINE DRIVERS
11341230***************************************************************************/
11351231
1232void a7800_state::machine_start()
1233{
1234   m_bios = machine().root_device().memregion("maincpu")->base() + 0xc000;
1235   save_item(NAME(m_p1_one_button));
1236   save_item(NAME(m_p2_one_button));
1237   save_item(NAME(m_bios_enabled));
1238   save_item(NAME(m_ctrl_lock));
1239   save_item(NAME(m_ctrl_reg));
1240   save_item(NAME(m_maria_flag));
1241   
1242   // install additional POKEY handlers
1243   switch (m_cartslot->get_cart_type())
1244   {
1245      case A78_TYPE1:
1246      case A78_TYPE3:
1247      case A78_TYPEB:
1248      case A78_XB_BOARD:
1249         m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0400, 0x047f, read8_delegate(FUNC(a78_cart_slot_device::read_04xx),(a78_cart_slot_device*)m_cartslot), write8_delegate(FUNC(a78_cart_slot_device::write_04xx),(a78_cart_slot_device*)m_cartslot));
1250         break;
1251      case A78_HSC:
1252         m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x17ff, read8_delegate(FUNC(a78_cart_slot_device::read_10xx),(a78_cart_slot_device*)m_cartslot), write8_delegate(FUNC(a78_cart_slot_device::write_10xx),(a78_cart_slot_device*)m_cartslot));
1253         m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x3000, 0x3fff, read8_delegate(FUNC(a78_cart_slot_device::read_30xx),(a78_cart_slot_device*)m_cartslot), write8_delegate(FUNC(a78_cart_slot_device::write_30xx),(a78_cart_slot_device*)m_cartslot));
1254         break;
1255      case A78_XM_BOARD:
1256         m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0400, 0x047f, read8_delegate(FUNC(a78_cart_slot_device::read_04xx),(a78_cart_slot_device*)m_cartslot), write8_delegate(FUNC(a78_cart_slot_device::write_04xx),(a78_cart_slot_device*)m_cartslot));
1257         m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x17ff, read8_delegate(FUNC(a78_cart_slot_device::read_10xx),(a78_cart_slot_device*)m_cartslot), write8_delegate(FUNC(a78_cart_slot_device::write_10xx),(a78_cart_slot_device*)m_cartslot));
1258         m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x3000, 0x3fff, read8_delegate(FUNC(a78_cart_slot_device::read_30xx),(a78_cart_slot_device*)m_cartslot), write8_delegate(FUNC(a78_cart_slot_device::write_30xx),(a78_cart_slot_device*)m_cartslot));
1259         break;
1260   }
1261}
1262
1263void a7800_state::machine_reset()
1264{
1265   m_ctrl_lock = 0;
1266   m_ctrl_reg = 0;
1267   m_maria_flag = 0;
1268   m_bios_enabled = 0;
1269}
1270
11361271static MACHINE_CONFIG_START( a7800_ntsc, a7800_state )
11371272   /* basic machine hardware */
11381273   MCFG_CPU_ADD("maincpu", M6502, A7800_NTSC_Y1/8) /* 1.79 MHz (switches to 1.19 MHz on TIA or RIOT access) */
11391274   MCFG_CPU_PROGRAM_MAP(a7800_mem)
11401275   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", a7800_state, a7800_interrupt, "screen", 0, 1)
11411276
1142
11431277   /* video hardware */
11441278   MCFG_SCREEN_ADD("screen", RASTER)
11451279   MCFG_SCREEN_RAW_PARAMS( 7159090, 454, 0, 320, 263, 27, 27 + 192 + 32 )
r31766r31767
11491283   MCFG_PALETTE_ADD("palette", ARRAY_LENGTH(a7800_palette) / 3)
11501284   MCFG_PALETTE_INIT_OWNER(a7800_state, a7800)
11511285
1152
11531286   /* sound hardware */
11541287   MCFG_SPEAKER_STANDARD_MONO("mono")
11551288   MCFG_SOUND_TIA_ADD("tia", 31400)
11561289   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
1157   MCFG_SOUND_ADD("pokey", POKEY, A7800_NTSC_Y1/8)
1158   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
11591290
11601291   /* devices */
11611292   MCFG_DEVICE_ADD("riot", RIOT6532, A7800_NTSC_Y1/8)
r31766r31767
11631294   MCFG_RIOT6532_IN_PB_CB(READ8(a7800_state, riot_console_button_r))
11641295   MCFG_RIOT6532_OUT_PB_CB(WRITE8(a7800_state, riot_button_pullup_w))
11651296
1166   MCFG_CARTSLOT_ADD("cart")
1167   MCFG_CARTSLOT_EXTENSION_LIST("bin,a78")
1168   MCFG_CARTSLOT_NOT_MANDATORY
1169   MCFG_CARTSLOT_LOAD(a7800_state,a7800_cart)
1170   MCFG_CARTSLOT_PARTIALHASH(a7800_partialhash)
1171   MCFG_CARTSLOT_INTERFACE("a7800_cart")
1297   MCFG_A78_CARTRIDGE_ADD("cartslot", a7800_cart, NULL)
11721298
11731299   /* software lists */
11741300   MCFG_SOFTWARE_LIST_ADD("cart_list","a7800")
r31766r31767
11771303
11781304
11791305static MACHINE_CONFIG_DERIVED( a7800_pal, a7800_ntsc )
1180
11811306   /* basic machine hardware */
11821307   MCFG_CPU_MODIFY("maincpu")
11831308   MCFG_CPU_CLOCK(CLK_PAL)
r31766r31767
11891314   MCFG_PALETTE_MODIFY("palette")
11901315   MCFG_PALETTE_INIT_OWNER(a7800_state, a7800p )
11911316
1192   /* sound hardware */
1193   MCFG_SOUND_MODIFY("pokey")
1194   MCFG_SOUND_CLOCK(CLK_PAL)
1195   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
1196
11971317   /* devices */
11981318   MCFG_DEVICE_REMOVE("riot")
11991319   MCFG_DEVICE_ADD("riot", RIOT6532, CLK_PAL)
r31766r31767
12131333***************************************************************************/
12141334
12151335ROM_START( a7800 )
1216   ROM_REGION(0x100000, "maincpu", 0)
1217   ROM_FILL(0x0000, 0x100000, 0xff)
1336   ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
12181337   ROM_SYSTEM_BIOS( 0, "a7800", "Atari 7800" )
12191338   ROMX_LOAD("7800.u7", 0xf000, 0x1000, CRC(5d13730c) SHA1(d9d134bb6b36907c615a594cc7688f7bfcef5b43), ROM_BIOS(1))
12201339   ROM_SYSTEM_BIOS( 1, "a7800pr", "Atari 7800 (prototype with Asteroids)" )
r31766r31767
12221341ROM_END
12231342
12241343ROM_START( a7800p )
1225   ROM_REGION(0x100000, "maincpu", 0)
1226   ROM_FILL(0x0000, 0x100000, 0xff)
1344   ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
12271345   ROM_LOAD("7800pal.rom", 0xc000, 0x4000, CRC(d5b61170) SHA1(5a140136a16d1d83e4ff32a19409ca376a8df874))
12281346ROM_END
12291347
12301348
12311349/***************************************************************************
1350 DRIVER INIT
1351 ***************************************************************************/
1352
1353DRIVER_INIT_MEMBER(a7800_state,a7800_ntsc)
1354{
1355   m_ispal = FALSE;
1356   m_lines = 263;
1357   m_p1_one_button = 1;
1358   m_p2_one_button = 1;
1359}
1360
1361
1362DRIVER_INIT_MEMBER(a7800_state,a7800_pal)
1363{
1364   m_ispal = TRUE;
1365   m_lines = 313;
1366   m_p1_one_button = 1;
1367   m_p2_one_button = 1;
1368}
1369
1370
1371/***************************************************************************
12321372    GAME DRIVERS
12331373***************************************************************************/
12341374
trunk/src/mess/mess.mak
r31766r31767
560560
561561BUSES += A1BUS
562562BUSES += A2BUS
563BUSES += A7800
563564BUSES += ABCBUS
564565BUSES += ABCKB
565566BUSES += ADAM
r31766r31767
10231024$(MESSOBJ)/atari.a:             \
10241025   $(MESS_MACHINE)/atarifdc.o  \
10251026   $(MESS_DRIVERS)/atari400.o  \
1026   $(MESS_MACHINE)/a7800.o     \
10271027   $(MESS_DRIVERS)/a7800.o     \
10281028   $(MESS_VIDEO)/a7800.o       \
10291029   $(MESS_DRIVERS)/a2600.o     \
trunk/src/mess/machine/a7800.c
r31766r31767
1/***************************************************************************
2
3    a7800.c
4
5    Machine file to handle emulation of the Atari 7800.
6
7     5-Nov-2003 npwoods     Cleanups
8
9    14-May-2002 kubecj      Fixed Fatal Run - adding simple riot timer helped.
10                            maybe someone with knowledge should add full fledged
11                            riot emulation?
12
13    13-May-2002 kubecj      Fixed a7800_cart_type not to be too short ;-D
14                            fixed for loading of bank6 cart (uh, I hope)
15                            fixed for loading 64k supercarts
16                            fixed for using PAL bios
17                            cart not needed when in PAL mode
18                            added F18 Hornet bank select type
19                            added Activision bank select type
20    19-Feb-2010 DanB        Added return values for TIA collision registers
21
22    04-Apr-2014 Mike Saarna Fix to controller button RIOT behavior and
23                expanded cart handling (bit 05).
24***************************************************************************/
25
26#include "emu.h"
27#include "includes/a7800.h"
28#include "cpu/m6502/m6502.h"
29
30
31
32/* local */
33
34
35
36/***************************************************************************
37    6532 RIOT
38***************************************************************************/
39
40READ8_MEMBER(a7800_state::riot_joystick_r)
41{
42   return m_io_joysticks->read();
43}
44
45READ8_MEMBER(a7800_state::riot_console_button_r)
46{
47   return m_io_console_buttons->read();
48}
49
50WRITE8_MEMBER(a7800_state::riot_button_pullup_w)
51{
52   if(m_maincpu->space(AS_PROGRAM).read_byte(0x283) & 0x04)
53      m_p1_one_button = data & 0x04; // pin 6 of the controller port is held high by the riot chip when reading two-button controllers (from schematic)
54   if(m_maincpu->space(AS_PROGRAM).read_byte(0x283) & 0x10)
55      m_p2_one_button = data & 0x10;
56}
57
58/***************************************************************************
59    DRIVER INIT
60***************************************************************************/
61
62void a7800_state::a7800_driver_init(int ispal, int lines)
63{
64   address_space& space = m_maincpu->space(AS_PROGRAM);
65   m_ROM = m_region_maincpu->base();
66   m_ispal = ispal;
67   m_lines = lines;
68   m_p1_one_button = 1;
69   m_p2_one_button = 1;
70
71   /* standard banks */
72   m_bank5->set_base(&m_ROM[0x2040]);       /* RAM0 */
73   m_bank6->set_base(&m_ROM[0x2140]);       /* RAM1 */
74   m_bank7->set_base(&m_ROM[0x2000]);       /* MAINRAM */
75
76   /* Brutal hack put in as a consequence of new memory system; fix this */
77   space.install_readwrite_bank(0x0480, 0x04FF,"bank10");
78   m_bank10 = membank("bank10");
79   m_bank10->set_base(m_ROM + 0x0480);
80   space.install_readwrite_bank(0x1800, 0x27FF, "bank11");
81   m_bank11 = membank("bank11");
82   m_bank11->set_base(m_ROM + 0x1800);
83
84   m_bios_bkup = NULL;
85   m_cart_bkup = NULL;
86
87   /* Allocate memory for BIOS bank switching */
88   m_bios_bkup = auto_alloc_array_clear(machine(), UINT8, 0x4000);
89   m_cart_bkup = auto_alloc_array(machine(), UINT8, 0x4000);
90
91   /* save the BIOS so we can switch it in and out */
92   memcpy( m_bios_bkup, m_ROM + 0xC000, 0x4000 );
93
94   /* Initialize cart area to "no data" */
95   memset( m_cart_bkup, 0xFF, 0x4000 );
96
97   /* defaults for PAL bios without cart */
98   m_cart_type = 0;
99   m_stick_type = 1;
100}
101
102
103DRIVER_INIT_MEMBER(a7800_state,a7800_ntsc)
104{
105   a7800_driver_init(FALSE, 263);
106}
107
108
109DRIVER_INIT_MEMBER(a7800_state,a7800_pal)
110{
111   a7800_driver_init(TRUE, 313);
112}
113
114
115void a7800_state::machine_reset()
116{
117   UINT8 *memory;
118   address_space& space = m_maincpu->space(AS_PROGRAM);
119
120   m_ctrl_lock = 0;
121   m_ctrl_reg = 0;
122   m_maria_flag = 0;
123
124   /* set banks to default states */
125   memory = m_region_maincpu->base();
126   if(m_cart_type & 0x20)  //supercart bankram
127   m_bank1->set_base(memory + 0xf0000 );
128   else
129   m_bank1->set_base(memory + 0x4000 );
130   m_bank2->set_base(memory + 0x8000 );
131   m_bank3->set_base(memory + 0xA000 );
132   m_bank4->set_base(memory + 0xC000 );
133
134   /* pokey cartridge */
135   if (m_cart_type & 0x01)
136   {
137      space.install_readwrite_handler(0x0450, 0x045F, read8_delegate(FUNC(pokey_device::read),(pokey_device*)m_pokey), write8_delegate(FUNC(pokey_device::write),(pokey_device*)m_pokey));
138   }
139}
140
141
142/***************************************************************************
143    CARTRIDGE HANDLING
144***************************************************************************/
145
146#define MBANK_TYPE_ATARI 0x0000
147#define MBANK_TYPE_ACTIVISION 0x0100
148#define MBANK_TYPE_ABSOLUTE 0x0200
149
150/*  Header format
1510     Header version     - 1 byte
1521..16  "ATARI7800     "  - 16 bytes
15317..48 Cart title        - 32 bytes
15449..52 data length      - 4 bytes
15553..54 cart type          - 2 bytes
156    bit 0 0x01 - pokey cart
157    bit 1 0x02 - supercart bank switched
158    bit 2 0x04 - supercart RAM at $4000
159    bit 3 0x08 - additional state->m_ROM at $4000
160    bit 4 0x10 - bank 6 at $4000
161    bit 5 0x20 - supercart banked RAM
162
163    bit 8-15 - Special
164        0 = Normal cart
165        1 = Absolute (F18 Hornet)
166        2 = Activision
167
16855   controller 1 type  - 1 byte
16956   controller 2 type  - 1 byte
170    0 = None
171    1 = Joystick
172    2 = Light Gun
17357  0 = NTSC/1 = PAL
174
175100..127 "ACTUAL CART DATA STARTS HERE" - 28 bytes
176
177Versions:
178    Version 0: Initial release
179    Version 1: Added PAL/NTSC bit. Added Special cart byte.
180               Changed 53 bit 2, added bit 3
181
182*/
183void a7800_partialhash(hash_collection &dest, const unsigned char *data,
184   unsigned long length, const char *functions)
185{
186   if (length <= 128)
187      return;
188   dest.compute(&data[128], length - 128, functions);
189}
190
191
192int a7800_state::a7800_verify_cart(char header[128])
193{
194   const char* tag = "ATARI7800";
195
196   if( strncmp( tag, header + 1, 9 ) )
197   {
198      logerror("Not a valid A7800 image\n");
199      return IMAGE_VERIFY_FAIL;
200   }
201
202   logerror("returning ID_OK\n");
203   return IMAGE_VERIFY_PASS;
204}
205
206
207struct a7800_pcb
208{
209   const char *pcb_name;
210   UINT16     type;
211};
212
213// sketchy support for a7800 cart types
214// TODO: proper emulation of the banking based on xml
215// (and on the real cart layout!)
216static const a7800_pcb pcb_list[] =
217{
218   { "ABSOLUTE", MBANK_TYPE_ABSOLUTE },
219   { "ACTIVISION", MBANK_TYPE_ACTIVISION },
220   { "TYPE-0", 0x0 },
221   { "TYPE-1", 0x1 },
222   { "TYPE-2", 0x2 },
223   { "TYPE-3", 0x3 },
224   { "TYPE-6", 0x6 },
225   { "TYPE-A", 0xa },
226   { "TYPE-XM", 0xb }, /* XM cart? (dkongxm) */
227   { 0 }
228};
229
230UINT16 a7800_state::a7800_get_pcb_id(const char *pcb)
231{
232   int i;
233
234   for (i = 0; i < ARRAY_LENGTH(pcb_list); i++)
235   {
236      if (!core_stricmp(pcb_list[i].pcb_name, pcb))
237         return pcb_list[i].type;
238   }
239
240   return 0;
241}
242
243DEVICE_IMAGE_LOAD_MEMBER( a7800_state, a7800_cart )
244{
245   UINT32 len = 0, start = 0;
246   unsigned char header[128];
247   UINT8 *memory = m_region_maincpu->base();
248   const char  *pcb_name;
249
250   // detect cart type either from xml or from header
251   if (image.software_entry() == NULL)
252   {
253      /* Load and decode the header */
254      image.fread(header, 128);
255
256      /* Check the cart */
257      if( a7800_verify_cart((char *)header) == IMAGE_VERIFY_FAIL)
258         return IMAGE_INIT_FAIL;
259
260      len =(header[49] << 24) |(header[50] << 16) |(header[51] << 8) | header[52];
261      m_cart_size = len;
262
263      m_cart_type =(header[53] << 8) | header[54];
264      m_stick_type = header[55];
265      logerror("Cart type: %x\n", m_cart_type);
266
267      /* For now, if game support stick and gun, set it to stick */
268      if (m_stick_type == 3)
269         m_stick_type = 1;
270   }
271   else
272   {
273      len = image.get_software_region_length("rom");
274      m_cart_size = len;
275      // TODO: add stick/gun support to xml!
276      m_stick_type = 1;
277      if ((pcb_name = image.get_feature("pcb_type")) == NULL)
278         m_cart_type = 0;
279      else
280         m_cart_type = a7800_get_pcb_id(pcb_name);
281   }
282
283   if (m_cart_type == 0 || m_cart_type == 1)
284   {
285      /* Normal Cart */
286      start = 0x10000 - len;
287      m_cartridge_rom = memory + start;
288      if (image.software_entry() == NULL)
289         image.fread(m_cartridge_rom, len);
290      else
291         memcpy(m_cartridge_rom, image.get_software_region("rom"), len);
292   }
293   else if (m_cart_type & 0x02)
294   {
295      /* Super Cart */
296      /* Extra ROM at $4000 */
297      if (m_cart_type & 0x08)
298      {
299         if (image.software_entry() == NULL)
300            image.fread(memory + 0x4000, 0x4000);
301         else
302            memcpy(memory + 0x4000, image.get_software_region("rom"), 0x4000);
303         len -= 0x4000;
304         start = 0x4000;
305      }
306
307      m_cartridge_rom = memory + 0x10000;
308      if (image.software_entry() == NULL)
309         image.fread(m_cartridge_rom, len);
310      else
311         memcpy(m_cartridge_rom, image.get_software_region("rom") + start, len);
312
313      /* bank 0 */
314      memcpy(memory + 0x8000, memory + 0x10000, 0x4000);
315
316      /* last bank */
317      memcpy(memory + 0xC000, memory + 0x10000 + len - 0x4000, 0x4000);
318
319      /* fixed 2002/05/13 kubecj
320          there was 0x08, I added also two other cases.
321          Now, it loads bank n-2 to $4000 if it's empty.
322      */
323
324      /* bank n-2 */
325      if (!(m_cart_type & 0x0d))
326      {
327         memcpy(memory + 0x4000, memory + 0x10000 + len - 0x8000, 0x4000);
328      }
329   }
330   else if (m_cart_type == MBANK_TYPE_ABSOLUTE)
331   {
332      /* F18 Hornet */
333
334      logerror("Cart type: %x Absolute\n",m_cart_type);
335
336      m_cartridge_rom = memory + 0x10000;
337      if (image.software_entry() == NULL)
338         image.fread(m_cartridge_rom, len);
339      else
340         memcpy(m_cartridge_rom, image.get_software_region("rom") + start, len);
341
342      /* bank 0 */
343      memcpy(memory + 0x4000, memory + 0x10000, 0x4000);
344
345      /* last bank */
346      memcpy(memory + 0x8000, memory + 0x18000, 0x8000);
347   }
348   else if (m_cart_type == MBANK_TYPE_ACTIVISION)
349   {
350      /* Activision */
351
352      logerror("Cart type: %x Activision\n",m_cart_type);
353
354      m_cartridge_rom = memory + 0x10000;
355      if (image.software_entry() == NULL)
356         image.fread(m_cartridge_rom, len);
357      else
358         memcpy(m_cartridge_rom, image.get_software_region("rom") + start, len);
359
360      /* bank 0 */
361      memcpy(memory + 0xa000, memory + 0x10000, 0x4000);
362
363      /* bank6 hi */
364      memcpy(memory + 0x4000, memory + 0x2a000, 0x2000);
365
366      /* bank6 lo */
367      memcpy(memory + 0x6000, memory + 0x28000, 0x2000);
368
369      /* bank7 hi */
370      memcpy(memory + 0x8000, memory + 0x2e000, 0x2000);
371
372      /* bank7 lo */
373      memcpy(memory + 0xe000, memory + 0x2c000, 0x2000);
374
375   }
376
377   memcpy(m_cart_bkup, memory + 0xc000, 0x4000);
378   memcpy(memory + 0xc000, m_bios_bkup, 0x4000);
379   return IMAGE_INIT_PASS;
380}
381
382
383WRITE8_MEMBER(a7800_state::a7800_RAM0_w)
384{
385   m_ROM[0x2040 + offset] = data;
386   m_ROM[0x40 + offset] = data;
387}
388
389
390WRITE8_MEMBER(a7800_state::a7800_cart_w)
391{
392   UINT8 *memory = m_region_maincpu->base();
393
394   if(offset < 0x4000)
395   {
396      if(m_cart_type & 0x04)
397      {
398         //adjust write location if supercart bankram is in use
399         if(m_cart_type & 0x20)
400      {
401         UINT8 *currentbank1 = (UINT8 *)m_bank1->base();
402         currentbank1[offset] = data;
403      }
404      else
405         m_ROM[0x4000 + offset] = data;
406      }
407      else if(m_cart_type & 0x01)
408      {
409         m_pokey->write(space, offset, data);
410      }
411      else
412      {
413         logerror("Undefined write A: %x",offset + 0x4000);
414      }
415   }
416
417   if(( m_cart_type & 0x02 ) &&( offset >= 0x4000 ) )
418   {
419         /* check if bankram is used */
420      if( m_cart_type & 0x20 )
421      {
422         m_bank1->set_base(memory + 0xf0000+((data & 0x20)<<9));
423      }
424      /* fix for 64kb supercart */
425      if( m_cart_size == 0x10000 )
426      {
427         data &= 0x03;
428            }
429      else if( m_cart_size == 0x40000 )
430      {
431         data &= 0x0f;
432      }
433      else if( m_cart_size == 0x80000 )
434      {
435         data &= 0x1f;
436      }
437      else
438      {
439         data &= 0x07;
440      }
441      m_bank2->set_base(memory + 0x10000 + (data << 14));
442      m_bank3->set_base(memory + 0x12000 + (data << 14));
443   /*  logerror("BANK SEL: %d\n",data); */
444   }
445   else if(( m_cart_type == MBANK_TYPE_ABSOLUTE ) &&( offset == 0x4000 ) )
446   {
447      /* F18 Hornet */
448      /*logerror( "F18 BANK SEL: %d\n", data );*/
449      if( data & 1 )
450      {
451         m_bank1->set_base(memory + 0x10000 );
452      }
453      else if( data & 2 )
454      {
455         m_bank1->set_base(memory + 0x14000 );
456      }
457   }
458   else if(( m_cart_type == MBANK_TYPE_ACTIVISION ) &&( offset >= 0xBF80 ) )
459   {
460      /* Activision */
461      data = offset & 7;
462
463      /*logerror( "Activision BANK SEL: %d\n", data );*/
464
465      m_bank3->set_base(memory + 0x10000 + ( data << 14 ) );
466      m_bank4->set_base(memory + 0x12000 + ( data << 14 ) );
467   }
468}
469
470
471/***************************************************************************
472    TIA
473***************************************************************************/
474
475READ8_MEMBER(a7800_state::a7800_TIA_r)
476{
477   switch(offset & 0x0f)
478   {
479      case 0x00:
480      case 0x01:
481      case 0x02:
482      case 0x03:
483      case 0x04:
484      case 0x05:
485      case 0x06:
486      case 0x07:
487      /* Even though the 7800 doesn't use the TIA graphics the collision registers should
488         still return a reasonable value */
489         return 0x00;
490      case 0x08:
491            return((m_io_buttons->read() & 0x02) << 6);
492      case 0x09:
493            return((m_io_buttons->read() & 0x08) << 4);
494      case 0x0A:
495            return((m_io_buttons->read() & 0x01) << 7);
496      case 0x0B:
497            return((m_io_buttons->read() & 0x04) << 5);
498      case 0x0c:
499         if(((m_io_buttons->read() & 0x08) ||(m_io_buttons->read() & 0x02)) && m_p1_one_button)
500            return 0x00;
501         else
502            return 0x80;
503      case 0x0d:
504         if(((m_io_buttons->read() & 0x01) ||(m_io_buttons->read() & 0x04)) && m_p2_one_button)
505            return 0x00;
506         else
507            return 0x80;
508      default:
509         logerror("undefined TIA read %x\n",offset);
510
511   }
512   return 0xFF;
513}
514
515
516WRITE8_MEMBER(a7800_state::a7800_TIA_w)
517{
518   if (offset<0x20) { //INPTCTRL covers TIA registers 0x00-0x1F until locked
519      if(data & 0x01)
520      {
521         if ((m_ctrl_lock)&&(offset==0x01))
522            m_maria_flag=1;
523         else if (!m_ctrl_lock)
524            m_maria_flag=1;
525      }
526      if(!m_ctrl_lock)
527      {
528         m_ctrl_lock = data & 0x01;
529         m_ctrl_reg = data;
530
531         if (data & 0x04)
532            memcpy( m_ROM + 0xC000, m_cart_bkup, 0x4000 );
533         else
534            memcpy( m_ROM + 0xC000, m_bios_bkup, 0x4000 );
535      }
536   }
537   m_tia->tia_sound_w(space, offset, data);
538   m_ROM[offset] = data;
539}
trunk/src/mess/includes/a7800.h
r31766r31767
88#define A7800_H_
99
1010#include "machine/6532riot.h"
11#include "sound/pokey.h"
1211#include "sound/tiasound.h"
1312#include "sound/tiaintf.h"
13#include "bus/a7800/a78_slot.h"
1414
1515
1616class a7800_state : public driver_device
r31766r31767
1919   a7800_state(const machine_config &mconfig, device_type type, const char *tag)
2020      : driver_device(mconfig, type, tag),
2121      m_maincpu(*this, "maincpu"),
22      m_pokey(*this, "pokey"),
2322      m_tia(*this, "tia"),
24      m_region_maincpu(*this, "maincpu"),
25      m_bank1(*this, "bank1"),
26      m_bank2(*this, "bank2"),
27      m_bank3(*this, "bank3"),
28      m_bank4(*this, "bank4"),
29      m_bank5(*this, "bank5"),
30      m_bank6(*this, "bank6"),
31      m_bank7(*this, "bank7"),
3223      m_io_joysticks(*this, "joysticks"),
3324      m_io_buttons(*this, "buttons"),
3425      m_io_vblank(*this, "vblank"),
3526      m_io_console_buttons(*this, "console_buttons"),
36      m_bank10(NULL),
37      m_bank11(NULL),
27      m_cartslot(*this, "cartslot"),
3828      m_screen(*this, "screen") { }
3929
4030   int m_lines;
4131   int m_ispal;
42   unsigned char *m_cart_bkup;
43   unsigned char *m_bios_bkup;
32
4433   int m_ctrl_lock;
4534   int m_ctrl_reg;
4635   int m_maria_flag;
47   unsigned char *m_cartridge_rom;
48   UINT16 m_cart_type;
49   UINT32 m_cart_size;
50   unsigned char m_stick_type;
51   UINT8 *m_ROM;
36   int m_p1_one_button;
37   int m_p2_one_button;
38   int m_bios_enabled;
39
40   UINT8 *m_bios;
41
5242   int m_maria_palette[32];
5343   int m_line_ram[2][160];
5444   int m_active_buffer;
r31766r31767
7161   int m_maria_nmi;
7262   unsigned int m_maria_charbase;
7363   bitmap_ind16 m_bitmap;
74   int m_p1_one_button;
75   int m_p2_one_button;
7664
77   DECLARE_WRITE8_MEMBER(a7800_RAM0_w);
78   DECLARE_WRITE8_MEMBER(a7800_cart_w);
79   DECLARE_READ8_MEMBER(a7800_TIA_r);
80   DECLARE_WRITE8_MEMBER(a7800_TIA_w);
81   DECLARE_READ8_MEMBER(a7800_MARIA_r);
82   DECLARE_WRITE8_MEMBER(a7800_MARIA_w);
83   void a7800_driver_init(int ispal, int lines);
65   DECLARE_READ8_MEMBER(bios_or_cart_r);
66   DECLARE_WRITE8_MEMBER(ram0_w);
67   DECLARE_READ8_MEMBER(tia_r);
68   DECLARE_WRITE8_MEMBER(tia_w);
69   DECLARE_READ8_MEMBER(maria_r);
70   DECLARE_WRITE8_MEMBER(maria_w);
8471   DECLARE_DRIVER_INIT(a7800_pal);
8572   DECLARE_DRIVER_INIT(a7800_ntsc);
73   virtual void machine_start();
8674   virtual void machine_reset();
8775   virtual void video_start();
8876   DECLARE_PALETTE_INIT(a7800);
r31766r31767
9482   DECLARE_READ8_MEMBER(riot_console_button_r);
9583   DECLARE_WRITE8_MEMBER(riot_button_pullup_w);
9684
97   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a7800_cart );
98
9985protected:
10086   required_device<cpu_device> m_maincpu;
101   required_device<pokey_device> m_pokey;
10287   required_device<tia_device> m_tia;
103   required_memory_region m_region_maincpu;
104   required_memory_bank m_bank1;
105   required_memory_bank m_bank2;
106   required_memory_bank m_bank3;
107   required_memory_bank m_bank4;
108   required_memory_bank m_bank5;
109   required_memory_bank m_bank6;
110   required_memory_bank m_bank7;
11188   required_ioport m_io_joysticks;
11289   required_ioport m_io_buttons;
11390   required_ioport m_io_vblank;
11491   required_ioport m_io_console_buttons;
115   memory_bank *m_bank10;
116   memory_bank *m_bank11;
92   required_device<a78_cart_slot_device> m_cartslot;
11793   required_device<screen_device> m_screen;
11894
11995   void maria_draw_scanline();
12096   int is_holey(unsigned int addr);
12197   int write_line_ram(int addr, UINT8 offset, int pal);
122   int a7800_verify_cart(char header[128]);
123   UINT16 a7800_get_pcb_id(const char *pcb);
12498};
12599
126/*----------- defined in machine/a7800.c -----------*/
127
128void a7800_partialhash(hash_collection &dest, const unsigned char *data, unsigned long length, const char *functions);
129
130#endif /* A7800_H_ */
100#endif
trunk/src/mess/video/a7800.c
r31766r31767
2828
2929#include "emu.h"
3030#include "cpu/m6502/m6502.h"
31
3231#include "includes/a7800.h"
3332
3433
r31766r31767
345344
346345/****** MARIA ***************************************/
347346
348READ8_MEMBER(a7800_state::a7800_MARIA_r)
347READ8_MEMBER(a7800_state::maria_r)
349348{
350349   switch (offset)
351350   {
r31766r31767
358357   }
359358}
360359
361WRITE8_MEMBER(a7800_state::a7800_MARIA_w)
360WRITE8_MEMBER(a7800_state::maria_w)
362361{
363362   int i;
364363
trunk/hash/a7800.xml
r31766r31767
194194      <info name="serial" value="C300358"/>
195195      <part name="cart" interface="a7800_cart">
196196         <feature name="pcb_type" value="TYPE-1" />
197         <feature name="slot" value="a78_pokey" />
197198         <dataarea name="rom" size="16384">
198199            <rom name="devcard.bin" size="16384" crc="3fbe74ce" sha1="4df3657f57e3086bee26fb5c6ea946c509d08553" offset="0" />
199200         </dataarea>
200201      </part>
201202   </software>
202203
203   <software name="diagtest" supported="no">
204   <software name="diagtest">
204205      <description>7800 Pro System Diagnostic Test (v1.0)</description>
205206      <year>198?</year>
206207      <publisher>Atari</publisher>
207208      <info name="serial" value="CB101195"/>
208209      <part name="cart" interface="a7800_cart">
210         <feature name="slot" value="a78_rom" />
209211         <dataarea name="rom" size="32768">
210212            <rom name="diagtest.bin" size="32768" crc="a1eaa7c1" sha1="76ec76c423d88bdf739e673c051c5b9c174881c6" offset="0" />
211213         </dataarea>
r31766r31767
220222      <sharedfeat name="compatibility" value="NTSC"/>
221223      <part name="cart" interface="a7800_cart">
222224         <feature name="pcb_type" value="TYPE-2" />
225         <feature name="slot" value="a78_sg" />
223226         <dataarea name="rom" size="131072">
224227            <rom name="aceoface.bin" size="131072" crc="05a2b94c" sha1="efd20bd321a81d67fb6430d9ba93d23fb90d8029" offset="0" />
225228         </dataarea>
r31766r31767
234237      <sharedfeat name="compatibility" value="PAL"/>
235238      <part name="cart" interface="a7800_cart">
236239         <feature name="pcb_type" value="TYPE-2" />
240         <feature name="slot" value="a78_sg" />
237241         <dataarea name="rom" size="131072">
238242            <rom name="aceofaeu.bin" size="131072" crc="20c5db80" sha1="c43249ba2d38441461e5ffe07ad2e0b46ab1c6df" offset="0" />
239243         </dataarea>
r31766r31767
248252      <sharedfeat name="compatibility" value="NTSC"/>
249253      <part name="cart" interface="a7800_cart">
250254         <feature name="pcb_type" value="TYPE-A" />
255         <feature name="slot" value="a78_sg9" />
251256         <feature name="peripheral" value="lightgun" /> <!-- Works with Lightgun -->
252257         <dataarea name="rom" size="147456">
253258            <rom name="alienbrg.bin" size="147456" crc="c8849d36" sha1="a8629fac962cc20b263a60bb2d2386d605713387" offset="0" />
r31766r31767
263268      <sharedfeat name="compatibility" value="PAL"/>
264269      <part name="cart" interface="a7800_cart">
265270         <feature name="pcb_type" value="TYPE-A" />
271         <feature name="slot" value="a78_sg9" />
266272         <dataarea name="rom" size="147456">
267273            <rom name="alienbeu.bin" size="147456" crc="6a19f0fe" sha1="990711ae451d901a960af8ad9ae70813f16257b1" offset="0" />
268274         </dataarea>
r31766r31767
280286      <sharedfeat name="compatibility" value="NTSC"/>
281287      <part name="cart" interface="a7800_cart">
282288         <feature name="pcb_type" value="TYPE-0" />
289         <feature name="slot" value="a78_rom" />
283290         <dataarea name="rom" size="16384">
284291            <rom name="astroids.bin" size="16384" crc="dfb93f40" sha1="d96ec4e043fcdacab367d8a69d29904b3b2896f1" offset="0" />
285292         </dataarea>
r31766r31767
294301      <sharedfeat name="compatibility" value="NTSC"/>
295302      <part name="cart" interface="a7800_cart">
296303         <feature name="pcb_type" value="TYPE-0" />
304         <feature name="slot" value="a78_rom" />
297305         <dataarea name="rom" size="32768">
298306            <rom name="asteroids deluxe (ntsc).bin" size="32768" crc="56239d62" sha1="514fb53dcd8c47251fcbe5047bb2d9d13ccf6aef" offset="0" />
299307         </dataarea>
r31766r31767
308316      <sharedfeat name="compatibility" value="PAL"/>
309317      <part name="cart" interface="a7800_cart">
310318         <feature name="pcb_type" value="TYPE-0" />
319         <feature name="slot" value="a78_rom" />
311320         <dataarea name="rom" size="32768">
312321            <rom name="asteroids deluxe (pal).bin" size="32768" crc="ab72ea89" sha1="341c7be2823e69e95a61567cb79042c140278c4c" offset="0" />
313322         </dataarea>
r31766r31767
322331      <sharedfeat name="compatibility" value="NTSC"/>
323332      <part name="cart" interface="a7800_cart">
324333         <feature name="pcb_type" value="TYPE-1" />
334         <feature name="slot" value="a78_pokey" />
325335         <dataarea name="rom" size="32768">
326336            <rom name="ballblzr.bin" size="32768" crc="a4c4808b" sha1="4eb5424360691a38b199d91a0e2c9095d0862dbe" offset="0" />
327337         </dataarea>
r31766r31767
336346      <sharedfeat name="compatibility" value="PAL"/>
337347      <part name="cart" interface="a7800_cart">
338348         <feature name="pcb_type" value="TYPE-1" />
349         <feature name="slot" value="a78_pokey" />
339350         <dataarea name="rom" size="32768">
340351            <rom name="ballbleu.bin" size="32768" crc="aff85565" sha1="1aa1a508ada1521ae1d373a6860681093e3f851c" offset="0" />
341352         </dataarea>
r31766r31767
370381      <sharedfeat name="compatibility" value="PAL"/>
371382      <part name="cart" interface="a7800_cart">
372383         <feature name="pcb_type" value="TYPE-2" />
384         <feature name="slot" value="a78_sg" />
373385         <dataarea name="rom" size="131072">
374386            <rom name="barnyaeu.bin" size="131072" crc="02764a86" sha1="a5797cf7e747bbd755c99fde6936caa15fbba6b1" offset="0" />
375387         </dataarea>
r31766r31767
385397      <sharedfeat name="compatibility" value="PAL"/>
386398      <part name="cart" interface="a7800_cart">
387399         <feature name="pcb_type" value="TYPE-0" />
400         <feature name="slot" value="a78_rom" />
388401         <dataarea name="rom" size="32768">
389402            <rom name="bseblleu.bin" size="32768" crc="68d48fdc" sha1="c44fe244206590abc26fbbd520a5726353899e35" offset="0" />
390403         </dataarea>
r31766r31767
399412      <sharedfeat name="compatibility" value="NTSC"/>
400413      <part name="cart" interface="a7800_cart">
401414         <feature name="pcb_type" value="TYPE-1" />
415         <feature name="slot" value="a78_pokey" />
402416         <dataarea name="rom" size="32768">
403417            <rom name="bd7800demo.bin" size="32768" crc="7873b949" sha1="a3eaff991cec95040aff53e0c26a862c3dfcc05e" offset="0" />
404418         </dataarea>
r31766r31767
413427      <sharedfeat name="compatibility" value="NTSC"/>
414428      <part name="cart" interface="a7800_cart">
415429         <feature name="pcb_type" value="TYPE-0" />
430         <feature name="slot" value="a78_rom" />
416431         <dataarea name="rom" size="49152">
417432            <rom name="bonq.bin" size="49152" crc="3124b41c" sha1="379ae22a8c8a1c518ba5eb29ad0826dd2daca954" offset="0" />
418433         </dataarea>
r31766r31767
427442      <sharedfeat name="compatibility" value="NTSC"/>
428443      <part name="cart" interface="a7800_cart">
429444         <feature name="pcb_type" value="TYPE-2" />
445         <feature name="slot" value="a78_sg" />
430446         <dataarea name="rom" size="131072">
431447            <rom name="bsktbrwl.bin" size="131072" crc="c8b9d7b5" sha1="39877a4c88498bf6656451e3d1acaf7e8638bdfd" offset="0" />
432448         </dataarea>
r31766r31767
441457      <sharedfeat name="compatibility" value="PAL"/>
442458      <part name="cart" interface="a7800_cart">
443459         <feature name="pcb_type" value="TYPE-2" />
460         <feature name="slot" value="a78_sg" />
444461         <dataarea name="rom" size="131072">
445462            <rom name="bsktbreu.bin" size="131072" crc="a4265d4b" sha1="e7ef6b11bb6836ff7d11a25f8d4e2c9361fa69b3" offset="0" />
446463         </dataarea>
r31766r31767
455472      <sharedfeat name="compatibility" value="NTSC"/>
456473      <part name="cart" interface="a7800_cart">
457474         <feature name="pcb_type" value="TYPE-0" />
475         <feature name="slot" value="a78_rom" />
458476         <dataarea name="rom" size="16384">
459477            <rom name="centpede.bin" size="16384" crc="020efe25" sha1="c8377ad7fb6afec5c88c14a23a68e2ecebba4e5a" offset="0" />
460478         </dataarea>
r31766r31767
469487      <sharedfeat name="compatibility" value="PAL"/>
470488      <part name="cart" interface="a7800_cart">
471489         <feature name="pcb_type" value="TYPE-0" />
490         <feature name="slot" value="a78_rom" />
472491         <dataarea name="rom" size="16384">
473492            <rom name="centpeeu.bin" size="16384" crc="33f8a8f6" sha1="323f9fc4fde9aa6fcbaac8ae300aaa06bafa745a" offset="0" />
474493         </dataarea>
r31766r31767
483502      <sharedfeat name="compatibility" value="NTSC"/>
484503      <part name="cart" interface="a7800_cart">
485504         <feature name="pcb_type" value="TYPE-0" />
505         <feature name="slot" value="a78_rom" />
486506         <dataarea name="rom" size="32768">
487507            <rom name="choplift.bin" size="32768" crc="419bff61" sha1="6df15e73494d0a498dd044753a27544214210b14" offset="0" />
488508         </dataarea>
r31766r31767
497517      <sharedfeat name="compatibility" value="PAL"/>
498518      <part name="cart" interface="a7800_cart">
499519         <feature name="pcb_type" value="TYPE-0" />
520         <feature name="slot" value="a78_rom" />
500521         <dataarea name="rom" size="49152">
501522            <rom name="choplieu.bin" size="49152" crc="12efeb07" sha1="f2fe1c82e5b333f4c59f76a28a9d379228596d89" offset="0" />
502523         </dataarea>
r31766r31767
511532      <sharedfeat name="compatibility" value="NTSC"/>
512533      <part name="cart" interface="a7800_cart">
513534         <feature name="pcb_type" value="TYPE-3" />
535         <feature name="slot" value="a78_sg_pokey" />
514536         <dataarea name="rom" size="131072">
515537            <rom name="commando.bin" size="131072" crc="cd1a98c5" sha1="f8ae7da650ad38675b81675b77096794a9cd52e8" offset="0" />
516538         </dataarea>
r31766r31767
525547      <sharedfeat name="compatibility" value="PAL"/>
526548      <part name="cart" interface="a7800_cart">
527549         <feature name="pcb_type" value="TYPE-3" />
550         <feature name="slot" value="a78_sg_pokey" />
528551         <dataarea name="rom" size="131072">
529552            <rom name="commaneu.bin" size="131072" crc="7c211612" sha1="2bdad24967fe4f5492ae294b1ccf8f148930a419" offset="0" />
530553         </dataarea>
r31766r31767
539562      <sharedfeat name="compatibility" value="NTSC"/>
540563      <part name="cart" interface="a7800_cart">
541564         <feature name="pcb_type" value="TYPE-2" />
565         <feature name="slot" value="a78_sg" />
542566         <dataarea name="rom" size="131072">
543567            <rom name="cracked.bin" size="131072" crc="e645fd1f" sha1="664d267d1245d5698cbf6ff0622ee0d629da3a11" offset="0" />
544568         </dataarea>
r31766r31767
553577      <sharedfeat name="compatibility" value="PAL"/>
554578      <part name="cart" interface="a7800_cart">
555579         <feature name="pcb_type" value="TYPE-2" />
580         <feature name="slot" value="a78_sg" />
556581         <dataarea name="rom" size="131072">
557582            <rom name="crackeu.bin" size="131072" crc="50fd19cb" sha1="0c1a7806e431efbf0c826a11b92d74eb45e08661" offset="0" />
558583         </dataarea>
r31766r31767
567592      <sharedfeat name="compatibility" value="NTSC"/>
568593      <part name="cart" interface="a7800_cart">
569594         <feature name="pcb_type" value="TYPE-A" />
595         <feature name="slot" value="a78_sg9" />
570596         <feature name="peripheral" value="lightgun" /> <!-- Works with Lightgun -->
571597         <dataarea name="rom" size="147456">
572598            <rom name="crossbow.bin" size="147456" crc="d2ea5686" sha1="d5e47da88e232cd9ea059e133e7c0f13d921a04c" offset="0" />
r31766r31767
582608      <sharedfeat name="compatibility" value="PAL"/>
583609      <part name="cart" interface="a7800_cart">
584610         <feature name="pcb_type" value="TYPE-A" />
611         <feature name="slot" value="a78_sg9" />
585612         <feature name="peripheral" value="lightgun" /> <!-- Works with Lightgun -->
586613         <dataarea name="rom" size="147456">
587614            <rom name="crossbeu.bin" size="147456" crc="e93d8894" sha1="f26d292210a91a714b4b87712ff53b8e49da611e" offset="0" />
r31766r31767
597624      <sharedfeat name="compatibility" value="NTSC"/>
598625      <part name="cart" interface="a7800_cart">
599626         <feature name="pcb_type" value="TYPE-2" />
627         <feature name="slot" value="a78_sg" />
600628         <dataarea name="rom" size="131072">
601629            <rom name="darkchmb.bin" size="131072" crc="366777f1" sha1="848077f15114fec31f8290be2583566f4486fe65" offset="0" />
602630         </dataarea>
r31766r31767
611639      <sharedfeat name="compatibility" value="PAL"/>
612640      <part name="cart" interface="a7800_cart">
613641         <feature name="pcb_type" value="TYPE-2" />
642         <feature name="slot" value="a78_sg" />
614643         <dataarea name="rom" size="131072">
615644            <rom name="darkcheu.bin" size="131072" crc="c93a563e" sha1="2b888c95b31109ffd0441f586ba18f21a3a4f22e" offset="0" />
616645         </dataarea>
r31766r31767
629658      <sharedfeat name="compatibility" value="NTSC"/>
630659      <part name="cart" interface="a7800_cart">
631660         <feature name="pcb_type" value="TYPE-0" />
661         <feature name="slot" value="a78_rom" />
632662         <dataarea name="rom" size="49152">
633663            <rom name="dsrtflcn.bin" size="49152" crc="a1dc0899" sha1="725f893f9a98926c627ef37eacc3f241620c3ffc" offset="0" />
634664         </dataarea>
r31766r31767
643673      <sharedfeat name="compatibility" value="NTSC"/>
644674      <part name="cart" interface="a7800_cart">
645675         <feature name="pcb_type" value="TYPE-0" />
676         <feature name="slot" value="a78_rom" />
646677         <dataarea name="rom" size="49152">
647678            <rom name="dsrtflcp.bin" size="49152" crc="53e277f6" sha1="bbb8aa88879f2ec6039673ccdbbebebc565346bc" offset="0" />
648679         </dataarea>
r31766r31767
657688      <sharedfeat name="compatibility" value="PAL"/>
658689      <part name="cart" interface="a7800_cart">
659690         <feature name="pcb_type" value="TYPE-0" />
691         <feature name="slot" value="a78_rom" />
660692         <dataarea name="rom" size="49152">
661693            <rom name="dsrtfleu.bin" size="49152" crc="33991ee8" sha1="185d104614e23699e074e850d5ab8c36a159071c" offset="0" />
662694         </dataarea>
r31766r31767
674706      <sharedfeat name="compatibility" value="NTSC"/>
675707      <part name="cart" interface="a7800_cart">
676708         <feature name="pcb_type" value="TYPE-0" />
709         <feature name="slot" value="a78_rom" />
677710         <dataarea name="rom" size="16384">
678711            <rom name="digdugp.bin" size="16384" crc="50cb13f3" sha1="19cee8dc40fabd7022bedc27e4896c09e3cadfdd" offset="0" />
679712         </dataarea>
r31766r31767
688721      <sharedfeat name="compatibility" value="PAL"/>
689722      <part name="cart" interface="a7800_cart">
690723         <feature name="pcb_type" value="TYPE-0" />
724         <feature name="slot" value="a78_rom" />
691725         <dataarea name="rom" size="32768">
692726            <rom name="digdugeu.bin" size="32768" crc="efab7077" sha1="ce05d3270b0e0d36d80a4f0731d0173cb5921bce" offset="0" />
693727         </dataarea>
r31766r31767
702736      <sharedfeat name="compatibility" value="NTSC"/>
703737      <part name="cart" interface="a7800_cart">
704738         <feature name="pcb_type" value="TYPE-0" />
739         <feature name="slot" value="a78_rom" />
705740         <dataarea name="rom" size="49152">
706741            <rom name="dnkykong.bin" size="49152" crc="065e063f" sha1="820c852caa7957179bf7d6faf2e6922dde5a1a8e" offset="0" />
707742         </dataarea>
r31766r31767
716751      <sharedfeat name="compatibility" value="PAL"/>
717752      <part name="cart" interface="a7800_cart">
718753         <feature name="pcb_type" value="TYPE-0" />
754         <feature name="slot" value="a78_rom" />
719755         <dataarea name="rom" size="49152">
720756            <rom name="dnkykoeu.bin" size="49152" crc="0a43d1c5" sha1="dc69fa8fdf3fcba8557195358b8d206463652e0f" offset="0" />
721757         </dataarea>
r31766r31767
730766      <sharedfeat name="compatibility" value="NTSC"/>
731767      <part name="cart" interface="a7800_cart">
732768         <feature name="pcb_type" value="TYPE-0" />
769         <feature name="slot" value="a78_rom" />
733770         <dataarea name="rom" size="49152">
734771            <rom name="dnkykgjr.bin" size="49152" crc="1c5a1082" sha1="e9392259fff682fcc3476009771a3cfd7d5bdb6d" offset="0" />
735772         </dataarea>
r31766r31767
744781      <sharedfeat name="compatibility" value="PAL"/>
745782      <part name="cart" interface="a7800_cart">
746783         <feature name="pcb_type" value="TYPE-0" />
784         <feature name="slot" value="a78_rom" />
747785         <dataarea name="rom" size="49152">
748786            <rom name="dnkykjeu.bin" size="49152" crc="c784dbac" sha1="2626a9cd3326b8ce0ee0e834e17a0eedae005669" offset="0" />
749787         </dataarea>
r31766r31767
758796      <sharedfeat name="compatibility" value="NTSC"/>
759797      <part name="cart" interface="a7800_cart">
760798         <feature name="pcb_type" value="ACTIVISION" />
799         <feature name="slot" value="a78_act" />
761800         <dataarea name="rom" size="131072">
762801            <rom name="dbledrgn.bin" size="131072" crc="aa265865" sha1="c3fb140836a4ed84cda7a999832703e8b72c0d21" offset="0" />
763802         </dataarea>
r31766r31767
772811      <sharedfeat name="compatibility" value="PAL"/>
773812      <part name="cart" interface="a7800_cart">
774813         <feature name="pcb_type" value="ACTIVISION" />
814         <feature name="slot" value="a78_act" />
775815         <dataarea name="rom" size="131072">
776816            <rom name="dbledreu.bin" size="131072" crc="f29abdb2" sha1="210f3ac989549e89425e7677127715aee713af32" offset="0" />
777817         </dataarea>
r31766r31767
786826      <sharedfeat name="compatibility" value="NTSC"/>
787827      <part name="cart" interface="a7800_cart">
788828         <feature name="pcb_type" value="ABSOLUTE" />
829         <feature name="slot" value="a78_abs" />
789830         <dataarea name="rom" size="65536">
790831            <rom name="f18hornt.bin" size="65536" crc="63d1c7c1" sha1="13a18a6b85db6222b01d37800e5e57db616a85a6" offset="0" />
791832         </dataarea>
r31766r31767
800841      <sharedfeat name="compatibility" value="PAL"/>
801842      <part name="cart" interface="a7800_cart">
802843         <feature name="pcb_type" value="ABSOLUTE" />
844         <feature name="slot" value="a78_abs" />
803845         <dataarea name="rom" size="65536">
804846            <rom name="f18horeu.bin" size="65536" crc="e5d714b0" sha1="673d912b2f9ab7a43f95e0e90bd80249b360fe0d" offset="0" />
805847         </dataarea>
r31766r31767
814856      <sharedfeat name="compatibility" value="NTSC"/>
815857      <part name="cart" interface="a7800_cart">
816858         <feature name="pcb_type" value="TYPE-2" />
859         <feature name="slot" value="a78_sg" />
817860         <dataarea name="rom" size="131072">
818861            <rom name="fatalrun.bin" size="131072" crc="a44df354" sha1="69aab1e6ef332c6844c693ac41965e4c33ff822a" offset="0" />
819862         </dataarea>
r31766r31767
828871      <sharedfeat name="compatibility" value="PAL"/>
829872      <part name="cart" interface="a7800_cart">
830873         <feature name="pcb_type" value="TYPE-2" />
874         <feature name="slot" value="a78_sg" />
831875         <dataarea name="rom" size="131072">
832876            <rom name="fatalreu.bin" size="131072" crc="2a0a93be" sha1="f23173d2e42bca0767f3d8ecb6bb1c0d23dde996" offset="0" />
833877         </dataarea>
r31766r31767
842886      <sharedfeat name="compatibility" value="NTSC"/>
843887      <part name="cart" interface="a7800_cart">
844888         <feature name="pcb_type" value="TYPE-2" />
889         <feature name="slot" value="a78_sg" />
845890         <dataarea name="rom" size="131072">
846891            <rom name="fghtnght.bin" size="131072" crc="720ebc74" sha1="1e8a8704a77b15e70cbc72b0ae9bc25fb91d7c21" offset="0" />
847892         </dataarea>
r31766r31767
856901      <sharedfeat name="compatibility" value="PAL"/>
857902      <part name="cart" interface="a7800_cart">
858903         <feature name="pcb_type" value="TYPE-2" />
904         <feature name="slot" value="a78_sg" />
859905         <dataarea name="rom" size="131072">
860906            <rom name="fghtngeu.bin" size="131072" crc="64d9c4be" sha1="ded89f3a4ac0d95aa158c98302b7939e5b89e4c6" offset="0" />
861907         </dataarea>
r31766r31767
870916      <sharedfeat name="compatibility" value="NTSC"/>
871917      <part name="cart" interface="a7800_cart">
872918         <feature name="pcb_type" value="TYPE-0" />
919         <feature name="slot" value="a78_rom" />
873920         <dataarea name="rom" size="32768">
874921            <rom name="foodfght.bin" size="32768" crc="e64a5cde" sha1="3f5f42d5aaf6ccd4979658a1387aac5933549357" offset="0" />
875922         </dataarea>
r31766r31767
884931      <sharedfeat name="compatibility" value="PAL"/>
885932      <part name="cart" interface="a7800_cart">
886933         <feature name="pcb_type" value="TYPE-0" />
934         <feature name="slot" value="a78_rom" />
887935         <dataarea name="rom" size="49152">
888936            <rom name="foodfgeu.bin" size="49152" crc="c64549ec" sha1="40b8e5eeb9e9ad7239963ed79dc085092ccbec4c" offset="0" />
889937         </dataarea>
r31766r31767
898946      <sharedfeat name="compatibility" value="NTSC"/>
899947      <part name="cart" interface="a7800_cart">
900948         <feature name="pcb_type" value="TYPE-0" />
949         <feature name="slot" value="a78_rom" />
901950         <dataarea name="rom" size="32768">
902951            <rom name="galagap.bin" size="32768" crc="1a0a3eb3" sha1="33178d682564d70955e13d0633359e87b512253b" offset="0" />
903952         </dataarea>
r31766r31767
912961      <sharedfeat name="compatibility" value="PAL"/>
913962      <part name="cart" interface="a7800_cart">
914963         <feature name="pcb_type" value="TYPE-0" />
964         <feature name="slot" value="a78_rom" />
915965         <dataarea name="rom" size="49152">
916966            <rom name="galagaeu.bin" size="49152" crc="5990a9f8" sha1="f1ae5df03cf90041380d77c1b49c94611443330b" offset="0" />
917967         </dataarea>
r31766r31767
926976      <sharedfeat name="compatibility" value="NTSC"/>
927977      <part name="cart" interface="a7800_cart">
928978         <feature name="pcb_type" value="TYPE-0" />
979         <feature name="slot" value="a78_rom" />
929980         <dataarea name="rom" size="49152">
930981            <rom name="gatop1.bin" size="49152" crc="715e1a2f" sha1="e153927b3463148d3fbeef2d28980c281562cc09" offset="0" />
931982         </dataarea>
r31766r31767
940991      <sharedfeat name="compatibility" value="NTSC"/>
941992      <part name="cart" interface="a7800_cart">
942993         <feature name="pcb_type" value="TYPE-0" />
994         <feature name="slot" value="a78_rom" />
943995         <dataarea name="rom" size="49152">
944996            <rom name="gatop2.bin" size="49152" crc="0f2f66f8" sha1="5784f40216dbc487e80dabd532ae89b2de4bdcc4" offset="0" />
945997         </dataarea>
r31766r31767
9541006      <sharedfeat name="compatibility" value="NTSC"/>
9551007      <part name="cart" interface="a7800_cart">
9561008         <feature name="pcb_type" value="TYPE-0" />
1009         <feature name="slot" value="a78_rom" />
9571010         <dataarea name="rom" size="49152">
9581011            <rom name="gatop3.bin" size="49152" crc="3796705f" sha1="b365d2bf0a5b238eff5f1a4cdc9b7ece2cace38d" offset="0" />
9591012         </dataarea>
r31766r31767
9681021      <sharedfeat name="compatibility" value="NTSC"/>
9691022      <part name="cart" interface="a7800_cart">
9701023         <feature name="pcb_type" value="TYPE-0" />
1024         <feature name="slot" value="a78_rom" />
9711025         <dataarea name="rom" size="49152">
9721026            <rom name="gatop4.bin" size="49152" crc="15de2327" sha1="c5793c362a69c7e82191caffa0a830e67fe21dc5" offset="0" />
9731027         </dataarea>
r31766r31767
9821036      <sharedfeat name="compatibility" value="NTSC"/>
9831037      <part name="cart" interface="a7800_cart">
9841038         <feature name="pcb_type" value="TYPE-0" />
1039         <feature name="slot" value="a78_rom" />
9851040         <dataarea name="rom" size="49152">
9861041            <rom name="gatop5.bin" size="49152" crc="9fa0fbda" sha1="1c536bb5870f315eecbdea6660beb7de9371f0f8" offset="0" />
9871042         </dataarea>
r31766r31767
9961051      <sharedfeat name="compatibility" value="NTSC"/>
9971052      <part name="cart" interface="a7800_cart">
9981053         <feature name="pcb_type" value="TYPE-0" />
1054         <feature name="slot" value="a78_rom" />
9991055         <dataarea name="rom" size="49152">
10001056            <rom name="gatop6.bin" size="49152" crc="40b629a1" sha1="f644c5d071c49d75e1487cd06b91da778697ff23" offset="0" />
10011057         </dataarea>
r31766r31767
10111067      <sharedfeat name="compatibility" value="NTSC"/>
10121068      <part name="cart" interface="a7800_cart">
10131069         <feature name="pcb_type" value="TYPE-0" />
1070         <feature name="slot" value="a78_rom" />
10141071         <dataarea name="rom" size="49152">
10151072            <rom name="gatop7.bin" size="49152" crc="b05cf8d2" sha1="78eaa5c8e89129596f2f9a7a4517e51eefbd857f" offset="0" />
10161073         </dataarea>
r31766r31767
10251082      <sharedfeat name="compatibility" value="NTSC"/>
10261083      <part name="cart" interface="a7800_cart">
10271084         <feature name="pcb_type" value="TYPE-0" />
1085         <feature name="slot" value="a78_rom" />
10281086         <dataarea name="rom" size="49152">
10291087            <rom name="gatop8.bin" size="49152" crc="e51eb3bc" sha1="e8d29920fe466ea8bfe292e0f135c0e24a48aaad" offset="0" />
10301088         </dataarea>
r31766r31767
10381096      <info name="developer" value="Bob DeCrescenzo" />
10391097      <sharedfeat name="compatibility" value="NTSC"/>
10401098      <part name="cart" interface="a7800_cart">
1099         <feature name="slot" value="a78_rom" />
10411100         <dataarea name="rom" size="16384">
10421101            <rom name="hangly-man.bin" size="16384" crc="8560a801" sha1="f8654387ff648abbe1e6d8f49b8f8b33f803b917" offset="0" />
10431102         </dataarea>
r31766r31767
10561115      <sharedfeat name="compatibility" value="NTSC"/>
10571116      <part name="cart" interface="a7800_cart">
10581117         <feature name="pcb_type" value="TYPE-0" />
1118         <feature name="slot" value="a78_rom" />
10591119         <dataarea name="rom" size="49152">
10601120            <rom name="hattrick.bin" size="49152" crc="cf6f4a6c" sha1="14c0cfd01df1c725f399c23810e4854a639fce52" offset="0" />
10611121         </dataarea>
r31766r31767
10701130      <sharedfeat name="compatibility" value="PAL"/>
10711131      <part name="cart" interface="a7800_cart">
10721132         <feature name="pcb_type" value="TYPE-0" />
1133         <feature name="slot" value="a78_rom" />
10731134         <dataarea name="rom" size="49152">
10741135            <rom name="hattrieu.bin" size="49152" crc="057d9c3c" sha1="0e9fa678bb4aedc7bb7cf5d38fe27556c4c2bbbd" offset="0" />
10751136         </dataarea>
10761137      </part>
10771138   </software>
10781139
1079   <software name="hiscore" supported="no">
1080      <description>High Score Cartridge</description>
1081      <year>198?</year>
1082      <publisher>Atari</publisher>
1083      <info name="serial" value="CX78HSC"/>
1084      <part name="cart" interface="a7800_cart">
1085         <dataarea name="rom" size="4096">
1086            <rom name="highscre.bin" size="4096" crc="9be408d3" sha1="a3af676991391a6dd716c79022d4947206b78164" offset="0" />
1087         </dataarea>
1088      </part>
1089   </software>
1090
10911140   <software name="ikariu" cloneof="ikari">
10921141      <description>Ikari Warriors (NTSC)</description>
10931142      <year>1990</year>
r31766r31767
10961145      <sharedfeat name="compatibility" value="NTSC"/>
10971146      <part name="cart" interface="a7800_cart">
10981147         <feature name="pcb_type" value="TYPE-2" />
1148         <feature name="slot" value="a78_sg" />
10991149         <dataarea name="rom" size="131072">
11001150            <rom name="ikariwar.bin" size="131072" crc="8a6c1f15" sha1="e368c6c7ffca5ffac314dec1effea4e2c809519a" offset="0" />
11011151         </dataarea>
r31766r31767
11101160      <sharedfeat name="compatibility" value="PAL"/>
11111161      <part name="cart" interface="a7800_cart">
11121162         <feature name="pcb_type" value="TYPE-2" />
1163         <feature name="slot" value="a78_sg" />
11131164         <dataarea name="rom" size="131072">
11141165            <rom name="ikariweu.bin" size="131072" crc="cb621cdc" sha1="275cae6c693d9bd1906fdc684460ec596869bbad" offset="0" />
11151166         </dataarea>
r31766r31767
11241175      <sharedfeat name="compatibility" value="NTSC"/>
11251176      <part name="cart" interface="a7800_cart">
11261177         <feature name="pcb_type" value="TYPE-6" />
1178         <feature name="slot" value="a78_sg_ram" />
11271179         <dataarea name="rom" size="131072">
11281180            <rom name="impssble.bin" size="131072" crc="3b1f2f47" sha1="5437c0efb63a349953ec047efe6ec24144ed6914" offset="0" />
11291181         </dataarea>
r31766r31767
11381190      <sharedfeat name="compatibility" value="PAL"/>
11391191      <part name="cart" interface="a7800_cart">
11401192         <feature name="pcb_type" value="TYPE-6" />
1193         <feature name="slot" value="a78_sg_ram" />
11411194         <dataarea name="rom" size="131072">
11421195            <rom name="impssbeu.bin" size="131072" crc="994af6e0" sha1="9770b61472510aba1cf3ea35ceca1859c3493676" offset="0" />
11431196         </dataarea>
r31766r31767
11521205      <sharedfeat name="compatibility" value="NTSC"/>
11531206      <part name="cart" interface="a7800_cart">
11541207         <feature name="pcb_type" value="TYPE-6" />
1208         <feature name="slot" value="a78_sg_ram" />
11551209         <dataarea name="rom" size="131072">
11561210            <rom name="jinks.bin" size="131072" crc="0818d8cd" sha1="472bc12c437b015a9e317bac092529f3295033b8" offset="0" />
11571211         </dataarea>
r31766r31767
11661220      <sharedfeat name="compatibility" value="PAL"/>
11671221      <part name="cart" interface="a7800_cart">
11681222         <feature name="pcb_type" value="TYPE-6" />
1223         <feature name="slot" value="a78_sg_ram" />
11691224         <dataarea name="rom" size="131072">
11701225            <rom name="jinkseu.bin" size="131072" crc="9207ed3b" sha1="eb16de0c3d5c4e769ae2314ba21c4dd3bca33c88" offset="0" />
11711226         </dataarea>
r31766r31767
11791234      <info name="developer" value="Bob DeCrescenzo" />
11801235      <sharedfeat name="compatibility" value="NTSC"/>
11811236      <part name="cart" interface="a7800_cart">
1237         <feature name="slot" value="a78_rom" />
11821238         <dataarea name="rom" size="32768">
11831239            <rom name="jr pac-man (ntsc).bin" size="32768" crc="0198aed4" sha1="f6d51d9c0eaf03c47e1e2d3774fd16c3ba3a59e3" offset="0" />
11841240         </dataarea>
r31766r31767
11931249      <sharedfeat name="compatibility" value="NTSC"/>
11941250      <part name="cart" interface="a7800_cart">
11951251         <feature name="pcb_type" value="TYPE-0" />
1252         <feature name="slot" value="a78_rom" />
11961253         <dataarea name="rom" size="32768">
11971254            <rom name="joust.bin" size="32768" crc="2c430bce" sha1="1ccd7c232bcfd5a65d26b9decfe4eceadcbe314c" offset="0" />
11981255         </dataarea>
r31766r31767
12071264      <sharedfeat name="compatibility" value="PAL"/>
12081265      <part name="cart" interface="a7800_cart">
12091266         <feature name="pcb_type" value="TYPE-0" />
1267         <feature name="slot" value="a78_rom" />
12101268         <dataarea name="rom" size="49152">
12111269            <rom name="jousteu.bin" size="49152" crc="9b3be616" sha1="aae5b9ee00c39d577858aba9d1fd791194be2c0c" offset="0" />
12121270         </dataarea>
r31766r31767
12281286      <sharedfeat name="compatibility" value="NTSC"/>
12291287      <part name="cart" interface="a7800_cart">
12301288         <feature name="pcb_type" value="TYPE-0" />
1289         <feature name="slot" value="a78_rom" />
12311290         <dataarea name="rom" size="49152">
12321291            <rom name="karateka.bin" size="49152" crc="fec21472" sha1="9fb97bbc7dcc610251cee1695c48b82a087f32d2" offset="0" />
12331292         </dataarea>
r31766r31767
12421301      <sharedfeat name="compatibility" value="PAL"/>
12431302      <part name="cart" interface="a7800_cart">
12441303         <feature name="pcb_type" value="TYPE-2" />
1304         <feature name="slot" value="a78_sg" />
12451305         <dataarea name="rom" size="65536">
12461306            <rom name="karateeu.bin" size="65536" crc="6c8d9e68" sha1="c5f25c88eefe0c7b3571ab3c3ec5185e537eb151" offset="0" />
12471307         </dataarea>
r31766r31767
12561316      <sharedfeat name="compatibility" value="NTSC"/>
12571317      <part name="cart" interface="a7800_cart">
12581318         <feature name="pcb_type" value="TYPE-2" />
1319         <feature name="slot" value="a78_sg" />
12591320         <dataarea name="rom" size="131072">
12601321            <rom name="klax.bin" size="131072" crc="f26621e3" sha1="0ea6a04b8f9713040ce57b6f23a6589f98409d46" offset="0" />
12611322         </dataarea>
r31766r31767
12701331      <sharedfeat name="compatibility" value="NTSC"/>
12711332      <part name="cart" interface="a7800_cart">
12721333         <feature name="pcb_type" value="TYPE-0" />
1334         <feature name="slot" value="a78_rom" />
12731335         <dataarea name="rom" size="32768">
12741336            <rom name="kungfums.bin" size="32768" crc="297899bb" sha1="8824bffdf4f30a8191e581752a75259a663092ca" offset="0" />
12751337         </dataarea>
r31766r31767
12841346      <sharedfeat name="compatibility" value="PAL"/>
12851347      <part name="cart" interface="a7800_cart">
12861348         <feature name="pcb_type" value="TYPE-0" />
1349         <feature name="slot" value="a78_rom" />
12871350         <dataarea name="rom" size="32768">
12881351            <rom name="kungfueu.bin" size="32768" crc="c1531fc4" sha1="0f0e24246d9e684b7f900a362fb08878b232580c" offset="0" />
12891352         </dataarea>
r31766r31767
12981361      <sharedfeat name="compatibility" value="NTSC"/>
12991362      <part name="cart" interface="a7800_cart">
13001363         <feature name="pcb_type" value="TYPE-0" />
1364         <feature name="slot" value="a78_rom" />
13011365         <dataarea name="rom" size="49152">
13021366            <rom name="mariobro.bin" size="49152" crc="8021a13b" sha1="12e04b67094af622641c536379c69ecad2ee98ed" offset="0" />
13031367         </dataarea>
r31766r31767
13121376      <sharedfeat name="compatibility" value="PAL"/>
13131377      <part name="cart" interface="a7800_cart">
13141378         <feature name="pcb_type" value="TYPE-0" />
1379         <feature name="slot" value="a78_rom" />
13151380         <dataarea name="rom" size="49152">
13161381            <rom name="mariobeu.bin" size="49152" crc="efad3d9d" sha1="881beff5103713e655fed80b32e0bbd774e78ee8" offset="0" />
13171382         </dataarea>
r31766r31767
13261391      <sharedfeat name="compatibility" value="NTSC"/>
13271392      <part name="cart" interface="a7800_cart">
13281393         <feature name="pcb_type" value="TYPE-2" />
1394         <feature name="slot" value="a78_sg" />
13291395         <dataarea name="rom" size="131072">
13301396            <rom name="matmania.bin" size="131072" crc="aba91829" sha1="bb849b603cf1091e4f032936b209ff33fc3b714e" offset="0" />
13311397         </dataarea>
r31766r31767
13401406      <sharedfeat name="compatibility" value="PAL"/>
13411407      <part name="cart" interface="a7800_cart">
13421408         <feature name="pcb_type" value="TYPE-2" />
1409         <feature name="slot" value="a78_sg" />
13431410         <dataarea name="rom" size="131072">
13441411            <rom name="matmaneu.bin" size="131072" crc="065f3873" sha1="119bb784f1a0638cc6778841131ca1766e94a112" offset="0" />
13451412         </dataarea>
r31766r31767
13541421      <sharedfeat name="compatibility" value="NTSC"/>
13551422      <part name="cart" interface="a7800_cart">
13561423         <feature name="pcb_type" value="TYPE-2" />
1424         <feature name="slot" value="a78_sg" />
13571425         <dataarea name="rom" size="131072">
13581426            <rom name="mean18.bin" size="131072" crc="cf21d9ac" sha1="a3e50c0e56c9675ffb1b6439f40789bc64c606b2" offset="0" />
13591427         </dataarea>
r31766r31767
13681436      <sharedfeat name="compatibility" value="PAL"/>
13691437      <part name="cart" interface="a7800_cart">
13701438         <feature name="pcb_type" value="TYPE-2" />
1439         <feature name="slot" value="a78_sg" />
13711440         <dataarea name="rom" size="131072">
13721441            <rom name="mean18eu.bin" size="131072" crc="3cec4be8" sha1="47702ee71c64af4ada09cd41122c779c7d8d94f1" offset="0" />
13731442         </dataarea>
r31766r31767
14121481      <info name="serial" value="CX7890"/>
14131482      <part name="cart" interface="a7800_cart">
14141483         <feature name="pcb_type" value="TYPE-2" />
1484         <feature name="slot" value="a78_sg" />
14151485         <dataarea name="rom" size="147456">
14161486            <rom name="miaproto.bin" size="147456" crc="ff7a4c60" sha1="26b0b187a43bf9a9397cb5e8b0033e8833f48f88" offset="0" />
14171487         </dataarea>
r31766r31767
14261496      <sharedfeat name="compatibility" value="NTSC"/>
14271497      <part name="cart" interface="a7800_cart">
14281498         <feature name="pcb_type" value="TYPE-2" />
1499         <feature name="slot" value="a78_sg" />
14291500         <dataarea name="rom" size="131072">
14301501            <rom name="midmutnt.bin" size="131072" crc="187ec84e" sha1="db5ea4c1456f3b403f6b8978432ecbcdac89d432" offset="0" />
14311502         </dataarea>
r31766r31767
14401511      <sharedfeat name="compatibility" value="PAL"/>
14411512      <part name="cart" interface="a7800_cart">
14421513         <feature name="pcb_type" value="TYPE-2" />
1514         <feature name="slot" value="a78_sg" />
14431515         <dataarea name="rom" size="131072">
14441516            <rom name="midmuteu.bin" size="131072" crc="7ca6d521" sha1="85f0e0556df65c0732f71ab3f2bbde3615355f72" offset="0" />
14451517         </dataarea>
r31766r31767
14631535      <sharedfeat name="compatibility" value="NTSC"/>
14641536      <part name="cart" interface="a7800_cart">
14651537         <feature name="pcb_type" value="TYPE-2" />
1538         <feature name="slot" value="a78_sg" />
14661539         <dataarea name="rom" size="131072">
14671540            <rom name="mtrpsych.bin" size="131072" crc="1e219482" sha1="b9381f4d0413b6c48e27f26ed94c7a9eb1a49624" offset="0" />
14681541         </dataarea>
r31766r31767
14771550      <sharedfeat name="compatibility" value="PAL"/>
14781551      <part name="cart" interface="a7800_cart">
14791552         <feature name="pcb_type" value="TYPE-2" />
1553         <feature name="slot" value="a78_sg" />
14801554         <dataarea name="rom" size="131072">
14811555            <rom name="mtrpsyeu.bin" size="131072" crc="38bb45ba" sha1="3b72d6b3e28ca9182f1f25dc57115d2ec33aa63e" offset="0" />
14821556         </dataarea>
r31766r31767
14901564      <info name="developer" value="Bob DeCrescenzo" />
14911565      <sharedfeat name="compatibility" value="NTSC"/>
14921566      <part name="cart" interface="a7800_cart">
1567         <feature name="slot" value="a78_rom" />
14931568         <dataarea name="rom" size="16384">
14941569            <rom name="miss pac-attack.bin" size="16384" crc="b4557dd7" sha1="446660edd243da39602d1b673ff13a84239b66d4" offset="0" />
14951570         </dataarea>
r31766r31767
15041579      <sharedfeat name="compatibility" value="NTSC"/>
15051580      <part name="cart" interface="a7800_cart">
15061581         <feature name="pcb_type" value="TYPE-0" />
1582         <feature name="slot" value="a78_rom" />
15071583         <dataarea name="rom" size="16384">
15081584            <rom name="mspacman.bin" size="16384" crc="e42fc700" sha1="ff22e21fc953a288453c40eb6fc5378d42b871f6" offset="0" />
15091585         </dataarea>
r31766r31767
15181594      <sharedfeat name="compatibility" value="PAL"/>
15191595      <part name="cart" interface="a7800_cart">
15201596         <feature name="pcb_type" value="TYPE-0" />
1597         <feature name="slot" value="a78_rom" />
15211598         <dataarea name="rom" size="32768">
15221599            <rom name="mspacmeu.bin" size="32768" crc="8421033a" sha1="a5b0826a130acf8b8dbc59ef980d40b802c22b30" offset="0" />
15231600         </dataarea>
r31766r31767
15321609      <sharedfeat name="compatibility" value="NTSC"/>
15331610      <part name="cart" interface="a7800_cart">
15341611         <feature name="pcb_type" value="TYPE-2" />
1612         <feature name="slot" value="a78_sg" />
15351613         <dataarea name="rom" size="131072">
15361614            <rom name="ninjaglf.bin" size="131072" crc="cb48e8dc" sha1="96d0e59e703770eea8d8d9c2c4e5a87ce6f2de76" offset="0" />
15371615         </dataarea>
r31766r31767
15461624      <sharedfeat name="compatibility" value="PAL"/>
15471625      <part name="cart" interface="a7800_cart">
15481626         <feature name="pcb_type" value="TYPE-2" />
1627         <feature name="slot" value="a78_sg" />
15491628         <dataarea name="rom" size="131072">
15501629            <rom name="ninjageu.bin" size="131072" crc="2b5382b7" sha1="99ce5711e38ff7ef3311216f954cf0ab70e289cf" offset="0" />
15511630         </dataarea>
r31766r31767
15611640      <sharedfeat name="compatibility" value="NTSC"/>
15621641      <part name="cart" interface="a7800_cart">
15631642         <feature name="pcb_type" value="TYPE-0" />
1643         <feature name="slot" value="a78_rom" />
15641644         <dataarea name="rom" size="49152">
15651645            <rom name="oneonone.bin" size="49152" crc="7d9370fb" sha1="5173f892a8d70aeca6c324c138c56208e0db2b98" offset="0" />
15661646         </dataarea>
r31766r31767
15761656      <sharedfeat name="compatibility" value="PAL"/>
15771657      <part name="cart" interface="a7800_cart">
15781658         <feature name="pcb_type" value="TYPE-0" />
1659         <feature name="slot" value="a78_rom" />
15791660         <dataarea name="rom" size="49152">
15801661            <rom name="oneonoeu.bin" size="49152" crc="7a628295" sha1="01dfc5e4e615cf20ee4f07245285f85684ee445d" offset="0" />
15811662         </dataarea>
r31766r31767
15901671      <sharedfeat name="compatibility" value="NTSC"/>
15911672      <part name="cart" interface="a7800_cart">
15921673         <feature name="pcb_type" value="TYPE-0" />
1674         <feature name="slot" value="a78_rom" />
15931675         <dataarea name="rom" size="32768">
15941676            <rom name="peterose.bin" size="32768" crc="f33d4dfa" sha1="ffb4fbed8d8f28ea71668542b7ebd019955c5a11" offset="0" />
15951677         </dataarea>
r31766r31767
16031685      <info name="developer" value="Bob DeCrescenzo" />
16041686      <sharedfeat name="compatibility" value="NTSC"/>
16051687      <part name="cart" interface="a7800_cart">
1688         <feature name="slot" value="a78_rom" />
16061689         <dataarea name="rom" size="16384">
16071690            <rom name="pacman.bin" size="16384" crc="d5d08d7e" sha1="f427806eae13e3c4ab8afdbe366ab1ec219d0047" offset="0" />
16081691         </dataarea>
r31766r31767
16161699      <info name="developer" value="Bob DeCrescenzo" />
16171700      <sharedfeat name="compatibility" value="NTSC"/>
16181701      <part name="cart" interface="a7800_cart">
1702         <feature name="slot" value="a78_rom" />
16191703         <dataarea name="rom" size="32768">
16201704            <rom name="ultra pac-man.bin" size="32768" crc="4baeac35" sha1="63a98f74ada1ce08ee0137e437395cc17b67a4d9" offset="0" />
16211705         </dataarea>
r31766r31767
16291713      <info name="developer" value="Bob DeCrescenzo" />
16301714      <sharedfeat name="compatibility" value="NTSC"/>
16311715      <part name="cart" interface="a7800_cart">
1716         <feature name="slot" value="a78_rom" />
16321717         <dataarea name="rom" size="32768">
16331718            <rom name="pac-man collection (ntsc).bin" size="32768" crc="553ea894" sha1="3b579d8827898a94b16225632a9870d22224b6bc" offset="0" />
16341719         </dataarea>
r31766r31767
16421727      <info name="developer" value="Bob DeCrescenzo" />
16431728      <sharedfeat name="compatibility" value="PAL"/>
16441729      <part name="cart" interface="a7800_cart">
1730         <feature name="slot" value="a78_rom" />
16451731         <dataarea name="rom" size="32768">
16461732            <rom name="pac-man collection (pal).bin" size="32768" crc="74517c71" sha1="ed0414e4b7c5ac10b0d7a5e19ee9c8e9ee61442f" offset="0" />
16471733         </dataarea>
r31766r31767
16551741      <info name="developer" value="Bob DeCrescenzo" />
16561742      <sharedfeat name="compatibility" value="NTSC"/>
16571743      <part name="cart" interface="a7800_cart">
1744         <feature name="slot" value="a78_rom" />
16581745         <dataarea name="rom" size="16384">
16591746            <rom name="pac-man plus.bin" size="16384" crc="e2dc056e" sha1="7dd18c8c7e82c813531f80ef2fe981c340f41c20" offset="0" />
16601747         </dataarea>
r31766r31767
16681755      <info name="developer" value="Bob DeCrescenzo" />
16691756      <sharedfeat name="compatibility" value="NTSC"/>
16701757      <part name="cart" interface="a7800_cart">
1758         <feature name="slot" value="a78_rom" />
16711759         <dataarea name="rom" size="16384">
16721760            <rom name="pac-pollux.bin" size="16384" crc="1b3dd167" sha1="2f079cd0fb6d92fd5261fe567ae0a6407a722f44" offset="0" />
16731761         </dataarea>
r31766r31767
16811769      <info name="serial" value="CX7891"/>
16821770      <part name="cart" interface="a7800_cart">
16831771         <feature name="pcb_type" value="TYPE-2" />
1772         <feature name="slot" value="a78_sg" />
16841773         <dataarea name="rom" size="65536">
16851774            <rom name="pitfghtr.bin" size="65536" crc="a5e75537" sha1="378addef67aca55500f0f5f9f0075dcb177406b5" offset="0" />
16861775         </dataarea>
r31766r31767
16951784      <sharedfeat name="compatibility" value="NTSC"/>
16961785      <part name="cart" interface="a7800_cart">
16971786         <feature name="pcb_type" value="TYPE-2" />
1787         <feature name="slot" value="a78_sg" />
16981788         <dataarea name="rom" size="131072">
16991789            <rom name="planetsm.bin" size="131072" crc="4e3b9e64" sha1="503b975fc1f8edc16110ac2c5b884c4e8b2b6efb" offset="0" />
17001790         </dataarea>
r31766r31767
17091799      <sharedfeat name="compatibility" value="PAL"/>
17101800      <part name="cart" interface="a7800_cart">
17111801         <feature name="pcb_type" value="TYPE-2" />
1802         <feature name="slot" value="a78_sg" />
17121803         <dataarea name="rom" size="131072">
17131804            <rom name="planeteu.bin" size="131072" crc="95dc7e96" sha1="f12cbb576607ec38d6111f4346412ccc5bfbcf42" offset="0" />
17141805         </dataarea>
r31766r31767
17211812      <publisher>Tynesoft</publisher>
17221813      <part name="cart" interface="a7800_cart">
17231814         <feature name="pcb_type" value="TYPE-6" />
1815         <feature name="slot" value="a78_sg_ram" />
17241816         <dataarea name="rom" size="131072">
17251817            <rom name="plutos.bin" size="131072" crc="2f211f7f" sha1="fa55d6a366b237917f18487fc51817394839a3bc" offset="0" />
17261818         </dataarea>
r31766r31767
17351827      <sharedfeat name="compatibility" value="NTSC"/>
17361828      <part name="cart" interface="a7800_cart">
17371829         <feature name="pcb_type" value="TYPE-0" />
1830         <feature name="slot" value="a78_rom" />
17381831         <dataarea name="rom" size="32768">
17391832            <rom name="polepos2.bin" size="32768" crc="a85fb962" sha1="ccfa6f3f83ddbed2a2fb32735fea316a718fbaaa" offset="0" />
17401833         </dataarea>
r31766r31767
17491842      <sharedfeat name="compatibility" value="PAL"/>
17501843      <part name="cart" interface="a7800_cart">
17511844         <feature name="pcb_type" value="TYPE-0" />
1845         <feature name="slot" value="a78_rom" />
17521846         <dataarea name="rom" size="32768">
17531847            <rom name="pleps2eu.bin" size="32768" crc="d751c7a6" sha1="268e53b5b2117bf853e0aae6adb0b2d3aad8ad5c" offset="0" />
17541848         </dataarea>
r31766r31767
17631857      <sharedfeat name="compatibility" value="NTSC"/>
17641858      <part name="cart" interface="a7800_cart">
17651859         <feature name="pcb_type" value="ACTIVISION" />
1860         <feature name="slot" value="a78_act" />
17661861         <dataarea name="rom" size="131072">
17671862            <rom name="rampage.bin" size="131072" crc="39a316aa" sha1="13745b5eaaab7e2c992f3312285e112cdeb424f6" offset="0" />
17681863         </dataarea>
r31766r31767
17771872      <info name="serial" value="CX7892"/>
17781873      <part name="cart" interface="a7800_cart">
17791874         <feature name="pcb_type" value="TYPE-2" />
1875         <feature name="slot" value="a78_sg" />
17801876         <dataarea name="rom" size="131072">
17811877            <rom name="rampart.bin" size="131072" crc="e8c2a662" sha1="53516794cb442208af5d54760324c006510553b3" offset="0" />
17821878         </dataarea>
r31766r31767
17921888      <sharedfeat name="compatibility" value="NTSC"/>
17931889      <part name="cart" interface="a7800_cart">
17941890         <feature name="pcb_type" value="TYPE-6" />
1891         <feature name="slot" value="a78_sg_ram" />
17951892         <dataarea name="rom" size="32768">
17961893            <rom name="rescuefr.bin" size="32768" crc="9a74fbf2" sha1="6653022f38e553d475896a918850158eaf8f77ff" offset="0" />
17971894         </dataarea>
r31766r31767
18061903      <sharedfeat name="compatibility" value="NTSC"/>
18071904      <part name="cart" interface="a7800_cart">
18081905         <feature name="pcb_type" value="TYPE-0" />
1906         <feature name="slot" value="a78_rom" />
18091907         <dataarea name="rom" size="32768">
18101908            <rom name="robotron.bin" size="32768" crc="cb22305d" sha1="ccc9753cdcbd2a2f8cb7966b8227801ba0bfd41d" offset="0" />
18111909         </dataarea>
r31766r31767
18201918      <sharedfeat name="compatibility" value="NTSC"/>
18211919      <part name="cart" interface="a7800_cart">
18221920         <feature name="pcb_type" value="TYPE-2" />
1921         <feature name="slot" value="a78_sg" />
18231922         <dataarea name="rom" size="65536">
18241923            <rom name="rsbsebll.bin" size="65536" crc="b1508030" sha1="9a9f60251d049630099f56d2d3efb013828b8a2c" offset="0" />
18251924         </dataarea>
r31766r31767
18331932      <info name="developer" value="Matthias Luedtke" />
18341933      <sharedfeat name="compatibility" value="NTSC"/>
18351934      <part name="cart" interface="a7800_cart">
1935         <feature name="slot" value="a78_rom" />
18361936         <dataarea name="rom" size="49152">
18371937            <rom name="santa simon.bin" size="49152" crc="30d641ff" sha1="610e08f226c66b15ff699b02c736ce5ce7a8a862" offset="0" />
18381938         </dataarea>
r31766r31767
18471947      <sharedfeat name="compatibility" value="NTSC"/>
18481948      <part name="cart" interface="a7800_cart">
18491949         <feature name="pcb_type" value="TYPE-2" />
1950         <feature name="slot" value="a78_sg" />
18501951         <dataarea name="rom" size="131072">
18511952            <rom name="scrpyard.bin" size="131072" crc="5cc8c34f" sha1="f2249321d0cc296b9f9e516bbc5ecc9aab56ca22" offset="0" />
18521953         </dataarea>
r31766r31767
18611962      <sharedfeat name="compatibility" value="PAL"/>
18621963      <part name="cart" interface="a7800_cart">
18631964         <feature name="pcb_type" value="TYPE-2" />
1965         <feature name="slot" value="a78_sg" />
18641966         <dataarea name="rom" size="131072">
18651967            <rom name="scrpyrde.bin" size="131072" crc="46dd9662" sha1="ebfed67cfeebc6a558dbb087e4784e5e5258c2e1" offset="0" />
18661968         </dataarea>
r31766r31767
19032005      <publisher>Tynesoft</publisher>
19042006      <part name="cart" interface="a7800_cart">
19052007         <feature name="pcb_type" value="TYPE-6" />
2008         <feature name="slot" value="a78_sg_ram" />
19062009         <dataarea name="rom" size="131072">
19072010            <rom name="sirius.bin" size="131072" crc="65ae616e" sha1="cd9f6dea96f102262065d7472e73121b67f9e244" offset="0" />
19082011         </dataarea>
r31766r31767
19152018      <publisher>Atari Interactive</publisher>
19162019      <sharedfeat name="compatibility" value="NTSC"/>
19172020      <part name="cart" interface="a7800_cart">
2021         <feature name="slot" value="a78_rom" />
19182022         <dataarea name="rom" size="32768">
19192023            <rom name="space duel (ntsc).bin" size="32768" crc="ef2d2560" sha1="199d06cf7f54bb0a1fa328d3cff955f4bcf90450" offset="0" />
19202024         </dataarea>
r31766r31767
19282032      <info name="developer" value="Bob DeCrescenzo" />
19292033      <sharedfeat name="compatibility" value="PAL"/>
19302034      <part name="cart" interface="a7800_cart">
2035         <feature name="slot" value="a78_rom" />
19312036         <dataarea name="rom" size="32768">
19322037            <rom name="space duel (pal).bin" size="32768" crc="0e6a8443" sha1="03d3c7e6255fc6f1b8bbf6dc3ccdbaf51b7eabf7" offset="0" />
19332038         </dataarea>
r31766r31767
19412046      <info name="developer" value="Bob DeCrescenzo" />
19422047      <sharedfeat name="compatibility" value="NTSC"/>
19432048      <part name="cart" interface="a7800_cart">
2049         <feature name="slot" value="a78_rom" />
19442050         <dataarea name="rom" size="16384">
19452051            <rom name="spaceinvaders (ntsc).bin" size="16384" crc="9c3086eb" sha1="167c06a5d9364f3359bb531d5533f4ff49283d47" offset="0" />
19462052         </dataarea>
r31766r31767
19542060      <info name="developer" value="Bob DeCrescenzo" />
19552061      <sharedfeat name="compatibility" value="PAL"/>
19562062      <part name="cart" interface="a7800_cart">
2063         <feature name="slot" value="a78_rom" />
19572064         <dataarea name="rom" size="16384">
19582065            <rom name="spaceinvaders (pal).bin" size="16384" crc="90d7aad3" sha1="0b17368b9f3328f41d29ca4f0d04ab25e1aad55e" offset="0" />
19592066         </dataarea>
r31766r31767
19672074      <info name="developer" value="Gambler172" />
19682075      <sharedfeat name="compatibility" value="NTSC"/>
19692076      <part name="cart" interface="a7800_cart">
2077         <feature name="slot" value="a78_rom" />
19702078         <dataarea name="rom" size="32768">
19712079            <rom name="xev78_signed.bin" size="32768" crc="67c8af57" sha1="f76f2a212747e06ac452da8dbeb0ad093b24d793" offset="0" />
19722080         </dataarea>
r31766r31767
19802088      <info name="developer" value="Gambler172" />
19812089      <sharedfeat name="compatibility" value="PAL"/>
19822090      <part name="cart" interface="a7800_cart">
2091         <feature name="slot" value="a78_rom" />
19832092         <dataarea name="rom" size="32768">
19842093            <rom name="star wars 7800.bin" size="32768" crc="8678f1c0" sha1="9ac24aa0563be93d72bcf83c52a8acdbbfc63729" offset="0" />
19852094         </dataarea>
r31766r31767
19942103      <sharedfeat name="compatibility" value="NTSC"/>
19952104      <part name="cart" interface="a7800_cart">
19962105         <feature name="pcb_type" value="TYPE-6" />
2106         <feature name="slot" value="a78_sg_ram" />
19972107         <dataarea name="rom" size="131072">
19982108            <rom name="smmrgame.bin" size="131072" crc="65c6df3f" sha1="31d46b32a2aa8d5bd6028cff1f41037426b22409" offset="0" />
19992109         </dataarea>
r31766r31767
20082118      <sharedfeat name="compatibility" value="NTSC"/>
20092119      <part name="cart" interface="a7800_cart">
20102120         <feature name="pcb_type" value="TYPE-0" />
2121         <feature name="slot" value="a78_rom" />
20112122         <dataarea name="rom" size="49152">
20122123            <rom name="suprhuey.bin" size="49152" crc="71846500" sha1="29aea9e90c446942001fd08d3c4c929f4ce048d7" offset="0" />
20132124         </dataarea>
r31766r31767
20222133      <sharedfeat name="compatibility" value="PAL"/>
20232134      <part name="cart" interface="a7800_cart">
20242135         <feature name="pcb_type" value="TYPE-0" />
2136         <feature name="slot" value="a78_rom" />
20252137         <dataarea name="rom" size="49152">
20262138            <rom name="suprhueu.bin" size="49152" crc="6b27ea2c" sha1="469e03ee1e22ef0978c8095a38d662d34a413723" offset="0" />
20272139         </dataarea>
r31766r31767
20362148      <sharedfeat name="compatibility" value="NTSC"/>
20372149      <part name="cart" interface="a7800_cart">
20382150         <feature name="pcb_type" value="TYPE-0" />
2151         <feature name="slot" value="a78_rom" />
20392152         <dataarea name="rom" size="32768">
20402153            <rom name="sprskate.bin" size="32768" crc="13b68650" sha1="666d9383c112b66026898e6002b803801e269c51" offset="0" />
20412154         </dataarea>
r31766r31767
20502163      <sharedfeat name="compatibility" value="PAL"/>
20512164      <part name="cart" interface="a7800_cart">
20522165         <feature name="pcb_type" value="TYPE-0" />
2166         <feature name="slot" value="a78_rom" />
20532167         <dataarea name="rom" size="32768">
20542168            <rom name="sprskaeu.bin" size="32768" crc="8f167ba9" sha1="fab349584af7b6b3f9b034af3034f43257e2c25f" offset="0" />
20552169         </dataarea>
r31766r31767
20642178      <sharedfeat name="compatibility" value="NTSC"/>
20652179      <part name="cart" interface="a7800_cart">
20662180         <feature name="pcb_type" value="TYPE-2" />
2181         <feature name="slot" value="a78_sg" />
20672182         <dataarea name="rom" size="65536">
20682183            <rom name="tankcmnd.bin" size="65536" crc="db91b181" sha1="1d2975d754806416a25a821db6a9fe389bf5d946" offset="0" />
20692184         </dataarea>
r31766r31767
20782193      <sharedfeat name="compatibility" value="NTSC"/>
20792194      <part name="cart" interface="a7800_cart">
20802195         <feature name="pcb_type" value="TYPE-0" />
2196         <feature name="slot" value="a78_rom" />
20812197         <dataarea name="rom" size="32768">
20822198            <rom name="titlemat.bin" size="32768" crc="bc23c57b" sha1="80d11bcbb953ccd8bf3c3e64162711e7edb95090" offset="0" />
20832199         </dataarea>
r31766r31767
20922208      <sharedfeat name="compatibility" value="PAL"/>
20932209      <part name="cart" interface="a7800_cart">
20942210         <feature name="pcb_type" value="TYPE-0" />
2211         <feature name="slot" value="a78_rom" />
20952212         <dataarea name="rom" size="32768">
20962213            <rom name="titlemeu.bin" size="32768" crc="16b54d5b" sha1="7ab281c9b69692823b3b6b594856172363c507b5" offset="0" />
20972214         </dataarea>
r31766r31767
21062223      <sharedfeat name="compatibility" value="NTSC"/>
21072224      <part name="cart" interface="a7800_cart">
21082225         <feature name="pcb_type" value="TYPE-0" />
2226         <feature name="slot" value="a78_rom" />
21092227         <dataarea name="rom" size="32768">
21102228            <rom name="tomcat.bin" size="32768" crc="513cb9ee" sha1="80c615fb60d0004c1accde25e42759572e030928" offset="0" />
21112229         </dataarea>
r31766r31767
21202238      <sharedfeat name="compatibility" value="PAL"/>
21212239      <part name="cart" interface="a7800_cart">
21222240         <feature name="pcb_type" value="TYPE-0" />
2241         <feature name="slot" value="a78_rom" />
21232242         <dataarea name="rom" size="32768">
21242243            <rom name="tomcateu.bin" size="32768" crc="b01205bf" sha1="825381773593365b5ca7eeca968cca00879eee71" offset="0" />
21252244         </dataarea>
r31766r31767
21332252      <info name="serial" value="CX7823"/>
21342253      <part name="cart" interface="a7800_cart">
21352254         <feature name="pcb_type" value="TYPE-2" />
2255         <feature name="slot" value="a78_sg" />
21362256         <dataarea name="rom" size="131072">
21372257            <rom name="tchdown.bin" size="131072" crc="aae12695" sha1="364bf0fef8a67f7e66761c76a3a6a0dd186f04aa" offset="0" />
21382258         </dataarea>
r31766r31767
21472267      <sharedfeat name="compatibility" value="NTSC"/>
21482268      <part name="cart" interface="a7800_cart">
21492269         <feature name="pcb_type" value="TYPE-6" />
2270         <feature name="slot" value="a78_sg_ram" />
21502271         <dataarea name="rom" size="65536">
21512272            <rom name="twrtpllr.bin" size="65536" crc="4407ba04" sha1="53976013986e0ad3694ab9c021420b8172465de7" offset="0" />
21522273         </dataarea>
r31766r31767
21612282      <sharedfeat name="compatibility" value="PAL"/>
21622283      <part name="cart" interface="a7800_cart">
21632284         <feature name="pcb_type" value="TYPE-6" />
2285         <feature name="slot" value="a78_sg_ram" />
21642286         <dataarea name="rom" size="65536">
21652287            <rom name="twrtpleu.bin" size="65536" crc="0f87fd7b" sha1="56e1b795e80382edb376e4536d1dee539d4ac548" offset="0" />
21662288         </dataarea>
r31766r31767
21742296      <info name="developer" value="Mark Ball" />
21752297      <sharedfeat name="compatibility" value="NTSC"/>
21762298      <part name="cart" interface="a7800_cart">
2299         <feature name="slot" value="a78_rom" />
21772300         <dataarea name="rom" size="32768">
21782301            <rom name="wasp v1.05.bin" size="32768" crc="ae1117dd" sha1="be65bdc225aca4a8bb9a18653da7de78aaac3f80" offset="0" />
21792302         </dataarea>
r31766r31767
21882311      <sharedfeat name="compatibility" value="NTSC"/>
21892312      <part name="cart" interface="a7800_cart">
21902313         <feature name="pcb_type" value="TYPE-2" />
2314         <feature name="slot" value="a78_sg" />
21912315         <dataarea name="rom" size="65536">
21922316            <rom name="waterski.bin" size="65536" crc="930b30df" sha1="621c67c2228843405445222743ba3d7c1f04a3c4" offset="0" />
21932317         </dataarea>
r31766r31767
22022326      <sharedfeat name="compatibility" value="NTSC"/>
22032327      <part name="cart" interface="a7800_cart">
22042328         <feature name="pcb_type" value="TYPE-6" />
2329         <feature name="slot" value="a78_sg_ram" />
22052330         <dataarea name="rom" size="131072">
22062331            <rom name="wntrgame.bin" size="131072" crc="8981b531" sha1="b3725d6f0834c68ac62ce13eb9eb0d01d1124e5e" offset="0" />
22072332         </dataarea>
r31766r31767
22162341      <sharedfeat name="compatibility" value="NTSC"/>
22172342      <part name="cart" interface="a7800_cart">
22182343         <feature name="pcb_type" value="TYPE-2" />
2344         <feature name="slot" value="a78_sg" />
22192345         <dataarea name="rom" size="131072">
22202346            <rom name="xnophobe.bin" size="131072" crc="5fd9a141" sha1="867adbfd7539ff81e68726ed6f5ff7326409539f" offset="0" />
22212347         </dataarea>
r31766r31767
22302356      <sharedfeat name="compatibility" value="PAL"/>
22312357      <part name="cart" interface="a7800_cart">
22322358         <feature name="pcb_type" value="TYPE-2" />
2359         <feature name="slot" value="a78_sg" />
22332360         <dataarea name="rom" size="131072">
22342361            <rom name="xnophoeu.bin" size="131072" crc="cf0e44f1" sha1="b2cf7d6164d6e5acd47e9f6d7cf60bb0f775b4a3" offset="0" />
22352362         </dataarea>
r31766r31767
22442371      <sharedfeat name="compatibility" value="NTSC"/>
22452372      <part name="cart" interface="a7800_cart">
22462373         <feature name="pcb_type" value="TYPE-0" />
2374         <feature name="slot" value="a78_rom" />
22472375         <dataarea name="rom" size="32768">
22482376            <rom name="xevious.bin" size="32768" crc="75fc124f" sha1="1d4f0335b152239553534fcbbacdca273802e3bd" offset="0" />
22492377         </dataarea>
r31766r31767
22582386      <sharedfeat name="compatibility" value="PAL"/>
22592387      <part name="cart" interface="a7800_cart">
22602388         <feature name="pcb_type" value="TYPE-0" />
2389         <feature name="slot" value="a78_rom" />
22612390         <dataarea name="rom" size="49152">
22622391            <rom name="xevioeu.bin" size="49152" crc="d5ac738b" sha1="81647c8ce432f891328631b57dd3268dd315f8e8" offset="0" />
22632392         </dataarea>
22642393      </part>
22652394   </software>
22662395
2396<!-- Passthrough carts -->
2397
2398   <software name="hiscore">
2399      <description>High Score Cartridge</description>
2400      <year>198?</year>
2401      <publisher>Atari</publisher>
2402      <info name="serial" value="CX78HSC"/>
2403      <part name="cart" interface="a7800_cart">
2404         <feature name="slot" value="a78_hsc" />
2405         <dataarea name="rom" size="4096">
2406            <rom name="highscre.bin" size="4096" crc="9be408d3" sha1="a3af676991391a6dd716c79022d4947206b78164" offset="0" />
2407         </dataarea>
2408      </part>
2409   </software>
2410
2411<!-- Chip adding 128K of RAM + POKEY onboard -->
2412   <software name="xboard">
2413      <description>XBoarD Expansion</description>
2414      <year>2005</year>
2415      <publisher>&lt;homebrew&gt;</publisher>
2416      <part name="cart" interface="a7800_cart">
2417         <feature name="slot" value="a78_xboard" />
2418         <dataarea name="rom" size="1">
2419            <!-- this entry behaves just as passthrough, even if in fact the chips shall be socketed on the PCB! -->
2420         </dataarea>
2421      </part>
2422   </software>
2423
2424<!-- Chip adding 128K of RAM + POKEY+HighScore onboard -->
2425   <software name="xm">
2426      <description>XM Expansion Module</description>
2427      <year>2015?</year>
2428      <publisher>&lt;homebrew&gt;</publisher>
2429      <part name="cart" interface="a7800_cart">
2430         <feature name="slot" value="a78_xm" />
2431         <dataarea name="rom" size="4096">
2432            <rom name="highscre.bin" size="4096" crc="9be408d3" sha1="a3af676991391a6dd716c79022d4947206b78164" offset="0" />
2433         </dataarea>
2434      </part>
2435   </software>
2436
22672437   <!-- XM board enhanced -->
22682438
22692439   <!-- these should require an XM board? but the emulation seems to be built into the base driver?-->
r31766r31767
22722442   <software name="dkongxm">
22732443      <description>Donkey Kong (homebrew, XM enhanced, HSC support) (Demo)</description>
22742444      <year>2012</year>
2275   <publisher>&lt;homebrew&gt;</publisher> <!-- TEP392  -->
2445      <publisher>&lt;homebrew&gt;</publisher> <!-- TEP392  -->
22762446      <sharedfeat name="compatibility" value="PAL"/>
22772447      <part name="cart" interface="a7800_cart">
22782448         <feature name="pcb_type" value="TYPE-XM" />
2449         <feature name="slot" value="a78_xmc" />
22792450         <dataarea name="rom" size="0x24000">
22802451            <rom name="dkxm_final_demo_pal_hsc.a78" size="0x24000" crc="6510b674" sha1="65b723b470d287af51e9888813149c43fb11ac26" offset="0" />
22812452         </dataarea>
r31766r31767
22852456   <software name="dkongxmu" cloneof="dkongxm" >
22862457      <description>Donkey Kong (homebrew, XM enhanced, HSC support) (Demo) (NTSC)</description>
22872458      <year>2012</year>
2288   <publisher>&lt;homebrew&gt;</publisher> <!-- TEP392  -->
2459      <publisher>&lt;homebrew&gt;</publisher> <!-- TEP392  -->
22892460      <sharedfeat name="compatibility" value="NTSC"/>
22902461      <part name="cart" interface="a7800_cart">
22912462         <feature name="pcb_type" value="TYPE-XM" />
2463         <feature name="slot" value="a78_xmc" />
22922464         <dataarea name="rom" size="0x24000">
22932465            <rom name="dkxm_final_demo_ntsc_hsc.a78" size="0x24000" crc="2c67fea7" sha1="7825c1946e3c7492fa9bbfae33029cd68c0d1135" offset="0" />
22942466         </dataarea>
r31766r31767
22982470   <software name="dkongxmn" cloneof="dkongxm">
22992471      <description>Donkey Kong (homebrew, XM enhanced) (Demo)</description>
23002472      <year>2012</year>
2301   <publisher>&lt;homebrew&gt;</publisher> <!-- TEP392  -->
2473      <publisher>&lt;homebrew&gt;</publisher> <!-- TEP392  -->
23022474      <sharedfeat name="compatibility" value="PAL"/>
23032475      <part name="cart" interface="a7800_cart">
23042476         <feature name="pcb_type" value="TYPE-XM" />
2477         <feature name="slot" value="a78_xmc" />
23052478         <dataarea name="rom" size="0x24000">
23062479            <rom name="dkxm_final_demo_pal.a78" size="0x24000" crc="d362712e" sha1="118c462d6698bd23c378785f80062fdd7d65ca00" offset="0" />
23072480         </dataarea>
r31766r31767
23112484   <software name="dkongxmnu" cloneof="dkongxm" >
23122485      <description>Donkey Kong (homebrew, XM enhanced) (Demo) (NTSC)</description>
23132486      <year>2012</year>
2314   <publisher>&lt;homebrew&gt;</publisher> <!-- TEP392  -->
2487      <publisher>&lt;homebrew&gt;</publisher> <!-- TEP392  -->
23152488      <sharedfeat name="compatibility" value="NTSC"/>
23162489      <part name="cart" interface="a7800_cart">
23172490         <feature name="pcb_type" value="TYPE-XM" />
2491         <feature name="slot" value="a78_xmc" />
23182492         <dataarea name="rom" size="0x24000">
23192493            <rom name="dkxm_final_demo_ntsc.a78" size="0x24000" crc="6e170055" sha1="f4da231312da06ff9e8af5681b5013b14886b455" offset="0" />
23202494         </dataarea>

Previous 199869 Revisions Next


© 1997-2024 The MAME Team