summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/dragon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/dragon.cpp')
-rw-r--r--src/mame/drivers/dragon.cpp132
1 files changed, 95 insertions, 37 deletions
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 )