(MESS) nes.c: shuffled around the loading code (very preliminary step towards slotification).
also, temporarily made famicom driver to only support disks.
This commit is contained in:
parent
e4f37ea7ba
commit
0e937ed6b4
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -7332,6 +7332,8 @@ src/mess/machine/nes.c svneol=native#text/plain
|
|||||||
src/mess/machine/nes_ines.c svneol=native#text/plain
|
src/mess/machine/nes_ines.c svneol=native#text/plain
|
||||||
src/mess/machine/nes_mmc.c svneol=native#text/plain
|
src/mess/machine/nes_mmc.c svneol=native#text/plain
|
||||||
src/mess/machine/nes_pcb.c svneol=native#text/plain
|
src/mess/machine/nes_pcb.c svneol=native#text/plain
|
||||||
|
src/mess/machine/nes_slot.c svneol=native#text/plain
|
||||||
|
src/mess/machine/nes_slot.h svneol=native#text/plain
|
||||||
src/mess/machine/nes_unif.c svneol=native#text/plain
|
src/mess/machine/nes_unif.c svneol=native#text/plain
|
||||||
src/mess/machine/nextkbd.c svneol=native#text/plain
|
src/mess/machine/nextkbd.c svneol=native#text/plain
|
||||||
src/mess/machine/nextkbd.h svneol=native#text/plain
|
src/mess/machine/nextkbd.h svneol=native#text/plain
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#include "includes/nes.h"
|
#include "includes/nes.h"
|
||||||
//#include "includes/nes_mmc.h"
|
//#include "includes/nes_mmc.h"
|
||||||
#include "cpu/m6502/n2a03.h"
|
#include "cpu/m6502/n2a03.h"
|
||||||
#include "imagedev/cartslot.h"
|
|
||||||
#include "sound/nes_apu.h"
|
#include "sound/nes_apu.h"
|
||||||
#include "imagedev/flopdrv.h"
|
#include "imagedev/flopdrv.h"
|
||||||
#include "formats/nes_dsk.h"
|
#include "formats/nes_dsk.h"
|
||||||
@ -53,7 +52,9 @@ static ADDRESS_MAP_START( nes_map, AS_PROGRAM, 8, nes_state )
|
|||||||
AM_RANGE(0x4016, 0x4016) AM_READWRITE(nes_IN0_r, nes_IN0_w) /* IN0 - input port 1 */
|
AM_RANGE(0x4016, 0x4016) AM_READWRITE(nes_IN0_r, nes_IN0_w) /* IN0 - input port 1 */
|
||||||
AM_RANGE(0x4017, 0x4017) AM_READ(nes_IN1_r) /* IN1 - input port 2 */
|
AM_RANGE(0x4017, 0x4017) AM_READ(nes_IN1_r) /* IN1 - input port 2 */
|
||||||
AM_RANGE(0x4017, 0x4017) AM_WRITE(psg_4017_w) /* PSG second control register */
|
AM_RANGE(0x4017, 0x4017) AM_WRITE(psg_4017_w) /* PSG second control register */
|
||||||
AM_RANGE(0x4100, 0x5fff) AM_READWRITE(nes_low_mapper_r, nes_low_mapper_w) /* Perform unholy acts on the machine */
|
// 0x4100-0x5fff -> LOW HANDLER defined on a pcb base
|
||||||
|
// 0x6000-0x7fff -> MID HANDLER defined on a pcb base
|
||||||
|
// 0x8000-0xffff -> HIGH HANDLER defined on a pcb base
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
@ -442,6 +443,14 @@ static const floppy_interface nes_floppy_interface =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static const nes_cart_interface nes_crt_interface =
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
static SLOT_INTERFACE_START(nes_cart)
|
||||||
|
SLOT_INTERFACE("rom", NES_ROM)
|
||||||
|
SLOT_INTERFACE_END
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( nes, nes_state )
|
static MACHINE_CONFIG_START( nes, nes_state )
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_CLOCK)
|
MCFG_CPU_ADD("maincpu", N2A03, NTSC_CLOCK)
|
||||||
@ -470,12 +479,7 @@ static MACHINE_CONFIG_START( nes, nes_state )
|
|||||||
MCFG_SOUND_CONFIG(nes_apu_interface)
|
MCFG_SOUND_CONFIG(nes_apu_interface)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90)
|
||||||
|
|
||||||
MCFG_CARTSLOT_ADD("cart")
|
MCFG_NES_CARTRIDGE_ADD("nes_slot", nes_crt_interface, nes_cart, NULL, NULL)
|
||||||
MCFG_CARTSLOT_EXTENSION_LIST("nes,unf")
|
|
||||||
MCFG_CARTSLOT_MANDATORY
|
|
||||||
MCFG_CARTSLOT_INTERFACE("nes_cart")
|
|
||||||
MCFG_CARTSLOT_LOAD(nes_state,nes_cart)
|
|
||||||
MCFG_CARTSLOT_PARTIALHASH(nes_partialhash)
|
|
||||||
MCFG_SOFTWARE_LIST_ADD("cart_list","nes")
|
MCFG_SOFTWARE_LIST_ADD("cart_list","nes")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -522,20 +526,13 @@ static MACHINE_CONFIG_DERIVED( dendy, nes )
|
|||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
static MACHINE_CONFIG_DERIVED( famicom, nes )
|
static MACHINE_CONFIG_DERIVED( famicom, nes )
|
||||||
|
MCFG_DEVICE_REMOVE( "nes_slot" )
|
||||||
MCFG_CARTSLOT_MODIFY("cart")
|
// MCFG_FC_CARTRIDGE_ADD("nes_slot", nes_crt_interface, nes_cart, NULL, NULL) // here we need a non-mandatory cart...
|
||||||
MCFG_CARTSLOT_EXTENSION_LIST("nes,unf")
|
|
||||||
MCFG_CARTSLOT_NOT_MANDATORY
|
|
||||||
MCFG_CARTSLOT_LOAD(nes_state,nes_cart)
|
|
||||||
MCFG_CARTSLOT_PARTIALHASH(nes_partialhash)
|
|
||||||
|
|
||||||
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, nes_floppy_interface)
|
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, nes_floppy_interface)
|
||||||
MCFG_SOFTWARE_LIST_ADD("flop_list","famicom_flop")
|
MCFG_SOFTWARE_LIST_ADD("flop_list","famicom_flop")
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
//static MACHINE_CONFIG_DERIVED( nes_test, nes )
|
|
||||||
//MACHINE_CONFIG_END
|
|
||||||
|
|
||||||
|
|
||||||
/* rom regions are just place-holders: they get removed and re-allocated when a cart is loaded */
|
/* rom regions are just place-holders: they get removed and re-allocated when a cart is loaded */
|
||||||
ROM_START( nes )
|
ROM_START( nes )
|
||||||
@ -588,7 +585,6 @@ ROM_START( dendy )
|
|||||||
ROM_REGION( 0x800, "ciram", ROMREGION_ERASE00 ) /* CI RAM */
|
ROM_REGION( 0x800, "ciram", ROMREGION_ERASE00 ) /* CI RAM */
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
//#define rom_nes_test rom_nes
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
@ -604,5 +600,3 @@ CONS( 1986, famitwin, nes, 0, famicom, famicom, nes_state, famicom, "Sh
|
|||||||
CONS( 198?, m82, nes, 0, nes, nes, driver_device, 0, "Nintendo", "M82 Display Unit", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
|
CONS( 198?, m82, nes, 0, nes, nes, driver_device, 0, "Nintendo", "M82 Display Unit", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
|
||||||
CONS( 1996, drpcjr, nes, 0, famicom, famicom, nes_state, famicom, "Bung", "Doctor PC Jr", GAME_IMPERFECT_GRAPHICS )
|
CONS( 1996, drpcjr, nes, 0, famicom, famicom, nes_state, famicom, "Bung", "Doctor PC Jr", GAME_IMPERFECT_GRAPHICS )
|
||||||
CONS( 1992, dendy, nes, 0, dendy, nes, driver_device, 0, "Steepler", "Dendy Classic", GAME_IMPERFECT_GRAPHICS )
|
CONS( 1992, dendy, nes, 0, dendy, nes, driver_device, 0, "Steepler", "Dendy Classic", GAME_IMPERFECT_GRAPHICS )
|
||||||
|
|
||||||
//CONS( 1985, nes_test, 0, 0, nes_test, nes, driver_device, 0, "Nintendo", "Nintendo Entertainment System (Testdriver)", GAME_IMPERFECT_GRAPHICS )
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#define NES_H_
|
#define NES_H_
|
||||||
|
|
||||||
#include "includes/nes_mmc.h"
|
#include "includes/nes_mmc.h"
|
||||||
|
#include "machine/nes_slot.h"
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -54,7 +55,9 @@ class nes_state : public nes_carts_state
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
nes_state(const machine_config &mconfig, device_type type, const char *tag)
|
nes_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: nes_carts_state(mconfig, type, tag) { }
|
: nes_carts_state(mconfig, type, tag),
|
||||||
|
m_cartslot(*this, "nes_slot")
|
||||||
|
{ }
|
||||||
|
|
||||||
/* input_related - this part has to be cleaned up (e.g. in_2 and in_3 are not really necessary here...) */
|
/* input_related - this part has to be cleaned up (e.g. in_2 and in_3 are not really necessary here...) */
|
||||||
nes_input m_in_0, m_in_1, m_in_2, m_in_3;
|
nes_input m_in_0, m_in_1, m_in_2, m_in_3;
|
||||||
@ -74,8 +77,6 @@ public:
|
|||||||
DECLARE_READ8_MEMBER(nes_chr_r);
|
DECLARE_READ8_MEMBER(nes_chr_r);
|
||||||
DECLARE_WRITE8_MEMBER(nes_nt_w);
|
DECLARE_WRITE8_MEMBER(nes_nt_w);
|
||||||
DECLARE_READ8_MEMBER(nes_nt_r);
|
DECLARE_READ8_MEMBER(nes_nt_r);
|
||||||
DECLARE_WRITE8_MEMBER(nes_low_mapper_w);
|
|
||||||
DECLARE_READ8_MEMBER(nes_low_mapper_r);
|
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
write8_delegate m_mmc_write_low;
|
write8_delegate m_mmc_write_low;
|
||||||
@ -114,7 +115,6 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(nes_vh_sprite_dma_w);
|
DECLARE_WRITE8_MEMBER(nes_vh_sprite_dma_w);
|
||||||
DECLARE_DRIVER_INIT(famicom);
|
DECLARE_DRIVER_INIT(famicom);
|
||||||
virtual void machine_start();
|
virtual void machine_start();
|
||||||
virtual void machine_stop();
|
|
||||||
virtual void machine_reset();
|
virtual void machine_reset();
|
||||||
virtual void video_start();
|
virtual void video_start();
|
||||||
virtual void video_reset();
|
virtual void video_reset();
|
||||||
@ -126,7 +126,6 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(psg_4015_w);
|
DECLARE_WRITE8_MEMBER(psg_4015_w);
|
||||||
DECLARE_WRITE8_MEMBER(psg_4017_w);
|
DECLARE_WRITE8_MEMBER(psg_4017_w);
|
||||||
void nes_banks_restore();
|
void nes_banks_restore();
|
||||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(nes_cart);
|
|
||||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(nes_disk);
|
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(nes_disk);
|
||||||
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(nes_disk);
|
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(nes_disk);
|
||||||
|
|
||||||
@ -144,16 +143,18 @@ public:
|
|||||||
ioport_port *m_io_zapper2_y;
|
ioport_port *m_io_zapper2_y;
|
||||||
ioport_port *m_io_paddle;
|
ioport_port *m_io_paddle;
|
||||||
|
|
||||||
|
optional_device<nes_cart_slot_device> m_cartslot; //mandatory
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/* devices */
|
/* devices */
|
||||||
// cpu_device *m_maincpu;
|
// cpu_device *m_maincpu;
|
||||||
// ppu2c0x_device *m_ppu;
|
// ppu2c0x_device *m_ppu;
|
||||||
// device_t *m_sound;
|
// device_t *m_sound;
|
||||||
device_t *m_cart;
|
|
||||||
// emu_timer *m_irq_timer;
|
// emu_timer *m_irq_timer;
|
||||||
memory_bank *m_prg_bank_mem[5];
|
memory_bank *m_prg_bank_mem[5];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/*----------- defined in machine/nes.c -----------*/
|
/*----------- defined in machine/nes.c -----------*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef __MMC_H
|
#ifndef __MMC_H
|
||||||
#define __MMC_H
|
#define __MMC_H
|
||||||
|
|
||||||
|
#include "video/ppu2c0x.h"
|
||||||
|
|
||||||
/* Boards */
|
/* Boards */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@ -109,7 +111,7 @@ enum
|
|||||||
|
|
||||||
// these are used to setup the proper PCB ID, for each supported type of files
|
// these are used to setup the proper PCB ID, for each supported type of files
|
||||||
int nes_get_pcb_id(running_machine &machine, const char *feature); // for softlist
|
int nes_get_pcb_id(running_machine &machine, const char *feature); // for softlist
|
||||||
void unif_mapr_setup(running_machine &machine, const char *board); // for UNIF files
|
void unif_mapr_setup(const char *board, int *pcb_id, int *battery, int *prgram, int *vram_chunks); // for UNIF files
|
||||||
int nes_get_mmc_id(running_machine &machine, int mapper); // for iNES files
|
int nes_get_mmc_id(running_machine &machine, int mapper); // for iNES files
|
||||||
|
|
||||||
// these are used to setup handlers and callbacks necessary to the emulation (resp. at start and reset)
|
// these are used to setup handlers and callbacks necessary to the emulation (resp. at start and reset)
|
||||||
@ -610,6 +612,4 @@ public:
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -209,24 +209,6 @@ READ8_MEMBER(nes_state::nes_nt_r)
|
|||||||
return m_nt_page[page].access[offset & 0x3ff];
|
return m_nt_page[page].access[offset & 0x3ff];
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(nes_state::nes_low_mapper_w)
|
|
||||||
{
|
|
||||||
if (!m_mmc_write_low.isnull())
|
|
||||||
(m_mmc_write_low)(space, offset, data, mem_mask);
|
|
||||||
else
|
|
||||||
logerror("Unimplemented LOW mapper write, offset: %04x, data: %02x\n", offset + 0x4100, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
READ8_MEMBER(nes_state::nes_low_mapper_r)
|
|
||||||
{
|
|
||||||
if (!m_mmc_read_low.isnull())
|
|
||||||
return (m_mmc_read_low)(space, offset, mem_mask);
|
|
||||||
else
|
|
||||||
logerror("Unimplemented LOW mapper read, offset: %04x\n", offset + 0x4100);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
|
|
||||||
Helpers to handle MMC
|
Helpers to handle MMC
|
||||||
|
1231
src/mess/machine/nes_slot.c
Normal file
1231
src/mess/machine/nes_slot.c
Normal file
File diff suppressed because it is too large
Load Diff
230
src/mess/machine/nes_slot.h
Normal file
230
src/mess/machine/nes_slot.h
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
#ifndef __NES_SLOT_H__
|
||||||
|
#define __NES_SLOT_H__
|
||||||
|
|
||||||
|
#include "includes/nes_mmc.h"
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
TYPE DEFINITIONS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
// ======================> nes_cart_interface
|
||||||
|
|
||||||
|
struct nes_cart_interface
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> device_nes_cart_interface
|
||||||
|
|
||||||
|
class device_nes_cart_interface : public device_slot_card_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
device_nes_cart_interface(const machine_config &mconfig, device_t &device);
|
||||||
|
virtual ~device_nes_cart_interface();
|
||||||
|
|
||||||
|
// reading and writing
|
||||||
|
virtual DECLARE_READ8_MEMBER(read_l) { return 0xff; }
|
||||||
|
virtual DECLARE_READ8_MEMBER(read_m) { return 0xff; }
|
||||||
|
virtual DECLARE_READ8_MEMBER(read_h) { return 0xff; }
|
||||||
|
virtual DECLARE_WRITE8_MEMBER(write_l) { }
|
||||||
|
virtual DECLARE_WRITE8_MEMBER(write_m) { }
|
||||||
|
virtual DECLARE_WRITE8_MEMBER(write_h) { }
|
||||||
|
|
||||||
|
virtual void prg_alloc(running_machine &machine, size_t size);
|
||||||
|
virtual void prgram_alloc(running_machine &machine, size_t size);
|
||||||
|
virtual void vrom_alloc(running_machine &machine, size_t size);
|
||||||
|
virtual void vram_alloc(running_machine &machine, size_t size);
|
||||||
|
virtual void battery_alloc(running_machine &machine, size_t size);
|
||||||
|
virtual void mapper_ram_alloc(running_machine &machine, size_t size);
|
||||||
|
virtual void mapper_bram_alloc(running_machine &machine, size_t size);
|
||||||
|
|
||||||
|
virtual int get_mirroring() { return m_mirroring; }
|
||||||
|
virtual void set_mirroring(int val) { m_mirroring = val; }
|
||||||
|
virtual int get_four_screen_vram() { return m_four_screen_vram; }
|
||||||
|
virtual void set_four_screen_vram(int val) { m_four_screen_vram = val; }
|
||||||
|
|
||||||
|
virtual UINT8* get_prg_base() { return m_prg; }
|
||||||
|
virtual UINT8* get_prgram_base() { return m_prgram; }
|
||||||
|
virtual UINT8* get_vrom_base() { return m_vrom; }
|
||||||
|
virtual UINT8* get_vram_base() { return m_vram; }
|
||||||
|
virtual UINT8* get_battery_base() { return m_battery; }
|
||||||
|
virtual UINT8* get_mapper_ram_base() { return m_mapper_ram; }
|
||||||
|
virtual UINT8* get_mapper_bram_base() { return m_mapper_bram; }
|
||||||
|
|
||||||
|
virtual UINT32 get_prg_size() { return m_prg_size; }
|
||||||
|
virtual UINT32 get_prgram_size() { return m_prgram_size; }
|
||||||
|
virtual UINT32 get_vrom_size() { return m_vrom_size; }
|
||||||
|
virtual UINT32 get_vram_size() { return m_vram_size; }
|
||||||
|
virtual UINT32 get_battery_size() { return m_battery_size; }
|
||||||
|
virtual UINT32 get_mapper_ram_size() { return m_mapper_ram_size; }
|
||||||
|
virtual UINT32 get_mapper_bram_size() { return m_mapper_bram_size; }
|
||||||
|
|
||||||
|
//private:
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
UINT8 *m_prg;
|
||||||
|
UINT8 *m_prgram;
|
||||||
|
UINT8 *m_vrom;
|
||||||
|
UINT8 *m_vram;
|
||||||
|
UINT8 *m_battery;
|
||||||
|
UINT8 *m_mapper_ram;
|
||||||
|
UINT8 *m_mapper_bram;
|
||||||
|
|
||||||
|
UINT32 m_prg_size;
|
||||||
|
UINT32 m_prgram_size;
|
||||||
|
UINT32 m_vrom_size;
|
||||||
|
UINT32 m_vram_size;
|
||||||
|
UINT32 m_battery_size;
|
||||||
|
UINT32 m_mapper_ram_size;
|
||||||
|
UINT32 m_mapper_bram_size;
|
||||||
|
|
||||||
|
int m_mirroring, m_four_screen_vram;
|
||||||
|
bool m_has_battery, m_has_prgram;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> nes_cart_slot_device
|
||||||
|
|
||||||
|
class base_nes_cart_slot_device : public device_t,
|
||||||
|
public nes_cart_interface,
|
||||||
|
public device_image_interface,
|
||||||
|
public device_slot_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
base_nes_cart_slot_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
virtual ~base_nes_cart_slot_device();
|
||||||
|
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_start();
|
||||||
|
virtual void device_config_complete();
|
||||||
|
|
||||||
|
// image-level overrides
|
||||||
|
virtual bool call_load();
|
||||||
|
virtual void call_unload();
|
||||||
|
virtual bool call_softlist_load(char *swlist, char *swname, rom_entry *start_entry);
|
||||||
|
|
||||||
|
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
|
||||||
|
virtual bool is_readable() const { return 1; }
|
||||||
|
virtual bool is_writeable() const { return 0; }
|
||||||
|
virtual bool is_creatable() const { return 0; }
|
||||||
|
virtual bool must_be_loaded() const { return 1; }
|
||||||
|
virtual bool is_reset_on_load() const { return 0; }
|
||||||
|
virtual const char *image_interface() const { return "nes_cart"; }
|
||||||
|
virtual const char *file_extensions() const { return "nes,unf,unif"; }
|
||||||
|
virtual const option_guide *create_option_guide() const { return NULL; }
|
||||||
|
|
||||||
|
// slot interface overrides
|
||||||
|
virtual const char * get_default_card_software(const machine_config &config, emu_options &options);
|
||||||
|
|
||||||
|
// reading and writing
|
||||||
|
virtual DECLARE_READ8_MEMBER(read_l);
|
||||||
|
virtual DECLARE_READ8_MEMBER(read_m);
|
||||||
|
virtual DECLARE_READ8_MEMBER(read_h);
|
||||||
|
virtual DECLARE_WRITE8_MEMBER(write_l);
|
||||||
|
virtual DECLARE_WRITE8_MEMBER(write_m);
|
||||||
|
virtual DECLARE_WRITE8_MEMBER(write_h);
|
||||||
|
|
||||||
|
int get_pcb_id() { return m_pcb_id; };
|
||||||
|
|
||||||
|
// temporarily here
|
||||||
|
int m_chr_open_bus;
|
||||||
|
int m_ce_mask;
|
||||||
|
int m_ce_state;
|
||||||
|
int m_vrc_ls_prg_a;
|
||||||
|
int m_vrc_ls_prg_b;
|
||||||
|
int m_vrc_ls_chr;
|
||||||
|
int m_crc_hack;
|
||||||
|
|
||||||
|
virtual int get_chr_open_bus() { return m_chr_open_bus; };
|
||||||
|
virtual int get_ce_mask() { return m_ce_mask; };
|
||||||
|
virtual int get_ce_state() { return m_ce_state; };
|
||||||
|
virtual int get_vrc_ls_prg_a() { return m_vrc_ls_prg_a; };
|
||||||
|
virtual int get_vrc_ls_prg_b() { return m_vrc_ls_prg_b; };
|
||||||
|
virtual int get_vrc_ls_chr() { return m_vrc_ls_chr; };
|
||||||
|
virtual int get_crc_hack() { return m_crc_hack; };
|
||||||
|
|
||||||
|
//private:
|
||||||
|
|
||||||
|
device_nes_cart_interface* m_cart;
|
||||||
|
int m_pcb_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ======================> nes_cart_slot_device
|
||||||
|
|
||||||
|
class nes_cart_slot_device : public base_nes_cart_slot_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
nes_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
virtual bool must_be_loaded() const { return 1; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> fc_cart_slot_device
|
||||||
|
|
||||||
|
class fc_cart_slot_device : public base_nes_cart_slot_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
fc_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
virtual bool must_be_loaded() const { return 0; }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
extern const device_type NES_CART_SLOT;
|
||||||
|
extern const device_type FC_CART_SLOT; // same but not mandatory
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
DEVICE CONFIGURATION MACROS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#define MCFG_NES_CARTRIDGE_ADD(_tag,_config,_slot_intf,_def_slot,_def_inp) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, NES_CART_SLOT, 0) \
|
||||||
|
MCFG_DEVICE_CONFIG(_config) \
|
||||||
|
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
||||||
|
|
||||||
|
#define MCFG_FC_CARTRIDGE_ADD(_tag,_config,_slot_intf,_def_slot,_def_inp) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, FC_CART_SLOT, 0) \
|
||||||
|
MCFG_DEVICE_CONFIG(_config) \
|
||||||
|
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
||||||
|
|
||||||
|
|
||||||
|
// CART DEVICE [TO BE MOVED TO SEPARATE SOURCE LATER]
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// ======================> nes_rom_device
|
||||||
|
|
||||||
|
class nes_rom_device : public device_t,
|
||||||
|
public device_nes_cart_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
nes_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
nes_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
//protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_start();
|
||||||
|
virtual void device_config_complete() { m_shortname = "nes_rom"; }
|
||||||
|
|
||||||
|
// nescart_interface overrides
|
||||||
|
// virtual DECLARE_READ8_MEMBER(read_l);
|
||||||
|
// virtual DECLARE_READ8_MEMBER(read_m);
|
||||||
|
// virtual DECLARE_READ8_MEMBER(read_h);
|
||||||
|
// virtual DECLARE_WRITE8_MEMBER(write_l);
|
||||||
|
// virtual DECLARE_WRITE8_MEMBER(write_m);
|
||||||
|
// virtual DECLARE_WRITE8_MEMBER(write_h);
|
||||||
|
};
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
extern const device_type NES_ROM;
|
||||||
|
|
||||||
|
#endif
|
@ -158,25 +158,20 @@ const unif *nes_unif_lookup( const char *board )
|
|||||||
|
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
void unif_mapr_setup( running_machine &machine, const char *board )
|
void unif_mapr_setup( const char *board, int *pcb_id, int *battery, int *prgram, int *vram_chunks )
|
||||||
{
|
{
|
||||||
nes_state *state = machine.driver_data<nes_state>();
|
const unif *unif_board = nes_unif_lookup(board);
|
||||||
const unif *unif_board = nes_unif_lookup(board);
|
|
||||||
|
|
||||||
logerror("%s\n", board);
|
|
||||||
|
|
||||||
if (unif_board == NULL)
|
if (unif_board == NULL)
|
||||||
fatalerror("Unknown UNIF board %s.\n", board);
|
fatalerror("Unknown UNIF board %s.\n", board);
|
||||||
|
|
||||||
state->m_pcb_id = unif_board->board_idx;
|
*pcb_id = unif_board->board_idx;
|
||||||
state->m_battery = unif_board->nvwram; // we should implement battery banks based on the size of this...
|
*battery = unif_board->nvwram; // we should implement battery banks based on the size of this...
|
||||||
state->m_battery_size = NES_BATTERY_SIZE; // FIXME: we should allow for smaller battery!
|
*prgram = unif_board->wram; // we should implement WRAM banks based on the size of this...
|
||||||
state->m_prg_ram = unif_board->wram; // we should implement WRAM banks based on the size of this...
|
|
||||||
|
|
||||||
if (unif_board->chrram <= CHRRAM_8)
|
if (unif_board->chrram <= CHRRAM_8)
|
||||||
state->m_vram_chunks = 1;
|
*vram_chunks = 1;
|
||||||
else if (unif_board->chrram == CHRRAM_16)
|
else if (unif_board->chrram == CHRRAM_16)
|
||||||
state->m_vram_chunks = 2;
|
*vram_chunks = 2;
|
||||||
else if (unif_board->chrram == CHRRAM_32)
|
else if (unif_board->chrram == CHRRAM_32)
|
||||||
state->m_vram_chunks = 4;
|
*vram_chunks = 4;
|
||||||
}
|
}
|
||||||
|
@ -1417,6 +1417,7 @@ $(MESSOBJ)/next.a: \
|
|||||||
|
|
||||||
$(MESSOBJ)/nintendo.a: \
|
$(MESSOBJ)/nintendo.a: \
|
||||||
$(MESS_MACHINE)/nes_mmc.o \
|
$(MESS_MACHINE)/nes_mmc.o \
|
||||||
|
$(MESS_MACHINE)/nes_slot.o \
|
||||||
$(MESS_VIDEO)/nes.o \
|
$(MESS_VIDEO)/nes.o \
|
||||||
$(MESS_MACHINE)/nes.o \
|
$(MESS_MACHINE)/nes.o \
|
||||||
$(MESS_DRIVERS)/nes.o \
|
$(MESS_DRIVERS)/nes.o \
|
||||||
|
Loading…
Reference in New Issue
Block a user