mame/src/mess/includes/nes.h
Fabio Priuli af7242fcb4 (MESS) famicom: converted the disk system add-on to be a cart
in the softlist. The official syntax to launch disk games is now
  mess famicom -cart disksys -flop gamename
which corresponds to inserting the RAM expansion cart with
connected the disk drive into the cartslot and the desired disk
in the disk drive (exactly like you would have done with the
real thing). In this way, you cannot mount anymore both a cart and 
a disk in the Family Computer (as in a real unit). 
Users that cannot cope with this limitation and/or with the new 
syntax can still use the famitwin driver (which offers both cart and 
disk options) or the newly added driver fds which emulates a
famicom with the expansion always inserted: in both latter cases
the old syntax
  mess famitwin -flop gamename
will launch the game, as previously. [Fabio Priuli]

(MESS) famicom: fixed disk system IRQ latch clear in Kaettekita
Mario Bros. based on investigations by FHorse. [Fabio Priuli]


Out of whatsnew: For the moment I gave up the original plan to 
also modernize the floppy drive and the disk format. If anyone 
wants to look into these, be my guest :-)
2014-09-11 21:01:45 +00:00

160 lines
4.2 KiB
C++

/*****************************************************************************
nes.h
Nintendo Entertainment System / Famicom
****************************************************************************/
#ifndef NES_H_
#define NES_H_
#include "video/ppu2c0x.h"
#include "bus/nes/nes_slot.h"
#include "bus/nes/nes_carts.h"
#include "sound/nes_apu.h"
#include "imagedev/cassette.h"
/***************************************************************************
CONSTANTS
***************************************************************************/
#define NTSC_CLOCK N2A03_DEFAULTCLOCK /* 1.789772 MHz */
#define PAL_CLOCK (26601712.0/16) /* 1.662607 MHz */
#define NES_BATTERY_SIZE 0x2000
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
struct nes_input
{
UINT32 shift;
UINT32 i0, i1, i2;
};
/*PPU fast banking constants and structures */
#define CHRROM 0
#define CHRRAM 1
/*PPU nametable fast banking constants and structures */
#define CIRAM 0
#define ROM 1
#define EXRAM 2
#define MMC5FILL 3
#define CART_NTRAM 4
#define NES_BATTERY 0
#define NES_WRAM 1
class nes_state : public driver_device
{
public:
enum
{
TIMER_ZAPPER_TICK,
TIMER_LIGHTGUN_TICK
};
nes_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_ppu(*this, "ppu"),
m_sound(*this, "nessound"),
m_cartslot(*this, "nes_slot"),
m_cartslot2(*this, "disk_slot"), // temp hack for famitwin
m_cassette(*this, "tape")
{ }
/* video-related */
int m_last_frame_flip;
/* misc */
ioport_port *m_io_ctrlsel;
ioport_port *m_io_fckey[9];
ioport_port *m_io_subkey[13];
ioport_port *m_io_pad[4];
ioport_port *m_io_powerpad[2];
ioport_port *m_io_mahjong[4];
ioport_port *m_io_ftrainer[4];
ioport_port *m_io_cc_left;
ioport_port *m_io_cc_right;
ioport_port *m_io_zapper1_t;
ioport_port *m_io_zapper1_x;
ioport_port *m_io_zapper1_y;
ioport_port *m_io_zapper2_t;
ioport_port *m_io_zapper2_x;
ioport_port *m_io_zapper2_y;
ioport_port *m_io_paddle;
ioport_port *m_io_paddle_btn;
ioport_port *m_io_exp;
ioport_port *m_io_disksel;
UINT8 *m_vram;
UINT8 *m_ciram; //PPU nametable RAM - external to PPU!
required_device<cpu_device> m_maincpu;
required_device<ppu2c0x_device> m_ppu;
required_device<nesapu_device> m_sound;
optional_device<nes_cart_slot_device> m_cartslot;
optional_device<nes_cart_slot_device> m_cartslot2;
optional_device<cassette_image_device> m_cassette;
int nes_ppu_vidaccess(int address, int data);
void ppu_nmi(int *ppu_regs);
DECLARE_READ8_MEMBER(nes_in0_r);
DECLARE_READ8_MEMBER(nes_in1_r);
DECLARE_WRITE8_MEMBER(nes_in0_w);
DECLARE_WRITE8_MEMBER(nes_in1_w);
DECLARE_READ8_MEMBER(fc_in0_r);
DECLARE_READ8_MEMBER(fc_in1_r);
DECLARE_WRITE8_MEMBER(fc_in0_w);
DECLARE_WRITE8_MEMBER(nes_vh_sprite_dma_w);
virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
virtual void video_reset();
DECLARE_PALETTE_INIT(nes);
UINT32 screen_update_nes(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_famitwin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_READ8_MEMBER(psg_4015_r);
DECLARE_WRITE8_MEMBER(psg_4015_w);
DECLARE_WRITE8_MEMBER(psg_4017_w);
void state_register();
void setup_ioports();
DECLARE_DRIVER_INIT(famicom);
// these are needed until we modernize the FDS controller
DECLARE_MACHINE_START(fds);
DECLARE_MACHINE_START(famitwin);
DECLARE_MACHINE_RESET(famitwin);
void setup_disk(nes_cart_slot_device *slot);
// input related
UINT32 m_pad_latch[4];
UINT8 m_zapper_latch[2][3];
UINT8 m_paddle_latch, m_paddle_btn_latch;
UINT8 m_mjpanel_latch;
UINT8 m_fck_scan, m_fck_mode;
UINT8 m_mic_obstruct;
UINT8 m_powerpad_latch[2];
UINT8 m_ftrainer_scan;
protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
private:
memory_bank *m_prg_bank_mem[5];
};
#endif /* NES_H_ */