diff options
Diffstat (limited to 'src/mame/drivers/dragon.cpp')
-rw-r--r-- | src/mame/drivers/dragon.cpp | 132 |
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 ) |