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
This commit is contained in:
Nigel Barnes 2017-04-17 16:35:19 +01:00
parent cfec997fbb
commit 0d471190d7
6 changed files with 149 additions and 43 deletions

View File

@ -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)

View File

@ -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

View File

@ -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 )

View File

@ -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))
// 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)
// acia
MCFG_DEVICE_ADD("acia", MOS6551, 0)
MCFG_MOS6551_XTAL(XTAL_1_8432MHz)
// 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 )

View File

@ -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 );

View File

@ -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__ */