summaryrefslogblamecommitdiffstatshomepage
path: root/src/mess/includes/apple2gs.h
blob: dd7f7a975d65c97a5f1c791a01c34fc2c377744b (plain) (tree)



























































































































































                                                                                        
/*****************************************************************************
 *
 * includes/apple2gs.h
 *
 * Apple IIgs
 *
 ****************************************************************************/

#ifndef APPLE2GS_H_
#define APPLE2GS_H_

#include "includes/apple2.h"
#include "sound/es5503.h"
#include "machine/nvram.h"

// IIgs clocks as marked on the schematics
#define APPLE2GS_28M  (XTAL_28_63636MHz) // IIGS master clock
#define APPLE2GS_14M  (APPLE2GS_28M/2)
#define APPLE2GS_7M   (APPLE2GS_28M/4)

// screen dimensions
#define BORDER_LEFT	(32)
#define BORDER_RIGHT	(32)
#define BORDER_TOP	(16)	// (plus bottom)


typedef enum
{
	CLOCKMODE_IDLE,
	CLOCKMODE_TIME,
	CLOCKMODE_INTERNALREGS,
	CLOCKMODE_BRAM1,
	CLOCKMODE_BRAM2
} apple2gs_clock_mode;


typedef enum
{
	ADBSTATE_IDLE,
	ADBSTATE_INCOMMAND,
	ADBSTATE_INRESPONSE
} adbstate_t;

#define IRQ_KBD_SRQ			0x01
#define IRQ_ADB_DATA		0x02
#define IRQ_ADB_MOUSE		0x04
#define IRQ_VGC_SCANLINE	0x08
#define IRQ_VGC_SECOND		0x10
#define IRQ_INTEN_QSECOND	0x20
#define IRQ_INTEN_VBL		0x40
#define IRQ_DOC			    0x80
#define IRQ_SLOT            0x100

void apple2gs_add_irq(running_machine &machine, UINT16 irq_mask);
void apple2gs_remove_irq(running_machine &machine, UINT16 irq_mask);

class apple2gs_state : public apple2_state
{
public:
	apple2gs_state(const machine_config &mconfig, device_type type, const char *tag)
		: apple2_state(mconfig, type, tag),
		m_maincpu(*this, "maincpu"),
        m_es5503(*this, "es5503"),
        m_fdc(*this, "fdc")
        { }

	required_device<cpu_device> m_maincpu;
	required_device<es5503_device> m_es5503;
    required_device<device_t> m_fdc;

	UINT8 *m_slowmem;
	UINT8 m_newvideo;
	UINT16 m_bordercolor;
	UINT8 m_vgcint;
	UINT8 m_langsel;
	UINT8 m_sltromsel;
	UINT8 m_cyareg;
	UINT8 m_inten;
	UINT8 m_intflag;
	UINT8 m_shadow;
	UINT16 m_pending_irqs;
	UINT8 m_mouse_x;
	UINT8 m_mouse_y;
	INT8 m_mouse_dx;
	INT8 m_mouse_dy;
	device_t *m_cur_slot6_image;
	emu_timer *m_scanline_timer;
	emu_timer *m_clock_timer;
	emu_timer *m_qsecond_timer;
	UINT8 m_clock_data;
	UINT8 m_clock_control;
	UINT8 m_clock_read;
	UINT8 m_clock_reg1;
	apple2gs_clock_mode m_clock_mode;
	UINT32 m_clock_curtime;
	seconds_t m_clock_curtime_interval;
	UINT8 m_clock_bram[256];
	adbstate_t m_adb_state;
	UINT8 m_adb_command;
	UINT8 m_adb_mode;
	UINT8 m_adb_kmstatus;
	UINT8 m_adb_latent_result;
	INT32 m_adb_command_length;
	INT32 m_adb_command_pos;
	UINT8 m_adb_command_bytes[8];
	UINT8 m_adb_response_bytes[8];
	UINT8 m_adb_response_length;
	INT32 m_adb_response_pos;
	UINT8 m_adb_memory[0x100];
	int m_adb_address_keyboard;
	int m_adb_address_mouse;
	UINT8 m_sndglu_ctrl;
	int m_sndglu_addr;
	int m_sndglu_dummy_read;
	bitmap_ind16 *m_legacy_gfx;
    bool m_is_rom3;
    UINT8 m_echo_bank;

	DECLARE_DIRECT_UPDATE_MEMBER(apple2gs_opbase);

    READ8_MEMBER( apple2gs_c0xx_r );
    WRITE8_MEMBER( apple2gs_c0xx_w );
    WRITE8_MEMBER( apple2gs_main0400_w );
    WRITE8_MEMBER( apple2gs_aux0400_w );
    WRITE8_MEMBER( apple2gs_main2000_w );
    WRITE8_MEMBER( apple2gs_aux2000_w );
    WRITE8_MEMBER( apple2gs_main4000_w );
    WRITE8_MEMBER( apple2gs_aux4000_w );

    UINT8 adb_read_datareg();
    UINT8 adb_read_kmstatus();

    void apple2gs_refresh_delegates();

    write8_delegate write_delegates_2gs0400[2];
    write8_delegate write_delegates_2gs2000[2];
    write8_delegate write_delegates_2gs4000[2];
};


/*----------- defined in machine/apple2gs.c -----------*/

MACHINE_START( apple2gs );
MACHINE_START( apple2gsr1 );
MACHINE_RESET( apple2gs );

void apple2gs_doc_irq(device_t *device, int state);


/*----------- defined in video/apple2gs.c -----------*/

VIDEO_START( apple2gs );
SCREEN_UPDATE_IND16( apple2gs );


#endif /* APPLE2GS_H_ */