bus/a2bus, bus/a2gameio: Moved many class declarations out of headers.

This reduces how frequently the Apple II drivers need to be recompiled
when a random device changes.

Also, this turned up three things that are apparently not hooked up in
the PC Transported card.
This commit is contained in:
Vas Crabb 2021-10-04 02:11:55 +11:00
parent 6de437c2cb
commit 2f42632ae5
33 changed files with 886 additions and 842 deletions

View File

@ -15,9 +15,15 @@
#include "emu.h"
#include "a2arcadebd.h"
#include "video/tms9928a.h"
#include "sound/ay8910.h"
#include "speaker.h"
namespace {
/***************************************************************************
PARAMETERS
***************************************************************************/
@ -27,10 +33,34 @@
#define SCREEN_TAG "screen"
//**************************************************************************
// GLOBAL VARIABLES
// TYPE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_ARCADEBOARD, a2bus_arcboard_device, "a2arcbd", "Third Millenium Engineering Arcade Board")
class a2bus_arcboard_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_arcboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_arcboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
required_device<tms9918a_device> m_tms;
required_device<ay8910_device> m_ay;
};
//-------------------------------------------------
// device_add_mconfig - add device configuration
@ -138,3 +168,12 @@ WRITE_LINE_MEMBER( a2bus_arcboard_device::tms_irq_w )
lower_slot_irq();
}
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_ARCADEBOARD, device_a2bus_card_interface, a2bus_arcboard_device, "a2arcbd", "Third Millenium Engineering Arcade Board")

View File

@ -14,40 +14,8 @@
#pragma once
#include "a2bus.h"
#include "video/tms9928a.h"
#include "sound/ay8910.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_arcboard_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_arcboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_arcboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
required_device<tms9918a_device> m_tms;
required_device<ay8910_device> m_ay;
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_ARCADEBOARD, a2bus_arcboard_device)
// device type declaration
DECLARE_DEVICE_TYPE(A2BUS_ARCADEBOARD, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_A2ARCADEBD_H

View File

@ -35,18 +35,48 @@
#include "logmacro.h"
namespace {
/***************************************************************************
PARAMETERS
***************************************************************************/
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_ECHOII, a2bus_echoii_device, "a2echoii", "Street Electronics Echo II")
#define TMS_TAG "tms5220"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_echoii_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_echoii_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
required_device<tms5220_device> m_tms;
protected:
a2bus_echoii_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
virtual bool take_c800() override;
private:
//DECLARE_WRITE_LINE_MEMBER(tms_irq_callback);
DECLARE_WRITE_LINE_MEMBER(tms_readyq_callback);
uint8_t m_writelatch_data; // 74ls373 latch
bool m_readlatch_flag; // 74c74 1st half
bool m_writelatch_flag; // 74c74 2nd half
};
/***************************************************************************
FUNCTION PROTOTYPES
***************************************************************************/
@ -170,3 +200,12 @@ bool a2bus_echoii_device::take_c800()
{
return false;
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_ECHOII, device_a2bus_card_interface, a2bus_echoii_device, "a2echoii", "Street Electronics Echo II")

View File

@ -14,43 +14,8 @@
#pragma once
#include "a2bus.h"
#include "sound/tms5220.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_echoii_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_echoii_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
required_device<tms5220_device> m_tms;
protected:
a2bus_echoii_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
virtual bool take_c800() override;
private:
//DECLARE_WRITE_LINE_MEMBER(tms_irq_callback);
DECLARE_WRITE_LINE_MEMBER(tms_readyq_callback);
uint8_t m_writelatch_data; // 74ls373 latch
bool m_readlatch_flag; // 74c74 1st half
bool m_writelatch_flag; // 74c74 2nd half
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_ECHOII, a2bus_echoii_device)
// device type declaration
DECLARE_DEVICE_TYPE(A2BUS_ECHOII, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_A2ECHOII_H

View File

@ -11,9 +11,17 @@
#include "emu.h"
#include "a2mockingboard.h"
#include "machine/6522via.h"
#include "sound/ay8910.h"
#include "sound/tms5220.h"
#include "sound/votrax.h"
#include "speaker.h"
namespace {
/***************************************************************************
PARAMETERS
***************************************************************************/
@ -27,12 +35,112 @@
#define E2P_TMS_TAG "tms5220"
//**************************************************************************
// GLOBAL VARIABLES
// TYPE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_MOCKINGBOARD, a2bus_mockingboard_device, "a2mockbd", "Sweet Micro Systems Mockingboard Sound/Speech I")
DEFINE_DEVICE_TYPE(A2BUS_PHASOR, a2bus_phasor_device, "a2phasor", "Applied Engineering Phasor")
DEFINE_DEVICE_TYPE(A2BUS_ECHOPLUS, a2bus_echoplus_device, "a2echop", "Street Electronics Echo Plus")
class a2bus_ayboard_device:
public device_t,
public device_a2bus_card_interface
{
public:
DECLARE_WRITE_LINE_MEMBER( via1_irq_w );
DECLARE_WRITE_LINE_MEMBER( via2_irq_w );
u8 via1_in_a() { return m_porta1; }
u8 via2_in_a() { return m_porta2; }
void via1_out_a(u8 data);
virtual void via1_out_b(u8 data);
void via2_out_a(u8 data);
virtual void via2_out_b(u8 data);
protected:
// construction/destruction
a2bus_ayboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual u8 read_c0nx(u8 offset) override { return 0xff; }
virtual void write_c0nx(u8 offset, u8 data) override { }
virtual u8 read_cnxx(u8 offset) override;
virtual void write_cnxx(u8 offset, u8 data) override;
void add_common_devices(machine_config &config);
required_device<via6522_device> m_via1;
optional_device<via6522_device> m_via2;
required_device<ay8913_device> m_ay1;
required_device<ay8913_device> m_ay2;
u8 m_porta1;
u8 m_porta2;
};
class a2bus_mockingboard_device : public a2bus_ayboard_device
{
public:
a2bus_mockingboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual void via1_out_b(u8 data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_reset() override;
required_device<votrax_sc01_device> m_sc01;
private:
DECLARE_WRITE_LINE_MEMBER(write_via1_cb2);
u8 m_portb1;
int m_last_cb2_state;
};
class a2bus_phasor_device : public a2bus_ayboard_device
{
public:
a2bus_phasor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
void via1_out_b(u8 data) override;
void via2_out_b(u8 data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual u8 read_c0nx(u8 offset) override;
virtual void write_c0nx(u8 offset, u8 data) override;
virtual u8 read_cnxx(u8 offset) override;
virtual void write_cnxx(u8 offset, u8 data) override;
required_device<ay8913_device> m_ay3;
required_device<ay8913_device> m_ay4;
private:
void set_clocks();
bool m_native;
};
class a2bus_echoplus_device : public a2bus_ayboard_device
{
public:
a2bus_echoplus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void via1_out_b(u8 data) override;
virtual u8 read_c0nx(u8 offset) override;
virtual void write_c0nx(u8 offset, u8 data) override;
virtual u8 read_cnxx(u8 offset) override;
virtual void write_cnxx(u8 offset, u8 data) override;
required_device<tms5220_device> m_tms;
private:
u8 m_last_cnxx_addr;
};
//-------------------------------------------------
// device_add_mconfig - add device configuration
@ -617,3 +725,14 @@ void a2bus_mockingboard_device::via1_out_b(u8 data)
}
}
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_MOCKINGBOARD, device_a2bus_card_interface, a2bus_mockingboard_device, "a2mockbd", "Sweet Micro Systems Mockingboard Sound/Speech I")
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_PHASOR, device_a2bus_card_interface, a2bus_phasor_device, "a2phasor", "Applied Engineering Phasor")
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_ECHOPLUS, device_a2bus_card_interface, a2bus_echoplus_device, "a2echop", "Street Electronics Echo Plus")

View File

@ -12,122 +12,10 @@
#define MAME_BUS_A2BUS_A2MOCKINGBOARD_H
#include "a2bus.h"
#include "machine/6522via.h"
#include "sound/ay8910.h"
#include "sound/tms5220.h"
#include "sound/votrax.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_ayboard_device:
public device_t,
public device_a2bus_card_interface
{
public:
DECLARE_WRITE_LINE_MEMBER( via1_irq_w );
DECLARE_WRITE_LINE_MEMBER( via2_irq_w );
u8 via1_in_a() { return m_porta1; }
u8 via2_in_a() { return m_porta2; }
void via1_out_a(u8 data);
virtual void via1_out_b(u8 data);
void via2_out_a(u8 data);
virtual void via2_out_b(u8 data);
protected:
// construction/destruction
a2bus_ayboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual u8 read_c0nx(u8 offset) override { return 0xff; }
virtual void write_c0nx(u8 offset, u8 data) override { }
virtual u8 read_cnxx(u8 offset) override;
virtual void write_cnxx(u8 offset, u8 data) override;
void add_common_devices(machine_config &config);
required_device<via6522_device> m_via1;
optional_device<via6522_device> m_via2;
required_device<ay8913_device> m_ay1;
required_device<ay8913_device> m_ay2;
u8 m_porta1;
u8 m_porta2;
};
class a2bus_mockingboard_device : public a2bus_ayboard_device
{
public:
a2bus_mockingboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual void via1_out_b(u8 data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_reset() override;
required_device<votrax_sc01_device> m_sc01;
private:
DECLARE_WRITE_LINE_MEMBER(write_via1_cb2);
u8 m_portb1;
int m_last_cb2_state;
};
class a2bus_phasor_device : public a2bus_ayboard_device
{
public:
a2bus_phasor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
void via1_out_b(u8 data) override;
void via2_out_b(u8 data) override;
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual u8 read_c0nx(u8 offset) override;
virtual void write_c0nx(u8 offset, u8 data) override;
virtual u8 read_cnxx(u8 offset) override;
virtual void write_cnxx(u8 offset, u8 data) override;
required_device<ay8913_device> m_ay3;
required_device<ay8913_device> m_ay4;
private:
void set_clocks();
bool m_native;
};
class a2bus_echoplus_device : public a2bus_ayboard_device
{
public:
a2bus_echoplus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void via1_out_b(u8 data) override;
virtual u8 read_c0nx(u8 offset) override;
virtual void write_c0nx(u8 offset, u8 data) override;
virtual u8 read_cnxx(u8 offset) override;
virtual void write_cnxx(u8 offset, u8 data) override;
required_device<tms5220_device> m_tms;
private:
u8 m_last_cnxx_addr;
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_MOCKINGBOARD, a2bus_mockingboard_device)
DECLARE_DEVICE_TYPE(A2BUS_PHASOR, a2bus_phasor_device)
DECLARE_DEVICE_TYPE(A2BUS_ECHOPLUS, a2bus_echoplus_device)
DECLARE_DEVICE_TYPE(A2BUS_MOCKINGBOARD, device_a2bus_card_interface)
DECLARE_DEVICE_TYPE(A2BUS_PHASOR, device_a2bus_card_interface)
DECLARE_DEVICE_TYPE(A2BUS_ECHOPLUS, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_A2MOCKINGBOARD_H

View File

@ -11,15 +11,43 @@
#include "emu.h"
#include "computereyes2.h"
/***************************************************************************
PARAMETERS
***************************************************************************/
#include "imagedev/picture.h"
#include "bitmap.h"
namespace {
//**************************************************************************
// GLOBAL VARIABLES
// TYPE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_COMPUTEREYES2, a2bus_computereyes2_device, "a2ceyes2", "Digital Vision ComputerEyes/2")
class a2bus_computereyes2_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_computereyes2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_computereyes2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
required_device<picture_image_device> m_picture;
int m_x, m_y, m_cer0, m_cer1, m_cer2;
u8 m_a2_bitmap[280*193];
u8 m_threshold;
bool m_bActive;
};
/***************************************************************************
FUNCTION PROTOTYPES
@ -230,3 +258,12 @@ void a2bus_computereyes2_device::write_c0nx(uint8_t offset, uint8_t data)
break;
}
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_COMPUTEREYES2, device_a2bus_card_interface, a2bus_computereyes2_device, "a2ceyes2", "Digital Vision ComputerEyes/2")

View File

@ -14,41 +14,8 @@
#pragma once
#include "a2bus.h"
#include "bitmap.h"
#include "imagedev/picture.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_computereyes2_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_computereyes2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_computereyes2_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
required_device<picture_image_device> m_picture;
int m_x, m_y, m_cer0, m_cer1, m_cer2;
u8 m_a2_bitmap[280*193];
u8 m_threshold;
bool m_bActive;
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_COMPUTEREYES2, a2bus_computereyes2_device)
// device type declaration
DECLARE_DEVICE_TYPE(A2BUS_COMPUTEREYES2, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_COMPEYES2_H

View File

@ -13,6 +13,11 @@
#include "emu.h"
#include "ezcgi.h"
#include "video/tms9928a.h"
#include "video/v9938.h"
namespace {
/***************************************************************************
PARAMETERS
@ -22,12 +27,83 @@
#define SCREEN_TAG "screen"
//**************************************************************************
// GLOBAL VARIABLES
// TYPE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_EZCGI, a2bus_ezcgi_device, "a2ezcgi", "E-Z Color Graphics Interface")
DEFINE_DEVICE_TYPE(A2BUS_EZCGI_9938, a2bus_ezcgi_9938_device, "a2ezcgi3", "E-Z Color Graphics Interface (TMS9938)")
DEFINE_DEVICE_TYPE(A2BUS_EZCGI_9958, a2bus_ezcgi_9958_device, "a2ezcgi5", "E-Z Color Graphics Interface (TMS9958)")
class a2bus_ezcgi_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ezcgi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_ezcgi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
required_device<tms9918a_device> m_tms;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
};
class a2bus_ezcgi_9938_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ezcgi_9938_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_ezcgi_9938_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
required_device<v9938_device> m_tms;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
};
class a2bus_ezcgi_9958_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ezcgi_9958_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_ezcgi_9958_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
required_device<v9958_device> m_tms;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
};
#define MSX2_XBORDER_PIXELS 16
#define MSX2_YBORDER_PIXELS 28
@ -287,3 +363,14 @@ WRITE_LINE_MEMBER( a2bus_ezcgi_9958_device::tms_irq_w )
lower_slot_irq();
}
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_EZCGI, device_a2bus_card_interface, a2bus_ezcgi_device, "a2ezcgi", "E-Z Color Graphics Interface")
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_EZCGI_9938, device_a2bus_card_interface, a2bus_ezcgi_9938_device, "a2ezcgi3", "E-Z Color Graphics Interface (TMS9938)")
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_EZCGI_9958, device_a2bus_card_interface, a2bus_ezcgi_9958_device, "a2ezcgi5", "E-Z Color Graphics Interface (TMS9958)")

View File

@ -16,91 +16,10 @@
#pragma once
#include "a2bus.h"
#include "video/tms9928a.h"
#include "video/v9938.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_ezcgi_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ezcgi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_ezcgi_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
required_device<tms9918a_device> m_tms;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
};
class a2bus_ezcgi_9938_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ezcgi_9938_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_ezcgi_9938_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
required_device<v9938_device> m_tms;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
};
class a2bus_ezcgi_9958_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ezcgi_9958_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_ezcgi_9958_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
required_device<v9958_device> m_tms;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_EZCGI, a2bus_ezcgi_device)
DECLARE_DEVICE_TYPE(A2BUS_EZCGI_9938, a2bus_ezcgi_9938_device)
DECLARE_DEVICE_TYPE(A2BUS_EZCGI_9958, a2bus_ezcgi_9958_device)
DECLARE_DEVICE_TYPE(A2BUS_EZCGI, device_a2bus_card_interface)
DECLARE_DEVICE_TYPE(A2BUS_EZCGI_9938, device_a2bus_card_interface)
DECLARE_DEVICE_TYPE(A2BUS_EZCGI_9958, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_A2EZCGI_H

View File

@ -47,15 +47,43 @@
#include "emu.h"
#include "lancegs.h"
/***************************************************************************
PARAMETERS
***************************************************************************/
#include "machine/smc91c9x.h"
#include "machine/i2cmem.h"
namespace {
//**************************************************************************
// GLOBAL VARIABLES
// TYPE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_LANCEGS, a2bus_lancegs_device, "a2lancegs", "///SHH Systeme LANceGS")
class a2bus_lancegs_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_lancegs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_lancegs_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_start() override;
virtual void device_reset() override;
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
required_device<smc91c96_device> m_netinf;
required_device<i2c_24c04_device> m_i2cmem;
bool m_shadow;
DECLARE_WRITE_LINE_MEMBER( netinf_irq_w );
};
//**************************************************************************
// LIVE DEVICE
@ -176,3 +204,12 @@ const tiny_rom_entry *a2bus_lancegs_device::device_rom_region() const
{
return ROM_NAME(lancegs);
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_LANCEGS, device_a2bus_card_interface, a2bus_lancegs_device, "a2lancegs", "///SHH Systeme LANceGS")

View File

@ -12,41 +12,8 @@
#define MAME_BUS_A2BUS_LANCEGS_H
#include "a2bus.h"
#include "machine/smc91c9x.h"
#include "machine/i2cmem.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_lancegs_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_lancegs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_lancegs_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_start() override;
virtual void device_reset() override;
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
required_device<smc91c96_device> m_netinf;
required_device<i2c_24c04_device> m_i2cmem;
bool m_shadow;
DECLARE_WRITE_LINE_MEMBER( netinf_irq_w );
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_LANCEGS, a2bus_lancegs_device)
DECLARE_DEVICE_TYPE(A2BUS_LANCEGS, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_LANCEGS_H

View File

@ -79,17 +79,118 @@
#include "emu.h"
#include "pc_xporter.h"
#include "bus/isa/isa.h"
#include "bus/isa/isa_cards.h"
#include "bus/pc_kbd/keyboards.h"
#include "bus/pc_kbd/pc_kbdc.h"
#include "cpu/nec/nec.h"
#include "machine/am9517a.h"
#include "machine/i8255.h"
#include "machine/ins8250.h"
#include "machine/pic8259.h"
#include "machine/pit8253.h"
#include "sound/spkrdev.h"
#include "speaker.h"
/***************************************************************************
PARAMETERS
***************************************************************************/
namespace {
//**************************************************************************
// GLOBAL VARIABLES
// TYPE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_PCXPORTER, a2bus_pcxporter_device, "a2pcxport", "Applied Engineering PC Transporter")
class a2bus_pcxporter_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_pcxporter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
[[maybe_unused]] uint16_t pc_bios_r(offs_t offset); // TODO: hook up to something?
protected:
a2bus_pcxporter_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
virtual uint8_t read_cnxx(uint8_t offset) override;
virtual void write_cnxx(uint8_t offset, uint8_t data) override;
virtual uint8_t read_c800(uint16_t offset) override;
virtual void write_c800(uint16_t offset, uint8_t data) override;
private:
required_device<v30_device> m_v30;
required_device<pic8259_device> m_pic8259;
required_device<am9517a_device> m_dma8237;
required_device<pit8253_device> m_pit8253;
required_device<speaker_sound_device> m_speaker;
required_device<isa8_device> m_isabus;
optional_device<pc_kbdc_device> m_pc_kbdc;
uint8_t m_u73_q2;
uint8_t m_out1;
int m_dma_channel;
uint8_t m_dma_offset[4];
uint8_t m_pc_spkrdata;
uint8_t m_pit_out2;
bool m_cur_eop;
uint8_t m_nmi_enabled;
uint8_t m_ram[768*1024];
uint8_t m_c800_ram[0x400];
uint8_t m_regs[0x400];
uint32_t m_offset;
address_space *m_pcmem_space, *m_pcio_space;
bool m_reset_during_halt;
uint8_t m_6845_reg;
// interface to the keyboard
DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w );
DECLARE_WRITE_LINE_MEMBER( keyboard_data_w );
DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out1_changed );
DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out2_changed );
DECLARE_WRITE_LINE_MEMBER( pc_dma_hrq_changed );
DECLARE_WRITE_LINE_MEMBER( pc_dma8237_out_eop );
uint8_t pc_dma_read_byte(offs_t offset);
void pc_dma_write_byte(offs_t offset, uint8_t data);
uint8_t pc_dma8237_1_dack_r();
uint8_t pc_dma8237_2_dack_r();
uint8_t pc_dma8237_3_dack_r();
void pc_dma8237_1_dack_w(uint8_t data);
void pc_dma8237_2_dack_w(uint8_t data);
void pc_dma8237_3_dack_w(uint8_t data);
void pc_dma8237_0_dack_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER( pc_dack0_w );
DECLARE_WRITE_LINE_MEMBER( pc_dack1_w );
DECLARE_WRITE_LINE_MEMBER( pc_dack2_w );
DECLARE_WRITE_LINE_MEMBER( pc_dack3_w );
uint8_t kbd_6502_r(offs_t offset);
void kbd_6502_w(offs_t offset, uint8_t data);
[[maybe_unused]] DECLARE_WRITE_LINE_MEMBER( pc_speaker_set_spkrdata ); // TODO: hook up to something?
void pc_page_w(offs_t offset, uint8_t data);
void nmi_enable_w(uint8_t data);
[[maybe_unused]] DECLARE_WRITE_LINE_MEMBER(iochck_w); // TODO: hook up to something?
void pc_select_dma_channel(int channel, bool state);
void pc_io(address_map &map);
void pc_map(address_map &map);
};
void a2bus_pcxporter_device::pc_map(address_map &map)
{
@ -641,3 +742,12 @@ WRITE_LINE_MEMBER( a2bus_pcxporter_device::iochck_w )
if (m_nmi_enabled && !state)
m_v30->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_PCXPORTER, device_a2bus_card_interface, a2bus_pcxporter_device, "a2pcxport", "Applied Engineering PC Transporter")

View File

@ -14,114 +14,8 @@
#pragma once
#include "a2bus.h"
#include "cpu/nec/nec.h"
#include "bus/pc_kbd/keyboards.h"
#include "machine/ins8250.h"
#include "machine/i8255.h"
#include "machine/am9517a.h"
#include "bus/isa/isa.h"
#include "bus/isa/isa_cards.h"
#include "bus/pc_kbd/pc_kbdc.h"
#include "machine/pic8259.h"
#include "machine/pit8253.h"
#include "sound/spkrdev.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_pcxporter_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_pcxporter_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
uint16_t pc_bios_r(offs_t offset);
protected:
a2bus_pcxporter_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
virtual uint8_t read_cnxx(uint8_t offset) override;
virtual void write_cnxx(uint8_t offset, uint8_t data) override;
virtual uint8_t read_c800(uint16_t offset) override;
virtual void write_c800(uint16_t offset, uint8_t data) override;
private:
required_device<v30_device> m_v30;
required_device<pic8259_device> m_pic8259;
required_device<am9517a_device> m_dma8237;
required_device<pit8253_device> m_pit8253;
required_device<speaker_sound_device> m_speaker;
required_device<isa8_device> m_isabus;
optional_device<pc_kbdc_device> m_pc_kbdc;
uint8_t m_u73_q2;
uint8_t m_out1;
int m_dma_channel;
uint8_t m_dma_offset[4];
uint8_t m_pc_spkrdata;
uint8_t m_pit_out2;
bool m_cur_eop;
uint8_t m_nmi_enabled;
uint8_t m_ram[768*1024];
uint8_t m_c800_ram[0x400];
uint8_t m_regs[0x400];
uint32_t m_offset;
address_space *m_pcmem_space, *m_pcio_space;
bool m_reset_during_halt;
uint8_t m_6845_reg;
// interface to the keyboard
DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w );
DECLARE_WRITE_LINE_MEMBER( keyboard_data_w );
DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out1_changed );
DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out2_changed );
DECLARE_WRITE_LINE_MEMBER( pc_dma_hrq_changed );
DECLARE_WRITE_LINE_MEMBER( pc_dma8237_out_eop );
uint8_t pc_dma_read_byte(offs_t offset);
void pc_dma_write_byte(offs_t offset, uint8_t data);
uint8_t pc_dma8237_1_dack_r();
uint8_t pc_dma8237_2_dack_r();
uint8_t pc_dma8237_3_dack_r();
void pc_dma8237_1_dack_w(uint8_t data);
void pc_dma8237_2_dack_w(uint8_t data);
void pc_dma8237_3_dack_w(uint8_t data);
void pc_dma8237_0_dack_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER( pc_dack0_w );
DECLARE_WRITE_LINE_MEMBER( pc_dack1_w );
DECLARE_WRITE_LINE_MEMBER( pc_dack2_w );
DECLARE_WRITE_LINE_MEMBER( pc_dack3_w );
uint8_t kbd_6502_r(offs_t offset);
void kbd_6502_w(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( pc_speaker_set_spkrdata );
void pc_page_w(offs_t offset, uint8_t data);
void nmi_enable_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER(iochck_w);
void pc_select_dma_channel(int channel, bool state);
void pc_io(address_map &map);
void pc_map(address_map &map);
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_PCXPORTER, a2bus_pcxporter_device)
// device type declaration
DECLARE_DEVICE_TYPE(A2BUS_PCXPORTER, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_PC_XPORTER_H

View File

@ -11,21 +11,48 @@
#include "emu.h"
#include "ssbapple.h"
#include "sound/tms5220.h"
#include "speaker.h"
namespace {
/***************************************************************************
PARAMETERS
***************************************************************************/
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_SSBAPPLE, a2bus_ssb_device, "a2ssbapl", "Multitech Industrial SSB Apple speech card")
#define TMS_TAG "tms5220"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_ssb_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ssb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
static constexpr feature_type imperfect_features() { return feature::SOUND; }
required_device<tms5220_device> m_tms;
protected:
a2bus_ssb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_cnxx(uint8_t offset) override;
virtual void write_cnxx(uint8_t offset, uint8_t data) override;
virtual bool take_c800() override;
};
/***************************************************************************
FUNCTION PROTOTYPES
***************************************************************************/
@ -85,3 +112,12 @@ void a2bus_ssb_device::write_cnxx(uint8_t offset, uint8_t data)
{
m_tms->data_w(data);
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_SSBAPPLE, device_a2bus_card_interface, a2bus_ssb_device, "a2ssbapl", "Multitech Industrial SSB Apple speech card")

View File

@ -14,37 +14,8 @@
#pragma once
#include "a2bus.h"
#include "sound/tms5220.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_ssb_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ssb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
static constexpr feature_type imperfect_features() { return feature::SOUND; }
required_device<tms5220_device> m_tms;
protected:
a2bus_ssb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_cnxx(uint8_t offset) override;
virtual void write_cnxx(uint8_t offset, uint8_t data) override;
virtual bool take_c800() override;
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_SSBAPPLE, a2bus_ssb_device)
// device type declaration
DECLARE_DEVICE_TYPE(A2BUS_SSBAPPLE, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_A2SSBAPPLE_H

View File

@ -10,10 +10,16 @@
#include "emu.h"
#include "ssprite.h"
#include "sound/ay8910.h"
#include "sound/tms5220.h"
#include "video/tms9928a.h"
#include "speaker.h"
namespace {
/***************************************************************************
PARAMETERS
***************************************************************************/
@ -24,10 +30,35 @@
#define SCREEN_TAG "screen"
//**************************************************************************
// GLOBAL VARIABLES
// TYPE DEFINITIONS
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_SSPRITE, a2bus_ssprite_device, "a2ssprite", "Synetix SuperSprite")
class a2bus_ssprite_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ssprite_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_ssprite_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
required_device<tms9918a_device> m_tms;
required_device<ay8910_device> m_ay;
required_device<tms5220_device> m_tms5220;
};
//-------------------------------------------------
// device_add_mconfig - add device configuration
@ -141,3 +172,12 @@ WRITE_LINE_MEMBER( a2bus_ssprite_device::tms_irq_w )
else
lower_slot_irq();
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_SSPRITE, device_a2bus_card_interface, a2bus_ssprite_device, "a2ssprite", "Synetix SuperSprite")

View File

@ -15,42 +15,8 @@
#pragma once
#include "a2bus.h"
#include "video/tms9928a.h"
#include "sound/ay8910.h"
#include "sound/tms5220.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_ssprite_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_ssprite_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_ssprite_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
DECLARE_WRITE_LINE_MEMBER( tms_irq_w );
required_device<tms9918a_device> m_tms;
required_device<ay8910_device> m_ay;
required_device<tms5220_device> m_tms5220;
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_SSPRITE, a2bus_ssprite_device)
DECLARE_DEVICE_TYPE(A2BUS_SSPRITE, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_SSPRITE_H

View File

@ -11,64 +11,57 @@
#include "emu.h"
#include "uthernet.h"
/***************************************************************************
PARAMETERS
***************************************************************************/
#include "machine/cs8900a.h"
namespace {
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_uthernet_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_uthernet_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
a2bus_uthernet_device(mconfig, A2BUS_UTHERNET, tag, owner, clock)
{
}
protected:
a2bus_uthernet_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
device_a2bus_card_interface(mconfig, *this),
m_netinf(*this, "cs8900a")
{
}
virtual void device_add_mconfig(machine_config &config) override
{
CS8900A(config, m_netinf, 20_MHz_XTAL); // see CS8900A data sheet sec 3.13
}
virtual void device_start() override { }
virtual void device_reset() override { }
// read_c0nx - called for reads from this card's c0nx space
virtual uint8_t read_c0nx(uint8_t offset) override { return m_netinf->read(offset); }
// write_c0nx - called for writes to this card's c0nx space
virtual void write_c0nx(uint8_t offset, uint8_t data) override { m_netinf->write(offset,data); }
private:
required_device<cs8900a_device> m_netinf;
};
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
DEFINE_DEVICE_TYPE(A2BUS_UTHERNET, a2bus_uthernet_device, "a2uthernet", "a2RetroSystems Uthernet")
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
a2bus_uthernet_device::a2bus_uthernet_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
a2bus_uthernet_device(mconfig, A2BUS_UTHERNET, tag, owner, clock)
{
}
a2bus_uthernet_device::a2bus_uthernet_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, type, tag, owner, clock),
device_a2bus_card_interface(mconfig, *this),
m_netinf(*this, "cs8900a")
{
}
void a2bus_uthernet_device::device_add_mconfig(machine_config &config)
{
CS8900A(config, m_netinf, 20_MHz_XTAL); // see CS8900A data sheet sec 3.13
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void a2bus_uthernet_device::device_start()
{
}
void a2bus_uthernet_device::device_reset()
{
}
/*-------------------------------------------------
read_c0nx - called for reads from this card's c0nx space
-------------------------------------------------*/
uint8_t a2bus_uthernet_device::read_c0nx(uint8_t offset)
{
return m_netinf->read(offset);
}
/*-------------------------------------------------
write_c0nx - called for writes to this card's c0nx space
-------------------------------------------------*/
void a2bus_uthernet_device::write_c0nx(uint8_t offset, uint8_t data)
{
m_netinf->write(offset,data);
}
DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_UTHERNET, device_a2bus_card_interface, a2bus_uthernet_device, "a2uthernet", "a2RetroSystems Uthernet")

View File

@ -12,36 +12,8 @@
#define MAME_BUS_A2BUS_UTHERNET_H
#include "a2bus.h"
#include "machine/cs8900a.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class a2bus_uthernet_device:
public device_t,
public device_a2bus_card_interface
{
public:
// construction/destruction
a2bus_uthernet_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
a2bus_uthernet_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_reset() override;
virtual uint8_t read_c0nx(uint8_t offset) override;
virtual void write_c0nx(uint8_t offset, uint8_t data) override;
private:
required_device<cs8900a_device> m_netinf;
};
// device type definition
DECLARE_DEVICE_TYPE(A2BUS_UTHERNET, a2bus_uthernet_device)
// device type declaration
DECLARE_DEVICE_TYPE(A2BUS_UTHERNET, device_a2bus_card_interface)
#endif // MAME_BUS_A2BUS_UTHERNET_H

View File

@ -9,12 +9,40 @@
#include "emu.h"
#include "bus/a2gameio/computereyes.h"
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
#include "imagedev/picture.h"
// device type definition
DEFINE_DEVICE_TYPE(APPLE2_COMPUTEREYES, apple2_compeyes_device, "a2ceyes", "Digital Vision ComputerEyes")
#include "bitmap.h"
namespace {
// ======================> apple2_compeyes_device
class apple2_compeyes_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_compeyes_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_reset() override;
// device_a2gameio_interface overrides
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw1_r) override;
virtual DECLARE_WRITE_LINE_MEMBER(an0_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an1_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an2_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an3_w) override;
private:
required_device<picture_image_device> m_picture;
int m_x, m_y, m_an1, m_an2, m_an3, m_level;
u8 m_a2_bitmap[280*192];
};
//**************************************************************************
// DEVICE IMPLEMENTATION
@ -120,3 +148,13 @@ WRITE_LINE_MEMBER(apple2_compeyes_device::an3_w)
m_an3 = state;
m_level = (128 * m_an2) + (64 * m_an1) + (32 * m_an3);
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
DEFINE_DEVICE_TYPE_PRIVATE(APPLE2_COMPUTEREYES, device_a2gameio_interface, apple2_compeyes_device, "a2ceyes", "Digital Vision ComputerEyes")

View File

@ -12,38 +12,8 @@
#pragma once
#include "bus/a2gameio/gameio.h"
#include "bitmap.h"
#include "imagedev/picture.h"
// ======================> apple2_compeyes_device
class apple2_compeyes_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_compeyes_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_reset() override;
// device_a2gameio_interface overrides
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw1_r) override;
virtual DECLARE_WRITE_LINE_MEMBER(an0_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an1_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an2_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an3_w) override;
private:
required_device<picture_image_device> m_picture;
int m_x, m_y, m_an1, m_an2, m_an3, m_level;
u8 m_a2_bitmap[280*192];
};
// device type declaration
DECLARE_DEVICE_TYPE(APPLE2_COMPUTEREYES, apple2_compeyes_device)
DECLARE_DEVICE_TYPE(APPLE2_COMPUTEREYES, device_a2gameio_interface)
#endif // MAME_BUS_A2GAMEIO_COMPEYES_H

View File

@ -10,12 +10,33 @@
#include "emu.h"
#include "bus/a2gameio/gizmo.h"
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
DEFINE_DEVICE_TYPE(APPLE2_GIZMO, apple2_gizmo_device, "a2gizmo", "HAL Labs Gizmo")
namespace {
// ======================> apple2_gizmo_device
class apple2_gizmo_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_gizmo_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
// device_a2gameio_interface overrides
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_WRITE_LINE_MEMBER(an0_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an1_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an2_w) override;
private:
// input ports
required_ioport m_player1;
int m_an0, m_an1, m_an2;
};
//**************************************************************************
// INPUT PORTS
@ -73,3 +94,13 @@ WRITE_LINE_MEMBER(apple2_gizmo_device::an2_w)
{
m_an2 = state;
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
DEFINE_DEVICE_TYPE_PRIVATE(APPLE2_GIZMO, device_a2gameio_interface, apple2_gizmo_device, "a2gizmo", "HAL Labs Gizmo")

View File

@ -14,32 +14,7 @@
#include "bus/a2gameio/gameio.h"
// ======================> apple2_gizmo_device
class apple2_gizmo_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_gizmo_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
// device_a2gameio_interface overrides
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_WRITE_LINE_MEMBER(an0_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an1_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an2_w) override;
private:
// input ports
required_ioport m_player1;
int m_an0, m_an1, m_an2;
};
// device type declaration
DECLARE_DEVICE_TYPE(APPLE2_GIZMO, apple2_gizmo_device)
DECLARE_DEVICE_TYPE(APPLE2_GIZMO, device_a2gameio_interface)
#endif // MAME_BUS_A2GAMEIO_GIZMO_H

View File

@ -16,20 +16,34 @@
#include "emu.h"
#include "bus/a2gameio/joyport.h"
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
DEFINE_DEVICE_TYPE(APPLE2_JOYPORT, apple2_joyport_device, "a2joyprt", "Sirius JoyPort")
namespace {
//**************************************************************************
// PARAMETERS
//**************************************************************************
// ======================> apple2_joyport_device
#define JOYSTICK_DELTA 80
#define JOYSTICK_SENSITIVITY 50
#define JOYSTICK_AUTOCENTER 80
class apple2_joyport_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_joyport_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
// device_a2gameio_interface overrides
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw1_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw2_r) override;
virtual DECLARE_WRITE_LINE_MEMBER(an0_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an1_w) override;
private:
// input ports
required_ioport m_player1, m_player2;
int m_an0, m_an1;
};
//**************************************************************************
// INPUT PORTS
@ -104,3 +118,13 @@ WRITE_LINE_MEMBER(apple2_joyport_device::an1_w)
{
m_an1 = state;
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
DEFINE_DEVICE_TYPE_PRIVATE(APPLE2_JOYPORT, device_a2gameio_interface, apple2_joyport_device, "a2joyprt", "Sirius JoyPort")

View File

@ -13,33 +13,7 @@
#include "bus/a2gameio/gameio.h"
// ======================> apple2_joyport_device
class apple2_joyport_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_joyport_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
// device_a2gameio_interface overrides
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw1_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw2_r) override;
virtual DECLARE_WRITE_LINE_MEMBER(an0_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(an1_w) override;
private:
// input ports
required_ioport m_player1, m_player2;
int m_an0, m_an1;
};
// device type declaration
DECLARE_DEVICE_TYPE(APPLE2_JOYPORT, apple2_joyport_device)
DECLARE_DEVICE_TYPE(APPLE2_JOYPORT, device_a2gameio_interface)
#endif // MAME_BUS_A2GAMEIO_JOYPORT_H

View File

@ -9,12 +9,37 @@
#include "emu.h"
#include "bus/a2gameio/joystick.h"
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
namespace {
// device type definition
DEFINE_DEVICE_TYPE(APPLE2_JOYSTICK, apple2_joystick_device, "a2joy", "Apple II analog joysticks")
// ======================> apple2_joystick_device
class apple2_joystick_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_joystick_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
// device_a2gameio_interface overrides
virtual u8 pdl0_r() override;
virtual u8 pdl1_r() override;
virtual u8 pdl2_r() override;
virtual u8 pdl3_r() override;
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw1_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw2_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw3_r) override;
private:
// input ports
required_ioport_array<2> m_joy_x;
required_ioport_array<2> m_joy_y;
required_ioport m_buttons;
};
//**************************************************************************
// PARAMETERS
@ -131,3 +156,13 @@ READ_LINE_MEMBER(apple2_joystick_device::sw3_r)
{
return BIT(m_buttons->read(), 7);
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
DEFINE_DEVICE_TYPE_PRIVATE(APPLE2_JOYSTICK, device_a2gameio_interface, apple2_joystick_device, "a2joy", "Apple II analog joysticks")

View File

@ -13,37 +13,7 @@
#include "bus/a2gameio/gameio.h"
// ======================> apple2_joystick_device
class apple2_joystick_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_joystick_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
// device_a2gameio_interface overrides
virtual u8 pdl0_r() override;
virtual u8 pdl1_r() override;
virtual u8 pdl2_r() override;
virtual u8 pdl3_r() override;
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw1_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw2_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw3_r) override;
private:
// input ports
required_ioport_array<2> m_joy_x;
required_ioport_array<2> m_joy_y;
required_ioport m_buttons;
};
// device type declaration
DECLARE_DEVICE_TYPE(APPLE2_JOYSTICK, apple2_joystick_device)
DECLARE_DEVICE_TYPE(APPLE2_JOYSTICK, device_a2gameio_interface)
#endif // MAME_BUS_A2GAMEIO_JOYSTICK_H

View File

@ -9,12 +9,36 @@
#include "emu.h"
#include "bus/a2gameio/paddles.h"
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
namespace {
// device type definition
DEFINE_DEVICE_TYPE(APPLE2_PADDLES, apple2_paddles_device, "a2pdls", "Apple II paddles")
// ======================> apple2_paddles_device
class apple2_paddles_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_paddles_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
// device_a2gameio_interface overrides
virtual u8 pdl0_r() override;
virtual u8 pdl1_r() override;
virtual u8 pdl2_r() override;
virtual u8 pdl3_r() override;
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw1_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw2_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw3_r) override;
private:
// input ports
required_ioport_array<4> m_pdl;
required_ioport m_buttons;
};
//**************************************************************************
// INPUT PORTS
@ -100,3 +124,13 @@ READ_LINE_MEMBER(apple2_paddles_device::sw3_r)
{
return BIT(m_buttons->read(), 7);
}
} // anonymous namespace
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
// device type definition
DEFINE_DEVICE_TYPE_PRIVATE(APPLE2_PADDLES, device_a2gameio_interface, apple2_paddles_device, "a2pdls", "Apple II paddles")

View File

@ -13,36 +13,7 @@
#include "bus/a2gameio/gameio.h"
// ======================> apple2_paddles_device
class apple2_paddles_device : public device_t, public device_a2gameio_interface
{
public:
// construction/destruction
apple2_paddles_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
protected:
// device-level overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
// device_a2gameio_interface overrides
virtual u8 pdl0_r() override;
virtual u8 pdl1_r() override;
virtual u8 pdl2_r() override;
virtual u8 pdl3_r() override;
virtual DECLARE_READ_LINE_MEMBER(sw0_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw1_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw2_r) override;
virtual DECLARE_READ_LINE_MEMBER(sw3_r) override;
private:
// input ports
required_ioport_array<4> m_pdl;
required_ioport m_buttons;
};
// device type declaration
DECLARE_DEVICE_TYPE(APPLE2_PADDLES, apple2_paddles_device)
DECLARE_DEVICE_TYPE(APPLE2_PADDLES, device_a2gameio_interface)
#endif // MAME_BUS_A2GAMEIO_PADDLES_H

View File

@ -137,22 +137,26 @@ private:
template <ioport_value Signal>
DECLARE_WRITE_LINE_MEMBER( signal_in )
{
m_signals[Signal] = state ? 1 : 0;
state = state ? 1 : 0;
if (m_signals[Signal] != state)
{
m_signals[Signal] = state;
if (Signal == m_sources[RXD]) output_rxd(m_signals[Signal] ^ m_invert[RXD]);
if (Signal == m_sources[DCD]) output_dcd(m_signals[Signal] ^ m_invert[DCD]);
if (Signal == m_sources[DSR]) output_dsr(m_signals[Signal] ^ m_invert[DSR]);
if (Signal == m_sources[RI]) output_ri(m_signals[Signal] ^ m_invert[RI]);
if (Signal == m_sources[SI]) output_si(m_signals[Signal] ^ m_invert[SI]);
if (Signal == m_sources[CTS]) output_cts(m_signals[Signal] ^ m_invert[CTS]);
if (Signal == m_sources[RXC]) output_rxc(m_signals[Signal] ^ m_invert[RXC]);
if (Signal == m_sources[TXC]) output_txc(m_signals[Signal] ^ m_invert[TXC]);
if (Signal == m_sources[RXD]) output_rxd(state ^ m_invert[RXD]);
if (Signal == m_sources[DCD]) output_dcd(state ^ m_invert[DCD]);
if (Signal == m_sources[DSR]) output_dsr(state ^ m_invert[DSR]);
if (Signal == m_sources[RI]) output_ri(state ^ m_invert[RI]);
if (Signal == m_sources[SI]) output_si(state ^ m_invert[SI]);
if (Signal == m_sources[CTS]) output_cts(state ^ m_invert[CTS]);
if (Signal == m_sources[RXC]) output_rxc(state ^ m_invert[RXC]);
if (Signal == m_sources[TXC]) output_txc(state ^ m_invert[TXC]);
if (Signal == m_sources[TXD]) m_dce_port->write_txd(m_signals[Signal] ^ m_invert[TXD]);
if (Signal == m_sources[DTR]) m_dce_port->write_dtr(m_signals[Signal] ^ m_invert[DTR]);
if (Signal == m_sources[RTS]) m_dce_port->write_rts(m_signals[Signal] ^ m_invert[RTS]);
if (Signal == m_sources[ETC]) m_dce_port->write_etc(m_signals[Signal] ^ m_invert[ETC]);
if (Signal == m_sources[SPDS]) m_dce_port->write_spds(m_signals[Signal] ^ m_invert[SPDS]);
if (Signal == m_sources[TXD]) m_dce_port->write_txd(state ^ m_invert[TXD]);
if (Signal == m_sources[DTR]) m_dce_port->write_dtr(state ^ m_invert[DTR]);
if (Signal == m_sources[RTS]) m_dce_port->write_rts(state ^ m_invert[RTS]);
if (Signal == m_sources[ETC]) m_dce_port->write_etc(state ^ m_invert[ETC]);
if (Signal == m_sources[SPDS]) m_dce_port->write_spds(state ^ m_invert[SPDS]);
}
}
required_device<rs232_port_device> m_dce_port;

View File

@ -312,8 +312,7 @@ u8 tt5665_device::read(offs_t offset)
void tt5665_device::write(offs_t offset, u8 data)
{
const u8 ch = offset & 1;
// if a command is pending, process the second half
if (m_command[ch] != -1)
if (m_command[ch] != -1) // if a command is pending, process the second half
{
// the chip can only play one voice at a time, but has extra phrase spaces. that's are main difference from MSM 6295.
const int voicemask = (data >> 4) & 3;
@ -353,10 +352,9 @@ void tt5665_device::write(offs_t offset, u8 data)
voice.m_adpcm.reset();
voice.m_volume = s_volume_table[data & 0x0f];
}
// invalid samples go here
else
{
// invalid samples go here
logerror("Requested to play invalid sample %04x\n", sample_ind);
}
}
@ -368,13 +366,11 @@ void tt5665_device::write(offs_t offset, u8 data)
// reset the command
m_command[ch] = -1;
}
// if this is the start of a command, remember the sample number for next time
else if (data & 0x80)
else if (data & 0x80) // if this is the start of a command, remember the sample number for next time
{
m_command[ch] = data & 0x7f;
// otherwise, see if this is a silence command
else
}
else // otherwise, see if this is a silence command
{
// update the stream, then turn it off
m_stream->update();

View File

@ -116,6 +116,8 @@ MIG RAM page 2 $CE02 is the speaker/slot bitfield and $CE03 is the paddle/accele
#define IICP_NEW_IWM (0)
#include "machine/apple2common.h"
#include "cpu/m6502/m6502.h"
#include "cpu/m6502/m65c02.h"
#include "cpu/mcs48/mcs48.h"
@ -123,16 +125,16 @@ MIG RAM page 2 $CE02 is the speaker/slot bitfield and $CE03 is the paddle/accele
#include "imagedev/cassette.h"
#include "imagedev/flopdrv.h"
#include "machine/appldriv.h"
#include "machine/applefdintf.h"
#include "machine/bankdev.h"
#include "machine/ds1315.h"
#include "machine/iwm.h"
#include "machine/kb3600.h"
#include "machine/mos6551.h"
#include "machine/ram.h"
#include "machine/sonydriv.h"
#include "machine/timer.h"
#include "machine/ds1315.h"
#include "machine/apple2common.h"
#include "machine/applefdintf.h"
#include "machine/iwm.h"
#include "sound/spkrdev.h"
#include "bus/a2bus/4play.h"
#include "bus/a2bus/a2alfam2.h"
@ -199,6 +201,9 @@ MIG RAM page 2 $CE02 is the speaker/slot bitfield and $CE03 is the paddle/accele
#include "formats/ap2_dsk.h"
#include "formats/ap_dsk35.h"
namespace {
#define A2_CPU_TAG "maincpu"
#define A2_KBDC_TAG "ay3600"
#define A2_BUS_TAG "a2bus"
@ -5781,6 +5786,9 @@ ROM_START(zijini)
ROM_LOAD( "u40.m2822.bin", 0x000000, 0x000100, CRC(b72a2c70) SHA1(bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4) )
ROM_END
} // anonymous namespace
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
COMP( 1983, apple2e, 0, apple2, apple2e, apple2e, apple2e_state, empty_init, "Apple Computer", "Apple //e", MACHINE_SUPPORTS_SAVE )
COMP( 1983, apple2euk, apple2e, 0, apple2epal, apple2euk, apple2e_state, init_pal, "Apple Computer", "Apple //e (UK)", MACHINE_SUPPORTS_SAVE )