summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2017-04-17 16:35:19 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2017-04-17 18:49:42 +0100
commit0d471190d72b3a49a2c573efdc72d91b7267ad3b (patch)
treef144ec796ac2239de81d00e730aea8045ab19fc8
parentcfec997fbb1ea8389e5ee257a3ad4cb505ccd84a (diff)
dragon32: Corrected release year and company of Spanish clones
- Added joysticks to all machines - Added floppy sounds dragon200e: Added chargen ROM, not working (possibly mc6847 issue) - Demoted to MACHINE_NOT_WORKING d64plus: Added crtc with chargen ROM and second screen output, not yet hooked up - Demoted to MACHINE_NOT_WORKING dgnalpha: Added older Boot v0.4 ROM - Replaced 5.25" floppy drives with 3.5", and added sounds
-rw-r--r--src/devices/bus/coco/coco_fdc.cpp8
-rw-r--r--src/devices/bus/coco/dragon_fdc.cpp8
-rw-r--r--src/mame/drivers/coco12.cpp5
-rw-r--r--src/mame/drivers/dragon.cpp132
-rw-r--r--src/mame/includes/coco.h1
-rw-r--r--src/mame/includes/dragon.h40
6 files changed, 150 insertions, 44 deletions
diff --git a/src/devices/bus/coco/coco_fdc.cpp b/src/devices/bus/coco/coco_fdc.cpp
index 1af110cacb2..6cb6d6df646 100644
--- a/src/devices/bus/coco/coco_fdc.cpp
+++ b/src/devices/bus/coco/coco_fdc.cpp
@@ -126,9 +126,13 @@ static MACHINE_CONFIG_FRAGMENT(coco_fdc)
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(coco_fdc_device_base, fdc_drq_w))
MCFG_FLOPPY_DRIVE_ADD(WD_TAG ":0", coco_fdc_floppies, "qd", coco_fdc_device_base::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD(WD_TAG ":1", coco_fdc_floppies, "qd", coco_fdc_device_base::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(WD_TAG ":2", coco_fdc_floppies, "qd", coco_fdc_device_base::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(WD_TAG ":3", coco_fdc_floppies, "qd", coco_fdc_device_base::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
+ MCFG_FLOPPY_DRIVE_ADD(WD_TAG ":2", coco_fdc_floppies, nullptr, coco_fdc_device_base::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
+ MCFG_FLOPPY_DRIVE_ADD(WD_TAG ":3", coco_fdc_floppies, nullptr, coco_fdc_device_base::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_DEVICE_ADD(DISTO_TAG, MSM6242, XTAL_32_768kHz)
MCFG_DS1315_ADD(CLOUD9_TAG)
diff --git a/src/devices/bus/coco/dragon_fdc.cpp b/src/devices/bus/coco/dragon_fdc.cpp
index b3b4c272e4e..f6b161ba1f5 100644
--- a/src/devices/bus/coco/dragon_fdc.cpp
+++ b/src/devices/bus/coco/dragon_fdc.cpp
@@ -11,7 +11,7 @@
which mostly uses the same command set with some subtle differences, most
notably the 2797 handles disk side select internally. The Dragon Alpha also
uses the WD2797, however as this is a built in interface and not an external
- cartrige, it is dealt with in the main coco.cpp file.
+ cartridge, it is dealt with in the main coco.cpp file.
The wd's variables are mapped to $FF48-$FF4B on the CoCo and on $FF40-$FF43
on the Dragon. In addition, there is another register
@@ -127,9 +127,13 @@ static MACHINE_CONFIG_FRAGMENT(dragon_fdc)
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(dragon_fdc_device_base, fdc_drq_w))
MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":0", dragon_fdc_device_base, "qd", dragon_fdc_device_base::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":1", dragon_fdc_device_base, "qd", dragon_fdc_device_base::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":2", dragon_fdc_device_base, "", dragon_fdc_device_base::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":3", dragon_fdc_device_base, "", dragon_fdc_device_base::floppy_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
MACHINE_CONFIG_END
@@ -200,7 +204,7 @@ void dragon_fdc_device_base::dskreg_w(uint8_t data)
{
floppy_image_device *floppy = m_floppies[i]->get_device();
if (floppy)
- floppy->mon_w((data && 0x04) && (i == (data & 0x03)) ? CLEAR_LINE : ASSERT_LINE);
+ floppy->mon_w((data & 0x04) && (i == (data & 0x03)) ? CLEAR_LINE : ASSERT_LINE);
}
// manipulate the WD2797
diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp
index 10055494949..407e3323b60 100644
--- a/src/mame/drivers/coco12.cpp
+++ b/src/mame/drivers/coco12.cpp
@@ -96,7 +96,7 @@ INPUT_PORTS_END
// INPUT_PORTS( coco_joystick )
//-------------------------------------------------
-static INPUT_PORTS_START( coco_joystick )
+INPUT_PORTS_START( coco_joystick )
PORT_START(JOYSTICK_RX_TAG)
PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X) PORT_SENSITIVITY(JOYSTICK_SENSITIVITY) PORT_KEYDELTA(JOYSTICK_DELTA) PORT_MINMAX(0x00,0xFF) PORT_CODE_DEC(KEYCODE_4_PAD) PORT_CODE_INC(KEYCODE_6_PAD) PORT_CODE_DEC(JOYCODE_X_LEFT_SWITCH) PORT_CODE_INC(JOYCODE_X_RIGHT_SWITCH) PORT_PLAYER(1) PORT_CONDITION(CTRL_SEL_TAG, 0x0f, EQUALS, 0x01)
PORT_START(JOYSTICK_RY_TAG)
@@ -359,7 +359,8 @@ static MACHINE_CONFIG_START( coco, coco12_state )
MCFG_RAM_EXTRA_OPTIONS("4K,16K,32K")
// software lists
- MCFG_SOFTWARE_LIST_ADD("cart_list","coco_cart")
+ MCFG_SOFTWARE_LIST_ADD("coco_cart_list", "coco_cart")
+ MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("dragon_cart_list", "dragon_cart")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cocoe, coco )
diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp
index 9c267fe9201..5a6e14fa925 100644
--- a/src/mame/drivers/dragon.cpp
+++ b/src/mame/drivers/dragon.cpp
@@ -36,7 +36,6 @@ static ADDRESS_MAP_START( dragon_mem, AS_PROGRAM, 8, dragon_state )
ADDRESS_MAP_END
-
//**************************************************************************
// INPUT PORTS
//**************************************************************************
@@ -52,7 +51,7 @@ ADDRESS_MAP_END
PA1: 8 9 : ; , - . /
PA0: 0 1 2 3 4 5 6 7
*/
-static INPUT_PORTS_START( dragon32 )
+static INPUT_PORTS_START( dragon_keyboard )
PORT_START("row0")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, nullptr) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, nullptr) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
@@ -121,7 +120,18 @@ static INPUT_PORTS_START( dragon32 )
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CHANGED_MEMBER(DEVICE_SELF, dragon_state, keyboard_changed, nullptr) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
INPUT_PORTS_END
-static SLOT_INTERFACE_START(dragon_cart)
+static INPUT_PORTS_START( dragon )
+ PORT_INCLUDE(dragon_keyboard)
+ PORT_INCLUDE(coco_joystick)
+ PORT_INCLUDE(coco_analog_control)
+INPUT_PORTS_END
+
+MC6847_GET_CHARROM_MEMBER( dragon200e_state::char_rom_r )
+{
+ return m_char_rom->base()[(ch * 12 + line) & 0xfff];
+}
+
+SLOT_INTERFACE_START( dragon_cart )
SLOT_INTERFACE("dragon_fdc", DRAGON_FDC)
SLOT_INTERFACE("sdtandy_fdc", SDTANDY_FDC)
SLOT_INTERFACE("pak", COCO_PAK)
@@ -132,13 +142,8 @@ FLOPPY_FORMATS_MEMBER( dragon_alpha_state::dragon_formats )
FLOPPY_DMK_FORMAT
FLOPPY_FORMATS_END
-static SLOT_INTERFACE_START( dragon_floppies )
- SLOT_INTERFACE("sssd", FLOPPY_525_SSSD)
- SLOT_INTERFACE("sd", FLOPPY_525_SD)
- SLOT_INTERFACE("ssdd", FLOPPY_525_SSDD)
- SLOT_INTERFACE("dd", FLOPPY_525_DD)
- SLOT_INTERFACE("ssqd", FLOPPY_525_SSQD)
- SLOT_INTERFACE("qd", FLOPPY_525_QD)
+static SLOT_INTERFACE_START( dragon_alpha_floppies )
+ SLOT_INTERFACE("dd", FLOPPY_35_DD)
SLOT_INTERFACE_END
static MACHINE_CONFIG_START( dragon_base, dragon_state )
@@ -170,6 +175,7 @@ static MACHINE_CONFIG_START( dragon_base, dragon_state )
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_FORMATS(coco_cassette_formats)
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_MUTED)
+ MCFG_CASSETTE_INTERFACE("dragon_cass")
MCFG_DEVICE_ADD(PRINTER_TAG, PRINTER, 0)
@@ -183,6 +189,12 @@ static MACHINE_CONFIG_START( dragon_base, dragon_state )
// sound hardware
MCFG_FRAGMENT_ADD( coco_sound )
+
+ // software lists
+ MCFG_SOFTWARE_LIST_ADD("dragon_cart_list", "dragon_cart")
+ MCFG_SOFTWARE_LIST_ADD("dragon_cass_list", "dragon_cass")
+ MCFG_SOFTWARE_LIST_ADD("dragon_flop_list", "dragon_flop")
+ MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("coco_cart_list", "coco_cart")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( dragon32, dragon_base )
@@ -212,22 +224,46 @@ static MACHINE_CONFIG_DERIVED_CLASS( dragon64, dragon_base, dragon64_state )
// acia
MCFG_DEVICE_ADD("acia", MOS6551, 0)
MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
+
+ // software lists
+ MCFG_SOFTWARE_LIST_ADD("dragon_flex_list", "dragon_flex")
+ MCFG_SOFTWARE_LIST_ADD("dragon_os9_list", "dragon_os9")
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED_CLASS( d64plus, dragon_base, dragon64_state )
+static MACHINE_CONFIG_DERIVED_CLASS( dragon200e, dragon64, dragon200e_state )
+ // video hardware
+ MCFG_DEVICE_MODIFY(VDG_TAG)
+ MCFG_MC6847_CHARROM_CALLBACK(dragon200e_state, char_rom_r)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED_CLASS( d64plus, dragon64, d64plus_state )
// internal ram
- MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_MODIFY(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("128K")
- // cartridge
- MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, dragon_cart, "dragon_fdc")
- MCFG_COCO_CARTRIDGE_CART_CB(WRITELINE(coco_state, cart_w))
- MCFG_COCO_CARTRIDGE_NMI_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_NMI))
- MCFG_COCO_CARTRIDGE_HALT_CB(INPUTLINE(MAINCPU_TAG, INPUT_LINE_HALT))
-
- // acia
- MCFG_DEVICE_ADD("acia", MOS6551, 0)
- MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
+ // video hardware
+ MCFG_SCREEN_ADD("plus_screen", RASTER)
+ MCFG_SCREEN_REFRESH_RATE(50)
+ MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
+ MCFG_SCREEN_SIZE(640, 240)
+ MCFG_SCREEN_VISIBLE_AREA(0, 640-1, 0, 240-1)
+ MCFG_SCREEN_UPDATE_DEVICE("hd6845", hd6845_device, screen_update)
+
+ // crtc
+ MCFG_MC6845_ADD("hd6845", HD6845, "plus_screen", 1000000)
+ MCFG_MC6845_SHOW_BORDER_AREA(false)
+ MCFG_MC6845_CHAR_WIDTH(8)
+
+ // TODO:
+ // $FFE0 6845 control register
+ // $FFE1 6845 data register
+ // $FFE2 memory bank register - swaps lower memory banks between the standard dragon memory and the
+ // three additional memory banks (A, B, C):
+ // 0x00 standard Dragon 32 bank
+ // 0x01 Bank C - 2k RAM (videoram)
+ // 0x02 Bank A - 32k RAM (ram offset 0x10000)
+ // 0x06 Bank B - 32k RAM (ram offset 0x18000)
+ //
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED_CLASS( dgnalpha, dragon_base, dragon_alpha_state )
@@ -250,10 +286,14 @@ static MACHINE_CONFIG_DERIVED_CLASS( dgnalpha, dragon_base, dragon_alpha_state )
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(dragon_alpha_state, fdc_intrq_w))
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(dragon_alpha_state, fdc_drq_w))
- MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":0", dragon_floppies, "qd", dragon_alpha_state::dragon_formats)
- MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":1", dragon_floppies, "qd", dragon_alpha_state::dragon_formats)
- MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":2", dragon_floppies, "qd", dragon_alpha_state::dragon_formats)
- MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":3", dragon_floppies, "qd", dragon_alpha_state::dragon_formats)
+ MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":0", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
+ MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":1", dragon_alpha_floppies, "dd", dragon_alpha_state::dragon_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
+ MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":2", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
+ MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG ":3", dragon_alpha_floppies, nullptr, dragon_alpha_state::dragon_formats)
+ MCFG_FLOPPY_DRIVE_SOUND(true)
// sound hardware
MCFG_SOUND_ADD(AY8912_TAG, AY8912, 1000000)
@@ -266,9 +306,18 @@ static MACHINE_CONFIG_DERIVED_CLASS( dgnalpha, dragon_base, dragon_alpha_state )
MCFG_PIA_WRITEPA_HANDLER(WRITE8(dragon_alpha_state, pia2_pa_w))
MCFG_PIA_IRQA_HANDLER(WRITELINE(dragon_alpha_state, pia2_firq_a))
MCFG_PIA_IRQB_HANDLER(WRITELINE(dragon_alpha_state, pia2_firq_b))
+
+ // software lists
+ MCFG_SOFTWARE_LIST_ADD("dgnalpha_flop_list", "dgnalpha_flop")
+ MCFG_SOFTWARE_LIST_ADD("dragon_flex_list", "dragon_flex")
+ MCFG_SOFTWARE_LIST_ADD("dragon_os9_list", "dragon_os9")
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tanodr64, dragon64 )
+ // video hardware
+ MCFG_SCREEN_MODIFY(SCREEN_TAG)
+ MCFG_SCREEN_REFRESH_RATE(60)
+
// cartridge
MCFG_DEVICE_MODIFY(CARTRIDGE_TAG)
MCFG_DEVICE_SLOT_INTERFACE(dragon_cart, "sdtandy_fdc", false)
@@ -303,14 +352,19 @@ ROM_START(dragon200e)
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD( "ic18_v1.4e.ic34", 0x0000, 0x4000, CRC(95af0a0a) SHA1(628543ee8b47a56df2b2175cfb763c0051517b90))
ROM_LOAD( "ic17_v1.4e.ic37", 0x8000, 0x4000, CRC(48b985df) SHA1(c25632f3c2cfd1af3ee26b2f233a1ce1eccc365d))
- ROM_REGION( 0x1000, "gfx", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "chargen", 0 )
ROM_LOAD( "rom26.ic1", 0x0000, 0x1000, CRC(565724bc) SHA1(da5b756ba2a9c9ecebaa7daa8ba8bfd984d56a6f))
ROM_END
ROM_START(d64plus)
ROM_REGION(0x10000,"maincpu",0)
- ROM_LOAD("d64_1.rom", 0x0000, 0x4000, CRC(60a4634c) SHA1(f119506eaa3b4b70b9aa0dd83761e8cbe043d042))
- ROM_LOAD("d64_2.rom", 0x8000, 0x4000, CRC(17893a42) SHA1(e3c8986bb1d44269c4587b04f1ca27a70b0aaa2e))
+ ROM_LOAD("d64_1.rom", 0x0000, 0x4000, CRC(60a4634c) SHA1(f119506eaa3b4b70b9aa0dd83761e8cbe043d042))
+ ROM_LOAD("d64_2.rom", 0x8000, 0x4000, CRC(17893a42) SHA1(e3c8986bb1d44269c4587b04f1ca27a70b0aaa2e))
+ ROM_REGION(0x0200, "prom", 0)
+ ROM_LOAD("n82s147an.ic12", 0x0000, 0x0200, CRC(92b6728d) SHA1(bcf7c60c4e5608a58587044458d9cacaca4568aa))
+ ROM_REGION(0x2000, "chargen", 0)
+ ROM_LOAD("chargen.ic22", 0x0000, 0x2000, CRC(514f1450) SHA1(956c99fcca1b52e79bb5d91dbafc817c992e324a))
+ ROM_REGION(0x0800, "videoram", ROMREGION_ERASE)
ROM_END
ROM_START(tanodr64)
@@ -321,15 +375,19 @@ ROM_END
ROM_START(dgnalpha)
ROM_REGION(0x10000,"maincpu",0)
- ROM_LOAD("alpha_bt.rom", 0x2000, 0x2000, CRC(c3dab585) SHA1(4a5851aa66eb426e9bb0bba196f1e02d48156068))
+ ROM_DEFAULT_BIOS("boot10")
+ ROM_SYSTEM_BIOS(0, "boot10", "Boot v1.0")
+ ROMX_LOAD("alpha_bt_10.rom", 0x2000, 0x2000, CRC(c3dab585) SHA1(4a5851aa66eb426e9bb0bba196f1e02d48156068), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "boot04", "Boot v0.4")
+ ROMX_LOAD("alpha_bt_04.rom", 0x2000, 0x2000, CRC(d6172b56) SHA1(69ea376dbc7418f69e9e809b448d22a4de012344), ROM_BIOS(2))
ROM_LOAD("alpha_ba.rom", 0x8000, 0x4000, CRC(84f68bf9) SHA1(1983b4fb398e3dd9668d424c666c5a0b3f1e2b69))
ROM_END
-
-COMP( 1982, dragon32, coco, 0, dragon32, dragon32, driver_device, 0, "Dragon Data Ltd", "Dragon 32", 0)
-COMP( 1983, dragon64, coco, 0, dragon64, dragon32, driver_device, 0, "Dragon Data Ltd", "Dragon 64", 0)
-COMP( 1983, dragon200, coco, 0, dragon64, dragon32, driver_device, 0, "Dragon Data Ltd", "Dragon 200", 0)
-COMP( 1983, dragon200e, coco, 0, dragon64, dragon32, driver_device, 0, "Dragon Data Ltd", "Dragon 200-E", 0)
-COMP( 1983, d64plus, coco, 0, d64plus, dragon32, driver_device, 0, "Dragon Data Ltd", "Dragon 64 Plus", 0)
-COMP( 1983, tanodr64, coco, 0, tanodr64, dragon32, driver_device, 0, "Dragon Data Ltd / Tano Ltd", "Tano Dragon 64 (NTSC)", 0)
-COMP( 1984, dgnalpha, coco, 0, dgnalpha, dragon32, driver_device, 0, "Dragon Data Ltd", "Dragon Alpha Prototype", 0)
+/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
+COMP( 1982, dragon32, 0, 0, dragon32, dragon, driver_device, 0, "Dragon Data Ltd", "Dragon 32", 0 )
+COMP( 1983, dragon64, dragon32, 0, dragon64, dragon, driver_device, 0, "Dragon Data Ltd", "Dragon 64", 0 )
+COMP( 1985, dragon200, dragon32, 0, dragon64, dragon, driver_device, 0, "Eurohard S.A.", "Dragon 200", 0 )
+COMP( 1985, dragon200e, dragon32, 0, dragon200e, dragon, driver_device, 0, "Eurohard S.A.", "Dragon 200-E", MACHINE_NOT_WORKING )
+COMP( 1985, d64plus, dragon32, 0, d64plus, dragon, driver_device, 0, "Dragon Data Ltd / Compusense", "Dragon 64 Plus", MACHINE_NOT_WORKING )
+COMP( 1983, tanodr64, dragon32, 0, tanodr64, dragon, driver_device, 0, "Dragon Data Ltd / Tano Ltd", "Tano Dragon 64 (NTSC)", 0 )
+COMP( 1984, dgnalpha, dragon32, 0, dgnalpha, dragon, driver_device, 0, "Dragon Data Ltd", "Dragon Professional (Alpha)", 0 )
diff --git a/src/mame/includes/coco.h b/src/mame/includes/coco.h
index 06920b09a10..17313f4db37 100644
--- a/src/mame/includes/coco.h
+++ b/src/mame/includes/coco.h
@@ -31,6 +31,7 @@
//**************************************************************************
INPUT_PORTS_EXTERN( coco_analog_control );
+INPUT_PORTS_EXTERN( coco_joystick );
INPUT_PORTS_EXTERN( coco_rtc );
INPUT_PORTS_EXTERN( coco_beckerport );
diff --git a/src/mame/includes/dragon.h b/src/mame/includes/dragon.h
index 450f09ffa57..524760616a6 100644
--- a/src/mame/includes/dragon.h
+++ b/src/mame/includes/dragon.h
@@ -17,7 +17,7 @@
#include "includes/coco12.h"
#include "imagedev/printer.h"
#include "machine/mos6551.h"
-
+#include "video/mc6845.h"
//**************************************************************************
@@ -69,4 +69,42 @@ protected:
void page_rom(bool romswitch);
};
+
+/* dragon200e has a character generator */
+class dragon200e_state : public dragon64_state
+{
+public:
+ dragon200e_state(const machine_config &mconfig, device_type type, const char *tag)
+ : dragon64_state(mconfig, type, tag),
+ m_char_rom(*this, "chargen")
+ {
+ }
+
+ MC6847_GET_CHARROM_MEMBER(char_rom_r);
+
+private:
+ required_memory_region m_char_rom;
+};
+
+
+/* d64plus has a HD6845 and character generator */
+class d64plus_state : public dragon64_state
+{
+public:
+ d64plus_state(const machine_config &mconfig, device_type type, const char *tag)
+ : dragon64_state(mconfig, type, tag),
+ m_hd6845(*this, "hd6845"),
+ m_videoram(*this, "videoram"),
+ m_char_rom(*this, "chargen")
+ {
+ }
+
+ MC6847_GET_CHARROM_MEMBER(char_rom_r);
+
+private:
+ required_device<hd6845_device> m_hd6845;
+ required_memory_region m_videoram;
+ required_memory_region m_char_rom;
+};
+
#endif /* __DRAGON__ */