diff options
author | 2012-08-21 10:41:19 +0000 | |
---|---|---|
committer | 2012-08-21 10:41:19 +0000 | |
commit | 7285b359d259b2ae0fdf85096571c386ec8c991a (patch) | |
tree | a027aff57f1a255f9ec6cfd3b68cabe4b6683998 /src/mess/includes/apple2.h | |
parent | 67c425e90757876a6716b7867df30c0149912e74 (diff) |
Merge of MESS sources (no whatsnew)
Diffstat (limited to 'src/mess/includes/apple2.h')
-rw-r--r-- | src/mess/includes/apple2.h | 287 |
1 files changed, 287 insertions, 0 deletions
diff --git a/src/mess/includes/apple2.h b/src/mess/includes/apple2.h new file mode 100644 index 00000000000..ce54dcacd2b --- /dev/null +++ b/src/mess/includes/apple2.h @@ -0,0 +1,287 @@ +/*************************************************************************** + + includes/apple2.h + + Include file to handle emulation of the Apple II series. + +***************************************************************************/ + +#ifndef APPLE2_H_ +#define APPLE2_H_ + +#include "machine/a2bus.h" +#include "machine/a2eauxslot.h" +#include "machine/applefdc.h" +#include "machine/ram.h" + +#define AUXSLOT_TAG "auxbus" + +/*************************************************************************** + SOFTSWITCH VALUES +***************************************************************************/ + +#define VAR_80STORE 0x000001 +#define VAR_RAMRD 0x000002 +#define VAR_RAMWRT 0x000004 +#define VAR_INTCXROM 0x000008 +#define VAR_ALTZP 0x000010 +#define VAR_SLOTC3ROM 0x000020 +#define VAR_80COL 0x000040 +#define VAR_ALTCHARSET 0x000080 +#define VAR_TEXT 0x000100 +#define VAR_MIXED 0x000200 +#define VAR_PAGE2 0x000400 +#define VAR_HIRES 0x000800 +#define VAR_AN0 0x001000 +#define VAR_AN1 0x002000 +#define VAR_AN2 0x004000 +#define VAR_AN3 0x008000 +#define VAR_LCRAM 0x010000 +#define VAR_LCRAM2 0x020000 +#define VAR_LCWRITE 0x040000 +#define VAR_ROMSWITCH 0x080000 +#define VAR_TK2000RAM 0x100000 // ROM/RAM switch for TK2000 + +#define VAR_DHIRES VAR_AN3 + + +/*************************************************************************** + SPECIAL KEYS +***************************************************************************/ + +#define SPECIALKEY_CAPSLOCK 0x01 +#define SPECIALKEY_SHIFT 0x06 +#define SPECIALKEY_CONTROL 0x08 +#define SPECIALKEY_BUTTON0 0x10 /* open apple */ +#define SPECIALKEY_BUTTON1 0x20 /* closed apple */ +#define SPECIALKEY_BUTTON2 0x40 +#define SPECIALKEY_RESET 0x80 + + +/*************************************************************************** + OTHER +***************************************************************************/ + +/* ----------------------------------------------------------------------- + * New Apple II memory manager + * ----------------------------------------------------------------------- */ + +#define APPLE2_MEM_AUX 0x40000000 +#define APPLE2_MEM_SLOT 0x80000000 +#define APPLE2_MEM_ROM 0xC0000000 +#define APPLE2_MEM_FLOATING 0xFFFFFFFF +#define APPLE2_MEM_MASK 0x00FFFFFF + +typedef enum +{ + APPLE_II, // Apple II/II+ + APPLE_IIEPLUS, // Apple IIe/IIc/IIgs/IIc+ + TK2000, // Microdigital TK2000 + LASER128, // Laser 128/128EX/128EX2 + SPACE84 // "Space 84" with flipped text mode +} machine_type_t; + +typedef enum +{ + A2MEM_IO = 0, /* this is always handlers; never banked memory */ + A2MEM_MONO = 1, /* this is a bank where read and write are always in unison */ + A2MEM_DUAL = 2 /* this is a bank where read and write can go different places */ +} bank_disposition_t; + +typedef struct _apple2_meminfo apple2_meminfo; +struct _apple2_meminfo +{ + UINT32 read_mem; + read8_delegate *read_handler; + UINT32 write_mem; + write8_delegate *write_handler; +}; + +typedef struct _apple2_memmap_entry apple2_memmap_entry; +struct _apple2_memmap_entry +{ + offs_t begin; + offs_t end; + void (*get_meminfo)(running_machine &machine, offs_t begin, offs_t end, apple2_meminfo *meminfo); + bank_disposition_t bank_disposition; +}; + +typedef struct _apple2_memmap_config apple2_memmap_config; +struct _apple2_memmap_config +{ + int first_bank; + UINT8 *auxmem; + UINT32 auxmem_length; + const apple2_memmap_entry *memmap; +}; + +class apple2_state : public driver_device +{ +public: + apple2_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_ram(*this, RAM_TAG), + m_a2bus(*this, "a2bus"), + m_a2eauxslot(*this, AUXSLOT_TAG) + { } + + required_device<cpu_device> m_maincpu; + required_device<ram_device> m_ram; + required_device<a2bus_device> m_a2bus; + optional_device<a2eauxslot_device> m_a2eauxslot; + + UINT32 m_flags, m_flags_mask; + INT32 m_a2_cnxx_slot; + UINT32 m_a2_mask; + UINT32 m_a2_set; + int m_a2_speaker_state; + double m_joystick_x1_time; + double m_joystick_y1_time; + double m_joystick_x2_time; + double m_joystick_y2_time; + apple2_memmap_config m_mem_config; + apple2_meminfo *m_current_meminfo; + int m_fdc_diskreg; + unsigned int *m_ay3600_keys; + UINT8 m_keycode; + UINT8 m_keycode_unmodified; + UINT8 m_keywaiting; + UINT8 m_keystilldown; + UINT8 m_keymodreg; + int m_reset_flag; + int m_last_key; + int m_last_key_unmodified; + unsigned int m_time_until_repeat; + const UINT8 *m_a2_videoram; + UINT32 m_a2_videomask; + UINT32 m_old_a2; + int m_fgcolor; + int m_bgcolor; + int m_flash; + int m_alt_charset_value; + UINT16 *m_hires_artifact_map; + UINT16 *m_dhires_artifact_map; + bool m_monochrome_dhr; + int m_inh_slot; + + UINT8 *m_rambase; + + machine_type_t m_machinetype; + + READ8_MEMBER(apple2_c0xx_r); + WRITE8_MEMBER(apple2_c0xx_w); + READ8_MEMBER(apple2_c080_r); + WRITE8_MEMBER(apple2_c080_w); + + READ8_MEMBER ( apple2_c00x_r ); + READ8_MEMBER ( apple2_c01x_r ); + READ8_MEMBER ( apple2_c02x_r ); + READ8_MEMBER ( apple2_c03x_r ); + READ8_MEMBER ( apple2_c05x_r ); + READ8_MEMBER ( apple2_c06x_r ); + READ8_MEMBER ( apple2_c07x_r ); + WRITE8_MEMBER ( apple2_c00x_w ); + WRITE8_MEMBER ( apple2_c01x_w ); + WRITE8_MEMBER ( apple2_c02x_w ); + WRITE8_MEMBER ( apple2_c03x_w ); + WRITE8_MEMBER ( apple2_c05x_w ); + WRITE8_MEMBER ( apple2_c07x_w ); + + WRITE8_MEMBER ( apple2_mainram0400_w ); + WRITE8_MEMBER ( apple2_mainram2000_w ); + WRITE8_MEMBER ( apple2_auxram0400_w ); + WRITE8_MEMBER ( apple2_auxram2000_w ); + + READ8_MEMBER ( apple2_c1xx_r ); + WRITE8_MEMBER ( apple2_c1xx_w ); + READ8_MEMBER ( apple2_c3xx_r ); + WRITE8_MEMBER ( apple2_c3xx_w ); + READ8_MEMBER ( apple2_c4xx_r ); + WRITE8_MEMBER ( apple2_c4xx_w ); + + READ8_MEMBER ( apple2_c800_r ); + WRITE8_MEMBER ( apple2_c800_w ); + READ8_MEMBER ( apple2_ce00_r ); + WRITE8_MEMBER ( apple2_ce00_w ); + + READ8_MEMBER ( apple2_inh_d000_r ); + WRITE8_MEMBER ( apple2_inh_d000_w ); + READ8_MEMBER ( apple2_inh_e000_r ); + WRITE8_MEMBER ( apple2_inh_e000_w ); + + READ8_MEMBER(read_floatingbus); + + READ8_MEMBER(apple2_cfff_r); + WRITE8_MEMBER(apple2_cfff_w); + + void apple2_refresh_delegates(); + + read8_delegate read_delegates_master[4]; + write8_delegate write_delegates_master[3]; + write8_delegate write_delegates_0400[2]; + write8_delegate write_delegates_2000[2]; + read8_delegate rd_c000; + write8_delegate wd_c000; + read8_delegate rd_c080; + write8_delegate wd_c080; + read8_delegate rd_cfff; + write8_delegate wd_cfff; + read8_delegate rd_c800; + write8_delegate wd_c800; + read8_delegate rd_ce00; + write8_delegate wd_ce00; + read8_delegate rd_inh_d000; + write8_delegate wd_inh_d000; + read8_delegate rd_inh_e000; + write8_delegate wd_inh_e000; +}; + + +/*----------- defined in drivers/apple2.c -----------*/ + +INPUT_PORTS_EXTERN( apple2ep ); +PALETTE_INIT( apple2 ); + + +/*----------- defined in machine/apple2.c -----------*/ + +extern const applefdc_interface apple2_fdc_interface; + +void apple2_iwm_setdiskreg(running_machine &machine, UINT8 data); +UINT8 apple2_iwm_getdiskreg(running_machine &machine); + +void apple2_init_common(running_machine &machine); +MACHINE_START( apple2 ); +MACHINE_START( apple2orig ); +MACHINE_START( tk2000 ); +MACHINE_START( laser128 ); +MACHINE_START( space84 ); +UINT8 apple2_getfloatingbusvalue(running_machine &machine); +READ8_HANDLER( apple2_c0xx_r ); +WRITE8_HANDLER( apple2_c0xx_w ); +READ8_HANDLER( apple2_c080_r ); +WRITE8_HANDLER( apple2_c080_w ); + +TIMER_DEVICE_CALLBACK( apple2_interrupt ); + +INT8 apple2_slotram_r(running_machine &machine, int slotnum, int offset); + +void apple2_setvar(running_machine &machine, UINT32 val, UINT32 mask); + +int apple2_pressed_specialkey(running_machine &machine, UINT8 key); + +void apple2_setup_memory(running_machine &machine, const apple2_memmap_config *config); +void apple2_update_memory(running_machine &machine); + + + +/*----------- defined in video/apple2.c -----------*/ + +void apple2_video_start(running_machine &machine, const UINT8 *vram, size_t vram_size, UINT32 ignored_softswitches, int hires_modulo); +VIDEO_START( apple2 ); +VIDEO_START( apple2p ); +VIDEO_START( apple2e ); +SCREEN_UPDATE_IND16( apple2 ); + +#endif /* APPLE2_H_ */ |