From 07d114cd0ec338f9f48ec6ca2971d891d89c494d Mon Sep 17 00:00:00 2001 From: rfka01 Date: Tue, 21 Nov 2017 15:54:53 +0100 Subject: [PATCH 01/35] Add Sanyo MBC-28, Siemens PCD-2, Compaq Portable III and 286 and 486 BIOS versions. --- src/mame/drivers/at.cpp | 231 ++++++++++++++++++++++++++++------------ src/mame/mame.lst | 3 + 2 files changed, 165 insertions(+), 69 deletions(-) diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp index 9937eb98070..b938bec1c30 100644 --- a/src/mame/drivers/at.cpp +++ b/src/mame/drivers/at.cpp @@ -3,7 +3,7 @@ /*************************************************************************** IBM AT Compatibles - + Commodore PC 30-III and PC 40-III ================================= Links: http://www.richardlagendijk.nl/cip/computer/item/pc30iii/en , ftp://ftp.zimmers.net/pub/cbm-pc/firmware/pc30/ @@ -18,6 +18,40 @@ Mass storage: One HD disk drive standard, second drive optional; PC 30-III: 20MB On board: Serial, Parallel, Commodore 1532 Mouse port (MS Bus mouse compatible), Keyboard, Beeper, Floppy (2 devices), AT-IDE (1 device) Options: 80287 +Sanyo MBC-28 +============ +Links: http://www.cc-computerarchiv.de/CC-Archiv/bc-alt/gb-san/gb-san-12_91.html +Form factor: Desktop +CPU: 80386sx-20 +RAM: 1MB - 8MB on board +Mass storage: 1.44MB Floppy disk drive and 80MB IDE hard disk +On board: 2xserial, parallel, bus mouse, keyboard +To-Do: Complains about missing mouse hardware (Bus Mouse), hangs in POST + +Siemens PCD-2 +============= +Links: http://www.z80.eu/siemenspcd2.html , http://www.z80.eu/downloads/Siemens_PCD-2_SW-Monitor-Buchse-Belegung.pdf , https://www.computerwoche.de/a/at-klon-und-lan-ergaenzen-siemens-palette,1166395 +Form Factor: low profile desktop +CPU: 80286-12 on a Tandon supplied slot CPU card +RAM: 1MB - 4MB in four SIMM modules +Mass storage: 1.2MB Floppy disk drive and 20MB or 40MB MFM harddisk +Bus: Vertical passive ISA backplane with six slots +On board: 2xserial, parallel, floppy, keyboard, RTC, MFM harddisk controller piggybacked to bus extension on slot CPU +Options: 80287 + +Compaq Portable III +=================== +Links: http://www.old-computers.com/museum/computer.asp?c=1064 , http://www.freakedenough.at/infoseiten/read.php?id=66 , http://www.1000bit.it/ad/bro/compaq/CompaqProtable3.pdf , http://oldcomputers.net/compaqiii.pdf +Info: The later Compaq Portable 386 uses the same case, screen and video adapter; Models: 1 (no), 20 (20MB) and 40 (40MB harddisk) +Form factor: Luggable +CPU: AMD N80L286-12/S 12MHz (could be downclocked to 8MHz) +RAM: 640KB, attitional RAM cards were 512KB or 2MB to give 1.1MB, 1.6MB, 2.1MB, 2.6MB, 4.6MB or 6.6MB of total RAM +Video: AT&T 6300/Olivetti M24 driver compatible "Super CGA" with a 640x400 red/amber Plasma screen +Mass storage: One 1.2MB floppy disk drive, no/20MB/40MB hard disk +On board: Serial, Parallel, RTC, RGBI (external Monitor), keyboard +Options: 80827, Expansion box with 2 ISA slots, 300/1200Baud internal Modem, Compaq EGA Board +To-Do: Emulate Graphics card fully + ***************************************************************************/ #include "emu.h" @@ -623,6 +657,22 @@ static MACHINE_CONFIG_START( ficpio2 ) MCFG_VT82C496_REGION("isa") MACHINE_CONFIG_END +// Compaq Portable III +static MACHINE_CONFIG_DERIVED( comportiii, ibm5170 ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_CLOCK(XTAL_48MHz / 4) + MCFG_DEVICE_MODIFY(RAM_TAG) + MCFG_RAM_DEFAULT_SIZE("640K") + MCFG_RAM_EXTRA_OPTIONS("1152K,1664K,2176K,2688K,4736K,6784K") + MCFG_DEVICE_MODIFY("isa1") + MCFG_DEVICE_SLOT_INTERFACE(pc_isa8_cards, "cga_m24", false) + MCFG_DEVICE_MODIFY("isa4") + MCFG_DEVICE_SLOT_INTERFACE(pc_isa16_cards, "hdc", false) +MACHINE_CONFIG_END + +//************************************************************************** +// ROM DEFINITIONS +//************************************************************************** ROM_START( ibm5170 ) ROM_REGION(0x20000,"bios", 0) @@ -758,6 +808,13 @@ ROM_START( at ) ROM_SYSTEM_BIOS(13, "aw303gs", "Award 303GS") ROMX_LOAD( "aw303gs-hi.bin", 0x18001, 0x4000, CRC(82392e18) SHA1(042453b7b29933a1b72301d21fcf8fa6b293c9c9), ROM_SKIP(1) | ROM_BIOS(14) ) ROMX_LOAD( "aw303gs-lo.bin", 0x18000, 0x4000, CRC(a4cf8ba1) SHA1(b73e34be3b2754aaed1ac06471f4441fea06c67c), ROM_SKIP(1) | ROM_BIOS(14) ) + ROM_SYSTEM_BIOS(14, "ami_200960", "AMI 200960") + ROMX_LOAD( "ami_286_bios_sn200960_even.bin", 0x10000, 0x8000, CRC(67745815) SHA1(ca6886c7a0716a92a8720fc71ff2d95328c467a5), ROM_SKIP(1) | ROM_BIOS(15) ) + ROMX_LOAD( "ami_286_bios_sn200960_odd.bin", 0x10001, 0x8000, CRC(360a5f73) SHA1(1b1980fd99779d0cdc4764928a641e081b35ee9f), ROM_SKIP(1) | ROM_BIOS(15) ) + ROM_SYSTEM_BIOS(15, "magitronic_b233", "Magitronic B233") // SUNTAC Chipset, http://toastytech.com/manuals/Magitronic%20B233%20Manual.pdf + ROMX_LOAD( "magitronic_b233_ami_1986_286_bios_plus_even_sa027343.bin", 0x10000, 0x8000, CRC(d4a18444) SHA1(d95242104fc9b51cf26de72ef5b6c52d99ccce30), ROM_SKIP(1) | ROM_BIOS(16) ) + ROMX_LOAD( "magitronic_b233_ami_1986_286_bios_plus_odd_sa027343.bin", 0x10001, 0x8000, CRC(7ac3db56) SHA1(4340140450c4f8b4f6a19eae50a5dc5449edfdf6), ROM_SKIP(1) | ROM_BIOS(16) ) + // ROM_LOAD("magitronic_b233_ami_1986_keyboard_bios_plus_a025352.bin", 0x0000, 0x1000), CRC(84fd28fd) SHA1(43da0f49e52c921844e60b6f3d22f2a316d865cc) ) ROM_END @@ -907,34 +964,36 @@ ROM_START( at486 ) ROM_SYSTEM_BIOS(8, "ficgiovt2_326", "FIC 486-GIO-VT2 3.26G") /* 1994-07-06 */ ROMX_LOAD("326g1c00.awd", 0x10000, 0x10000, CRC(2e729ab5) SHA1(b713f97fa0e0b62856dab917f417f5b21020b354), ROM_BIOS(9)) - ROM_SYSTEM_BIOS(9, "ficgiovt2_3276", "FIC 486-GIO-VT2 3.276") /* 1997-07-17 */ - ROMX_LOAD("32760000.bin", 0x10000, 0x10000, CRC(ad179128) SHA1(595f67ba4a1c8eb5e118d75bf657fff3803dcf4f), ROM_BIOS(10)) + ROM_SYSTEM_BIOS(9, "486_gio_vt2","VBS1.08H 486-GVT-2") /* 1995-06-19 */ + ROMX_LOAD("award_486_gio_vt2.bin", 0x10000, 0x10000, CRC(58d7c7f9) SHA1(097f15ec2bd672cb3f1763298ca802c7ff26021f), ROM_BIOS(10)) // Vobis version, Highscreen boot logo + ROM_SYSTEM_BIOS(10, "ficgiovt2_3276", "FIC 486-GIO-VT2 3.276") /* 1997-07-17 */ + ROMX_LOAD("32760000.bin", 0x10000, 0x10000, CRC(ad179128) SHA1(595f67ba4a1c8eb5e118d75bf657fff3803dcf4f), ROM_BIOS(11)) - ROM_SYSTEM_BIOS(10, "ficgvt2", "FIC 486-GVT-2 3.07G") /* 1994-11-02 */ - ROMX_LOAD("3073.bin", 0x10000, 0x10000, CRC(a6723863) SHA1(ee93a2f1ec84a3d67e267d0a490029f9165f1533), ROM_BIOS(11)) - ROM_SYSTEM_BIOS(11, "ficgpak2", "FIC 486-PAK-2 5.15S") /* 1995-06-27, includes Phoenix S3 TRIO64 Enhanced VGA BIOS 1.4-01 */ - ROMX_LOAD("515sbd8a.awd", 0x00000, 0x20000, CRC(778247e1) SHA1(07d8f0f2464abf507be1e8dfa06cd88737782411), ROM_BIOS(12)) + ROM_SYSTEM_BIOS(11, "ficgvt2", "FIC 486-GVT-2 3.07G") /* 1994-11-02 */ + ROMX_LOAD("3073.bin", 0x10000, 0x10000, CRC(a6723863) SHA1(ee93a2f1ec84a3d67e267d0a490029f9165f1533), ROM_BIOS(12)) + ROM_SYSTEM_BIOS(12, "ficgpak2", "FIC 486-PAK-2 5.15S") /* 1995-06-27, includes Phoenix S3 TRIO64 Enhanced VGA BIOS 1.4-01 */ + ROMX_LOAD("515sbd8a.awd", 0x00000, 0x20000, CRC(778247e1) SHA1(07d8f0f2464abf507be1e8dfa06cd88737782411), ROM_BIOS(13)) - ROM_SYSTEM_BIOS(12, "ficpio3g7", "FIC 486-PIO-3 1.15G705") /* pnp */ - ROMX_LOAD("115g705.awd", 0x00000, 0x20000, CRC(ddb1544a) SHA1(d165c9ecdc9397789abddfe0fef69fdf954fa41b), ROM_BIOS(13)) - ROM_SYSTEM_BIOS(13, "ficpio3g1", "FIC 486-PIO-3 1.15G105") /* non-pnp */ - ROMX_LOAD("115g105.awd", 0x00000, 0x20000, CRC(b327eb83) SHA1(9e1ff53e07ca035d8d43951bac345fec7131678d), ROM_BIOS(14)) + ROM_SYSTEM_BIOS(13, "ficpio3g7", "FIC 486-PIO-3 1.15G705") /* pnp */ + ROMX_LOAD("115g705.awd", 0x00000, 0x20000, CRC(ddb1544a) SHA1(d165c9ecdc9397789abddfe0fef69fdf954fa41b), ROM_BIOS(14)) + ROM_SYSTEM_BIOS(14, "ficpio3g1", "FIC 486-PIO-3 1.15G105") /* non-pnp */ + ROMX_LOAD("115g105.awd", 0x00000, 0x20000, CRC(b327eb83) SHA1(9e1ff53e07ca035d8d43951bac345fec7131678d), ROM_BIOS(15)) - ROM_SYSTEM_BIOS(14, "ficpos", "FIC 486-POS") - ROMX_LOAD("116di6b7.bin", 0x00000, 0x20000, CRC(d1d84616) SHA1(2f2b27ce100cf784260d8e155b48db8cfbc63285), ROM_BIOS(15)) - ROM_SYSTEM_BIOS(15, "ficpvt", "FIC 486-PVT 5.15") /* 1995-06-27 */ - ROMX_LOAD("5150eef3.awd", 0x00000, 0x20000, CRC(eb35785d) SHA1(1e601bc8da73f22f11effe9cdf5a84d52576142b), ROM_BIOS(16)) - ROM_SYSTEM_BIOS(16, "ficpvtio", "FIC 486-PVT-IO 5.162W2") /* 1995-10-05 */ - ROMX_LOAD("5162cf37.awd", 0x00000, 0x20000, CRC(378d813d) SHA1(aa674eff5b972b31924941534c3c988f6f78dc93), ROM_BIOS(17)) - ROM_SYSTEM_BIOS(17, "ficvipio426", "FIC 486-VIP-IO 4.26GN2") /* 1994-12-07 */ - ROMX_LOAD("426gn2.awd", 0x00000, 0x20000, CRC(5f472aa9) SHA1(9160abefae32b450e973651c052657b4becc72ba), ROM_BIOS(18)) - ROM_SYSTEM_BIOS(18, "ficvipio427", "FIC 486-VIP-IO 4.27GN2A") /* 1996-02-14 */ - ROMX_LOAD("427gn2a.awd", 0x00000, 0x20000, CRC(035ad56d) SHA1(0086db3eff711fc710b30e7f422fc5b4ab8d47aa), ROM_BIOS(19)) - ROM_SYSTEM_BIOS(19, "ficvipio2", "FIC 486-VIP-IO2") - ROMX_LOAD("1164g701.awd", 0x00000, 0x20000, CRC(7b762683) SHA1(84debce7239c8b1978246688ae538f7c4f519d13), ROM_BIOS(20)) + ROM_SYSTEM_BIOS(15, "ficpos", "FIC 486-POS") + ROMX_LOAD("116di6b7.bin", 0x00000, 0x20000, CRC(d1d84616) SHA1(2f2b27ce100cf784260d8e155b48db8cfbc63285), ROM_BIOS(16)) + ROM_SYSTEM_BIOS(16, "ficpvt", "FIC 486-PVT 5.15") /* 1995-06-27 */ + ROMX_LOAD("5150eef3.awd", 0x00000, 0x20000, CRC(eb35785d) SHA1(1e601bc8da73f22f11effe9cdf5a84d52576142b), ROM_BIOS(17)) + ROM_SYSTEM_BIOS(17, "ficpvtio", "FIC 486-PVT-IO 5.162W2") /* 1995-10-05 */ + ROMX_LOAD("5162cf37.awd", 0x00000, 0x20000, CRC(378d813d) SHA1(aa674eff5b972b31924941534c3c988f6f78dc93), ROM_BIOS(18)) + ROM_SYSTEM_BIOS(18, "ficvipio426", "FIC 486-VIP-IO 4.26GN2") /* 1994-12-07 */ + ROMX_LOAD("426gn2.awd", 0x00000, 0x20000, CRC(5f472aa9) SHA1(9160abefae32b450e973651c052657b4becc72ba), ROM_BIOS(19)) + ROM_SYSTEM_BIOS(19, "ficvipio427", "FIC 486-VIP-IO 4.27GN2A") /* 1996-02-14 */ + ROMX_LOAD("427gn2a.awd", 0x00000, 0x20000, CRC(035ad56d) SHA1(0086db3eff711fc710b30e7f422fc5b4ab8d47aa), ROM_BIOS(20)) + ROM_SYSTEM_BIOS(20, "ficvipio2", "FIC 486-VIP-IO2") + ROMX_LOAD("1164g701.awd", 0x00000, 0x20000, CRC(7b762683) SHA1(84debce7239c8b1978246688ae538f7c4f519d13), ROM_BIOS(21)) - ROM_SYSTEM_BIOS(20, "qdi", "QDI PX486DX33/50P3") - ROMX_LOAD("qdi_px486.u23", 0x10000, 0x10000, CRC(c80ecfb6) SHA1(34cc9ef68ff719cd0771297bf184efa83a805f3e), ROM_BIOS(21)) + ROM_SYSTEM_BIOS(21, "qdi", "QDI PX486DX33/50P3") + ROMX_LOAD("qdi_px486.u23", 0x10000, 0x10000, CRC(c80ecfb6) SHA1(34cc9ef68ff719cd0771297bf184efa83a805f3e), ROM_BIOS(22)) ROM_END @@ -1146,59 +1205,93 @@ ROM_START( pc2386 ) ROM_LOAD( "40211.ic801", 0x000, 0x1000, CRC(4440d981) SHA1(a76006a929f26c178e09908c66f28abc92e7744c) ) ROM_END +// Kaypro 286i ROM_START( k286i ) ROM_REGION(0x20000,"bios", 0) ROM_LOAD16_BYTE( "81_1598", 0x18000, 0x4000, CRC(e25a1e43) SHA1(d00b976ac94323f3867b1c256e315839c906dd5a) ) ROM_LOAD16_BYTE( "81_1599", 0x18001, 0x4000, CRC(08e2a17b) SHA1(a86ef116e82eb9240e60b52f76e5e510cdd393fd) ) ROM_END +// Sanyo MBC-28 +ROM_START( mbc28 ) // Complains about missing mouse hardware + ROM_REGION(0x20000,"bios", 0) + ROM_LOAD16_BYTE( "mbc-28_sl-dt_ver.1620_low_din_checksum_(454f00)_27c256-15.bin", 0x10000, 0x8000, CRC(423b4693) SHA1(08e877baa59ebd9a1817dcdd27138c638edcbb84) ) + ROM_LOAD16_BYTE( "mbc-28_sl-dt_ver.1620_high_din_checksum_(45ae00)_27c256-15.bin", 0x10001, 0x8000, CRC(557b7346) SHA1(c0dca88627f8451211172441fefb4020839fb87f) ) +ROM_END + +// Siemens PCD-2 +ROM_START( pcd2 ) + ROM_REGION(0x20000,"bios", 0) + ROM_LOAD16_BYTE( "bios_tandon_188782-032a_rev_5.21_low.bin", 0x10000, 0x8000, CRC(a8fbffd3) SHA1(8a3ad5bc7f86ff984be10a8b1ae4542be4c80e5f) ) + ROM_LOAD16_BYTE( "bios_tandon_188782-031a_rev_5.21_high.bin", 0x10001, 0x8000, CRC(8d7dfdcc) SHA1(d1d58c0ad7db60399f9a93db48feb10e44ffd624) ) + // ROM_LOAD( "kbd_8742_award_upi_1.61_rev_1.01.bin", 0x0000, 0x0800, CRC(bb8a1979) SHA(43d35ecf76e5e8d5ddf6c32b0f6f628a7542d6e4) ) // 8742 keyboard controller + // ROM_LOAD( "vga_nmc27c256q_435-0029-04_1988_video7_arrow.bin", 0x8000, 0x0800, CRC(0d8d7dff) SHA(cb5b2ab78d480ec3164d16c9c75f1449fa81a0e7) ) // Video7 VGA card + // ROM_LOAD( "vga_nmc27c256q_435-0030-04_1988_video7_arrow.bin", 0x8000, 0x0800, CRC(0935c003) SHA(35ac571818f616b856da8bbf6a7a9172f68b3ab6) ) +ROM_END + +// Compaq Portable III +ROM_START( comportiii ) + ROM_REGION(0x20000,"bios", 0) + ROM_SYSTEM_BIOS(0, "106779-002", "106779-002") + ROMX_LOAD( "cpiii_87c128_106779-002.bin", 0x18000, 0x4000, CRC(aef8f532) SHA1(b0374d5aa8766f11043cbaee007e6d311f792e44), ROM_SKIP(1) | ROM_BIOS(1) ) + ROMX_LOAD( "cpiii_87c128_106778-002.bin", 0x18001, 0x4000, CRC(c259f628) SHA1(df0ca8aaead617114fbecb4ececbd1a3bb1d5f30), ROM_SKIP(1) | ROM_BIOS(1) ) + // ROM_LOAD( "cpiii_106436-001.bin", 0x0000, 0x1000, CRC(5acc716b) SHA(afe166ecf99136d15269e44ebf2d66317945bf9c) ) // keyboard + ROM_SYSTEM_BIOS(1, "109737-002", "109737-002") + ROMX_LOAD( "109738-002.bin", 0x10000, 0x8000, CRC(db131b8a) SHA1(6a8517a771272edf16870501fc1ed94c7555ef45), ROM_SKIP(1) | ROM_BIOS(2) ) + ROMX_LOAD( "109737-002.bin", 0x10001, 0x8000, CRC(8463cc41) SHA1(cb9801591e4a2cd13bbcc40739c9e675ba84c079), ROM_SKIP(1) | ROM_BIOS(2) ) +ROM_END + /*************************************************************************** Game driver(s) ***************************************************************************/ -/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */ -COMP ( 1984, ibm5170, 0, ibm5150, ibm5170, 0, at_state, at, "International Business Machines", "IBM PC/AT 5170", MACHINE_NOT_WORKING ) -COMP ( 1985, ibm5170a, ibm5170, 0, ibm5170a, 0, at_state, at, "International Business Machines", "IBM PC/AT 5170 8MHz", MACHINE_NOT_WORKING ) -COMP ( 1985, ibm5162, ibm5170, 0, ibm5162, 0, at_state, at, "International Business Machines", "IBM PC/XT-286 5162", MACHINE_NOT_WORKING ) -COMP ( 1989, ibmps1es, ibm5170, 0, ibmps1, 0, at_state, at, "International Business Machines", "IBM PS/1 (Spanish)", MACHINE_NOT_WORKING ) -COMP ( 1987, at, ibm5170, 0, ibm5162, 0, at_state, at, "", "PC/AT (CGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) -COMP ( 1987, atvga, ibm5170, 0, atvga, 0, at_state, at, "", "PC/AT (VGA, MF2 Keyboard)" , MACHINE_NOT_WORKING ) -COMP ( 1988, at386, ibm5170, 0, at386, 0, at_state, at, "", "PC/AT 386 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) -COMP ( 1988, ct386sx, ibm5170, 0, ct386sx, 0, at_state, at, "", "NEAT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) -COMP ( 1988, at386sx, ibm5170, 0, at386sx, 0, at_state, at, "", "PC/AT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) -COMP ( 1990, at486, ibm5170, 0, at486, 0, at_state, at, "", "PC/AT 486 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) -COMP ( 1989, neat, ibm5170, 0, neat, 0, at_state, at, "", "NEAT (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) -COMP ( 1989, ec1842, ibm5150, 0, ec1842, 0, at_state, at, "", "EC-1842", MACHINE_NOT_WORKING ) -COMP ( 1993, ec1849, ibm5170, 0, ec1842, 0, at_state, at, "", "EC-1849", MACHINE_NOT_WORKING ) -COMP ( 1993, megapc, 0, 0, megapc, 0, megapc_state, megapc, "Amstrad plc", "MegaPC", MACHINE_NOT_WORKING ) -COMP ( 199?, megapcpl, megapc, 0, megapcpl, 0, megapc_state, megapcpl, "Amstrad plc", "MegaPC Plus", MACHINE_NOT_WORKING ) -COMP ( 199?, megapcpla, megapc, 0, megapcpla, 0, at_state, megapcpla,"Amstrad plc", "MegaPC Plus (WINBUS chipset)", MACHINE_NOT_WORKING ) -COMP ( 1989, pc2386, ibm5170, 0, at386l, 0, at_state, at, "Amstrad plc", "Amstrad PC2386", MACHINE_NOT_WORKING ) -COMP ( 1991, aprfte, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FT//ex 486 (J3 Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1991, ftsserv, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FTs (Scorpion)", MACHINE_NOT_WORKING ) -COMP ( 1992, aprpand, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FTs (Panther Rev F 1.02.26)", MACHINE_NOT_WORKING ) -COMP ( 1990, aplanst, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot LANstation (Krypton Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1990, aplannb, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot LANstation (Novell Remote Boot)", MACHINE_NOT_WORKING ) -COMP ( 1992, aplscar, ibm5170, 0, at486l, 0, at_state, at, "Apricot", "Apricot LS Pro (Caracal Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1992, aplsbon, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot LS Pro (Bonsai Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1988, xb42663, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot Qi 300 (Rev D,E & F Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1988, qi600, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot Qi 600 (Neptune Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1990, qi900, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot Qi 900 (Scorpion Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1989, apvxft, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot VX FT server", MACHINE_NOT_WORKING ) -COMP ( 1991, apxenls3, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN-LS (Venus IV Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1993, apxlsam, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN-LS II (Samurai Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1987, apxeni, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-i 386 (Leopard Motherboard)" , MACHINE_NOT_WORKING ) -COMP ( 1989, xb42639, ibm5170, 0, xb42639, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus I Motherboard 286)" , MACHINE_NOT_WORKING ) -COMP ( 1990, xb42639a, ibm5170, 0, xb42639, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus II Motherboard 286)" , MACHINE_NOT_WORKING ) -COMP ( 1989, xb42664, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus I Motherboard 386)" , MACHINE_NOT_WORKING ) -COMP ( 1990, xb42664a, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus II Motherboard 386)" , MACHINE_NOT_WORKING ) -COMP ( 1993, apxena1, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN PC (A1 Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1993, apxenp2, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN PC (P2 Motherboard)", MACHINE_NOT_WORKING ) -COMP ( 1990, c386sx16, ibm5170, 0, at386sx, 0, at_state, at, "Commodore Business Machines", "Commodore 386SX-16", MACHINE_NOT_WORKING ) -COMP ( 1988, pc30iii, ibm5170, 0, pc30iii, 0, at_state, at, "Commodore Business Machines", "PC 30-III", MACHINE_NOT_WORKING ) -COMP ( 1988, pc40iii, ibm5170, 0, pc40iii, 0, at_state, at, "Commodore Business Machines", "PC 40-III", MACHINE_NOT_WORKING ) -COMP ( 1995, ficpio2, ibm5170, 0, ficpio2, 0, at_state, atpci, "FIC", "486-PIO-2", MACHINE_NOT_WORKING ) -COMP ( 1985, k286i, ibm5170, 0, k286i, 0, at_state, at, "Kaypro", "286i", MACHINE_NOT_WORKING ) -COMP ( 1991, t2000sx, ibm5170, 0, at386sx, 0, at_state, at, "Toshiba", "T2000SX", MACHINE_NOT_WORKING ) +// YEAR NAME PARENT COMPAT MACHINE INIT INPUT STATE COMPANY FULLNAME FLAGS +COMP ( 1984, ibm5170, 0, ibm5150, ibm5170, 0, at_state, at, "International Business Machines", "IBM PC/AT 5170", MACHINE_NOT_WORKING ) +COMP ( 1985, ibm5170a, ibm5170, 0, ibm5170a, 0, at_state, at, "International Business Machines", "IBM PC/AT 5170 8MHz", MACHINE_NOT_WORKING ) +COMP ( 1985, ibm5162, ibm5170, 0, ibm5162, 0, at_state, at, "International Business Machines", "IBM PC/XT-286 5162", MACHINE_NOT_WORKING ) +COMP ( 1989, ibmps1es, ibm5170, 0, ibmps1, 0, at_state, at, "International Business Machines", "IBM PS/1 (Spanish)", MACHINE_NOT_WORKING ) +COMP ( 1987, at, ibm5170, 0, ibm5162, 0, at_state, at, "", "PC/AT (CGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) +COMP ( 1987, atvga, ibm5170, 0, atvga, 0, at_state, at, "", "PC/AT (VGA, MF2 Keyboard)" , MACHINE_NOT_WORKING ) +COMP ( 1988, at386, ibm5170, 0, at386, 0, at_state, at, "", "PC/AT 386 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) +COMP ( 1988, ct386sx, ibm5170, 0, ct386sx, 0, at_state, at, "", "NEAT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) +COMP ( 1988, at386sx, ibm5170, 0, at386sx, 0, at_state, at, "", "PC/AT 386SX (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) +COMP ( 1990, at486, ibm5170, 0, at486, 0, at_state, at, "", "PC/AT 486 (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) +COMP ( 1989, neat, ibm5170, 0, neat, 0, at_state, at, "", "NEAT (VGA, MF2 Keyboard)", MACHINE_NOT_WORKING ) +COMP ( 1989, ec1842, ibm5150, 0, ec1842, 0, at_state, at, "", "EC-1842", MACHINE_NOT_WORKING ) +COMP ( 1993, ec1849, ibm5170, 0, ec1842, 0, at_state, at, "", "EC-1849", MACHINE_NOT_WORKING ) +COMP ( 1993, megapc, 0, 0, megapc, 0, megapc_state, megapc, "Amstrad plc", "MegaPC", MACHINE_NOT_WORKING ) +COMP ( 199?, megapcpl, megapc, 0, megapcpl, 0, megapc_state, megapcpl, "Amstrad plc", "MegaPC Plus", MACHINE_NOT_WORKING ) +COMP ( 199?, megapcpla, megapc, 0, megapcpla, 0, at_state, megapcpla,"Amstrad plc", "MegaPC Plus (WINBUS chipset)", MACHINE_NOT_WORKING ) +COMP ( 1989, pc2386, ibm5170, 0, at386l, 0, at_state, at, "Amstrad plc", "Amstrad PC2386", MACHINE_NOT_WORKING ) +COMP ( 1991, aprfte, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FT//ex 486 (J3 Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1991, ftsserv, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FTs (Scorpion)", MACHINE_NOT_WORKING ) +COMP ( 1992, aprpand, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot FTs (Panther Rev F 1.02.26)", MACHINE_NOT_WORKING ) +COMP ( 1990, aplanst, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot LANstation (Krypton Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1990, aplannb, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot LANstation (Novell Remote Boot)", MACHINE_NOT_WORKING ) +COMP ( 1992, aplscar, ibm5170, 0, at486l, 0, at_state, at, "Apricot", "Apricot LS Pro (Caracal Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1992, aplsbon, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot LS Pro (Bonsai Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1988, xb42663, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot Qi 300 (Rev D,E & F Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1988, qi600, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot Qi 600 (Neptune Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1990, qi900, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot Qi 900 (Scorpion Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1989, apvxft, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot VX FT server", MACHINE_NOT_WORKING ) +COMP ( 1991, apxenls3, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN-LS (Venus IV Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1993, apxlsam, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN-LS II (Samurai Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1987, apxeni, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-i 386 (Leopard Motherboard)" , MACHINE_NOT_WORKING ) +COMP ( 1989, xb42639, ibm5170, 0, xb42639, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus I Motherboard 286)" , MACHINE_NOT_WORKING ) +COMP ( 1990, xb42639a, ibm5170, 0, xb42639, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus II Motherboard 286)" , MACHINE_NOT_WORKING ) +COMP ( 1989, xb42664, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus I Motherboard 386)" , MACHINE_NOT_WORKING ) +COMP ( 1990, xb42664a, ibm5170, 0, at386, 0, at_state, at, "Apricot", "Apricot XEN-S (Venus II Motherboard 386)" , MACHINE_NOT_WORKING ) +COMP ( 1993, apxena1, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN PC (A1 Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1993, apxenp2, ibm5170, 0, at486, 0, at_state, at, "Apricot", "Apricot XEN PC (P2 Motherboard)", MACHINE_NOT_WORKING ) +COMP ( 1990, c386sx16, ibm5170, 0, at386sx, 0, at_state, at, "Commodore Business Machines", "Commodore 386SX-16", MACHINE_NOT_WORKING ) +COMP ( 1988, pc30iii, ibm5170, 0, pc30iii, 0, at_state, at, "Commodore Business Machines", "PC 30-III", MACHINE_NOT_WORKING ) +COMP ( 1988, pc40iii, ibm5170, 0, pc40iii, 0, at_state, at, "Commodore Business Machines", "PC 40-III", MACHINE_NOT_WORKING ) +COMP ( 1995, ficpio2, ibm5170, 0, ficpio2, 0, at_state, atpci, "FIC", "486-PIO-2", MACHINE_NOT_WORKING ) +COMP ( 1985, k286i, ibm5170, 0, k286i, 0, at_state, at, "Kaypro", "286i", MACHINE_NOT_WORKING ) +COMP ( 1991, t2000sx, ibm5170, 0, at386sx, 0, at_state, at, "Toshiba", "T2000SX", MACHINE_NOT_WORKING ) +COMP ( 199?, mbc28, ibm5170, 0, at386sx, 0, at_state, at, "Sanyo", "MBC-28", MACHINE_NOT_WORKING ) +COMP ( 1986, pcd2, ibm5170, 0, ibm5170, 0, at_state, at, "Siemens", "PCD-2", MACHINE_NOT_WORKING ) +COMP ( 1987, comportiii,ibm5170, 0, comportiii,0, at_state, at, "Compaq", "Portable III", MACHINE_NOT_WORKING ) + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a43853fc44c..74cd7e10349 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -2285,6 +2285,9 @@ at386sx // 19?? AT VGA 386sx c386sx16 // 1990 Commodore 386SX-16 pc30iii // Commodore PC 30-III pc40iii // Commodore PC 40-III +mbc28 // Sanyo MBC-28 +comportiii // Compaq Portable III +pcd2 // Siemens PCD-2 ct386sx // ec1842 // ec1849 // From 65677947e93c0ee07e128c1e0483065278a015b3 Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 22 Nov 2017 01:10:56 +0100 Subject: [PATCH 02/35] Dumped obj roms for Seibu CATS system [ShouTime, Bill D., The Dumping Union] --- src/mame/drivers/seibucats.cpp | 183 ++++++++++++++++++++------------- 1 file changed, 114 insertions(+), 69 deletions(-) diff --git a/src/mame/drivers/seibucats.cpp b/src/mame/drivers/seibucats.cpp index 8aeeb792914..38f7fbd9a10 100644 --- a/src/mame/drivers/seibucats.cpp +++ b/src/mame/drivers/seibucats.cpp @@ -4,6 +4,15 @@ Seibu CATS E-Touch Mahjong Series (c) 2001 Seibu Kaihatsu + TODO: + - verify obj roms (maybe bad or wrong decryption); + - coins inputs are ok? + - touchscreen; + - sound; + - DVD player; + +========================================================================================================================================================= + CPU and system control devices: - Intel i386DX (U0169; lower right corner) - SEI600 SB08-1513 custom DMA chip (U0154; above i386DX) @@ -69,6 +78,7 @@ #include "machine/i8251.h" //#include "machine/microtch.h" //#include "machine/rtc4543.h" +#include "machine/seibuspi.h" #include "sound/ymz280b.h" #include "screen.h" #include "speaker.h" @@ -91,6 +101,7 @@ class seibucats_state : public seibuspi_state public: seibucats_state(const machine_config &mconfig, device_type type, const char *tag) : seibuspi_state(mconfig, type, tag) +// m_key(*this, "KEY.%u", 0) { } @@ -103,6 +114,7 @@ public: DECLARE_WRITE16_MEMBER(input_select_w); DECLARE_WRITE16_MEMBER(output_latch_w); DECLARE_WRITE16_MEMBER(aux_rtc_w); + DECLARE_DRIVER_INIT(seibucats); protected: // driver_device overrides @@ -114,18 +126,28 @@ protected: private: uint16_t m_input_select; + +// optional_ioport_array<5> m_key; +// optional_ioport m_special; }; +// identical to EJ Sakura READ16_MEMBER(seibucats_state::input_mux_r) { - // TODO: mahjong keyboard is read from here - return m_eeprom->do_read() << 14; + uint16_t ret = m_special->read(); + + // multiplexed inputs + for (int i = 0; i < 5; i++) + if (m_input_select >> i & 1) + ret &= m_key[i]->read(); + + return ret; } WRITE16_MEMBER(seibucats_state::input_select_w) { // Note that this is active high in ejsakura but active low here - m_input_select = data; + m_input_select = data ^ 0xffff; } WRITE16_MEMBER(seibucats_state::output_latch_w) @@ -166,60 +188,61 @@ static ADDRESS_MAP_START( seibucats_map, AS_PROGRAM, 32, seibucats_state ) AM_RANGE(0xffe00000, 0xffffffff) AM_ROM AM_REGION("ipl", 0) ADDRESS_MAP_END -static INPUT_PORTS_START( seibucats ) - /* dummy active high structure */ - PORT_START("SYSA") - PORT_DIPNAME( 0x01, 0x00, "SYSA" ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x01, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x02, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x04, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x08, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x10, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x40, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x80, DEF_STR( On ) ) +static INPUT_PORTS_START( spi_mahjong_keyboard ) + PORT_START("KEY.0") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_L ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_H ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_D ) + PORT_BIT( 0xffffffe0, IP_ACTIVE_LOW, IPT_UNUSED ) - /* dummy active low structure */ - PORT_START("DSWA") - PORT_DIPNAME( 0x01, 0x01, "DSWA" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_START("KEY.1") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_BIG ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_DOUBLE_UP ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_SCORE ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_LAST_CHANCE ) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_SMALL ) + PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KEY.2") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_K ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_G ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_C ) + PORT_BIT( 0xffffffe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KEY.3") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_M ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_I ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_E ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_A ) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0xffffffc0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("KEY.4") + PORT_BIT( 0x00000001, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) + PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_MAHJONG_N ) + PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_MAHJONG_J ) + PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_MAHJONG_F ) + PORT_BIT( 0x00000010, IP_ACTIVE_LOW, IPT_MAHJONG_B ) + PORT_BIT( 0x00000020, IP_ACTIVE_LOW, IPT_MAHJONG_BET ) + PORT_SERVICE_NO_TOGGLE( 0x00000200, IP_ACTIVE_LOW) + PORT_BIT( 0xfffffdc0, IP_ACTIVE_LOW, IPT_UNUSED ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( seibucats ) + PORT_INCLUDE( spi_mahjong_keyboard ) + + PORT_START("SPECIAL") + PORT_BIT( 0x00000040, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x00000080, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x00004000, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) + PORT_BIT( 0xffffbf3f, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static const gfx_layout sys386f_spritelayout = @@ -320,10 +343,10 @@ ROM_START( emjjoshi ) ROM_REGION( 0x900000, "gfx2", ROMREGION_ERASEFF ) /* background layer roms - none! */ - ROM_REGION( 0x600000, "gfx3", 0) - ROM_LOAD("obj1.u0231", 0x000000, 0x200000, NO_DUMP ) - ROM_LOAD("obj2.u0233", 0x200000, 0x200000, NO_DUMP ) - ROM_LOAD("obj3.u0232", 0x400000, 0x200000, NO_DUMP ) + ROM_REGION( 0x300000, "gfx3", ROMREGION_ERASEFF) + ROM_LOAD16_WORD_SWAP("obj03.u0232", 0x100000, 0x100000, CRC(15c230cf) SHA1(7e12871d6e34e28cd4b5b23af6b0cbdff9432500) ) + ROM_LOAD16_WORD_SWAP("obj02.u0233", 0x000000, 0x100000, CRC(dffd0114) SHA1(b74254061b6da5a2ce310ea89684db430b43583e) ) + ROM_LOAD16_WORD_SWAP("obj01.u0231", 0x200000, 0x100000, CRC(ee5ae0fd) SHA1(0baff6ca4e8bceac4e09732da267f57578dcc280) ) // obj4.u0234 empty slot DISK_REGION("dvd") @@ -344,9 +367,10 @@ ROM_START( emjscanb ) ROM_REGION( 0x900000, "gfx2", ROMREGION_ERASEFF ) /* background layer roms - none! */ ROM_REGION( 0x600000, "gfx3", 0) - ROM_LOAD("obj1.u0231", 0x000000, 0x200000, NO_DUMP ) - ROM_LOAD("obj2.u0233", 0x200000, 0x200000, NO_DUMP ) - ROM_LOAD("obj3.u0232", 0x400000, 0x200000, NO_DUMP ) + // comes from EJ #2, maybe identical? + ROM_LOAD16_WORD_SWAP("obj03.u0232", 0x100000, 0x100000, BAD_DUMP CRC(15c230cf) SHA1(7e12871d6e34e28cd4b5b23af6b0cbdff9432500) ) + ROM_LOAD16_WORD_SWAP("obj02.u0233", 0x000000, 0x100000, BAD_DUMP CRC(dffd0114) SHA1(b74254061b6da5a2ce310ea89684db430b43583e) ) + ROM_LOAD16_WORD_SWAP("obj01.u0231", 0x200000, 0x100000, BAD_DUMP CRC(ee5ae0fd) SHA1(0baff6ca4e8bceac4e09732da267f57578dcc280) ) // obj4.u0234 empty slot DISK_REGION("dvd") @@ -365,24 +389,45 @@ ROM_START( emjtrapz ) ROM_REGION( 0x900000, "gfx2", ROMREGION_ERASEFF ) /* background layer roms - none! */ ROM_REGION( 0x600000, "gfx3", 0) - ROM_LOAD("obj1.u0231", 0x000000, 0x200000, NO_DUMP ) - ROM_LOAD("obj2.u0233", 0x200000, 0x200000, NO_DUMP ) - ROM_LOAD("obj3.u0232", 0x400000, 0x200000, NO_DUMP ) + // comes from EJ #2, maybe identical? + ROM_LOAD16_WORD_SWAP("obj03.u0232", 0x100000, 0x100000, BAD_DUMP CRC(15c230cf) SHA1(7e12871d6e34e28cd4b5b23af6b0cbdff9432500) ) + ROM_LOAD16_WORD_SWAP("obj02.u0233", 0x000000, 0x100000, BAD_DUMP CRC(dffd0114) SHA1(b74254061b6da5a2ce310ea89684db430b43583e) ) + ROM_LOAD16_WORD_SWAP("obj01.u0231", 0x200000, 0x100000, BAD_DUMP CRC(ee5ae0fd) SHA1(0baff6ca4e8bceac4e09732da267f57578dcc280) ) // obj4.u0234 empty slot DISK_REGION("dvd") DISK_IMAGE_READONLY( "Trap Zone SKTP-00009", 0, SHA1(b4a51f42eeaeefc329031651859caa108418a96e) ) ROM_END +DRIVER_INIT_MEMBER(seibucats_state,seibucats) +{ + int i, j; + uint16_t *src = (uint16_t *)memregion("gfx3")->base(); + uint16_t tmp[0x40 / 2], offset; + + // sprite_reorder() only + for (i = 0; i < memregion("gfx3")->bytes() / 0x40; i++) + { + memcpy(tmp, src, 0x40); + + for (j = 0; j < 0x40 / 2; j++) + { + offset = (j >> 1) | (j << 4 & 0x10); + *src++ = tmp[offset]; + } + } +// seibuspi_rise11_sprite_decrypt_rfjet(memregion("gfx3")->base(), 0x300000); +} + // Gravure Collection // Pakkun Ball TV /* 01 */ // Mahjong Shichau zo! -/* 02 */ GAME( 1999, emjjoshi, 0, seibucats, seibucats, seibucats_state, 0, ROT0, "Seibu Kaihatsu / CATS", "E-Touch Mahjong Series #2: Joshiryou de NE! (Japan)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +/* 02 */ GAME( 1999, emjjoshi, 0, seibucats, seibucats, seibucats_state, seibucats, ROT0, "Seibu Kaihatsu / CATS", "E-Touch Mahjong Series #2: Joshiryou de NE! (Japan)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) /* 03 */ // Lingerie DE Ikou /* 04 */ // Marumie Network /* 05 */ // BINKAN Lips -/* 06 */ GAME( 2001, emjscanb, 0, seibucats, seibucats, seibucats_state, 0, ROT0, "Seibu Kaihatsu / CATS", "E-Touch Mahjong Series #6: Scandal Blue - Midara na Daishou (Japan)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) -/* 07 */ GAME( 2001, emjtrapz, 0, seibucats, seibucats, seibucats_state, 0, ROT0, "Seibu Kaihatsu / CATS", "E-Touch Mahjong Series #7: Trap Zone - Yokubou no Kaisoku Densha (Japan)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +/* 06 */ GAME( 2001, emjscanb, 0, seibucats, seibucats, seibucats_state, seibucats, ROT0, "Seibu Kaihatsu / CATS", "E-Touch Mahjong Series #6: Scandal Blue - Midara na Daishou (Japan)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +/* 07 */ GAME( 2001, emjtrapz, 0, seibucats, seibucats, seibucats_state, seibucats, ROT0, "Seibu Kaihatsu / CATS", "E-Touch Mahjong Series #7: Trap Zone - Yokubou no Kaisoku Densha (Japan)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) /* 08 */ // Poison /* 09 */ // Nurse Call /* 10 */ // Secret Love From f96da9ec95a2b25444bafd994c082dd07a067fe2 Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 22 Nov 2017 01:38:47 +0100 Subject: [PATCH 03/35] Fixed gfx rom loading (nw) --- src/mame/drivers/seibucats.cpp | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/src/mame/drivers/seibucats.cpp b/src/mame/drivers/seibucats.cpp index 38f7fbd9a10..feba642b174 100644 --- a/src/mame/drivers/seibucats.cpp +++ b/src/mame/drivers/seibucats.cpp @@ -332,6 +332,14 @@ MACHINE_CONFIG_END ***************************************************************************/ +#define SEIBUCATS_OBJ_LOAD \ + ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00) \ +/* obj4.u0234 empty slot */ \ + ROM_LOAD16_WORD_SWAP("obj03.u0232", 0x100000, 0x100000, BAD_DUMP CRC(15c230cf) SHA1(7e12871d6e34e28cd4b5b23af6b0cbdff9432500) ) \ + ROM_LOAD16_WORD_SWAP("obj02.u0233", 0x200000, 0x100000, BAD_DUMP CRC(dffd0114) SHA1(b74254061b6da5a2ce310ea89684db430b43583e) ) \ + ROM_LOAD16_WORD_SWAP("obj01.u0231", 0x300000, 0x100000, BAD_DUMP CRC(ee5ae0fd) SHA1(0baff6ca4e8bceac4e09732da267f57578dcc280) ) + + ROM_START( emjjoshi ) ROM_REGION32_LE( 0x200000, "ipl", 0 ) /* i386 program */ ROM_LOAD32_BYTE( "prg0.u016", 0x000000, 0x080000, CRC(e69bed6d) SHA1(e9626e704c5d28419cfa6a7a2c1b13b4b46f941c) ) @@ -343,11 +351,7 @@ ROM_START( emjjoshi ) ROM_REGION( 0x900000, "gfx2", ROMREGION_ERASEFF ) /* background layer roms - none! */ - ROM_REGION( 0x300000, "gfx3", ROMREGION_ERASEFF) - ROM_LOAD16_WORD_SWAP("obj03.u0232", 0x100000, 0x100000, CRC(15c230cf) SHA1(7e12871d6e34e28cd4b5b23af6b0cbdff9432500) ) - ROM_LOAD16_WORD_SWAP("obj02.u0233", 0x000000, 0x100000, CRC(dffd0114) SHA1(b74254061b6da5a2ce310ea89684db430b43583e) ) - ROM_LOAD16_WORD_SWAP("obj01.u0231", 0x200000, 0x100000, CRC(ee5ae0fd) SHA1(0baff6ca4e8bceac4e09732da267f57578dcc280) ) -// obj4.u0234 empty slot + SEIBUCATS_OBJ_LOAD DISK_REGION("dvd") DISK_IMAGE_READONLY( "At the Girls Dorm SKTP-10002", 0, SHA1(be47c105089d6ef4ce05a6e1ba2ec7a3101015dc) ) @@ -366,13 +370,8 @@ ROM_START( emjscanb ) ROM_REGION( 0x900000, "gfx2", ROMREGION_ERASEFF ) /* background layer roms - none! */ - ROM_REGION( 0x600000, "gfx3", 0) - // comes from EJ #2, maybe identical? - ROM_LOAD16_WORD_SWAP("obj03.u0232", 0x100000, 0x100000, BAD_DUMP CRC(15c230cf) SHA1(7e12871d6e34e28cd4b5b23af6b0cbdff9432500) ) - ROM_LOAD16_WORD_SWAP("obj02.u0233", 0x000000, 0x100000, BAD_DUMP CRC(dffd0114) SHA1(b74254061b6da5a2ce310ea89684db430b43583e) ) - ROM_LOAD16_WORD_SWAP("obj01.u0231", 0x200000, 0x100000, BAD_DUMP CRC(ee5ae0fd) SHA1(0baff6ca4e8bceac4e09732da267f57578dcc280) ) -// obj4.u0234 empty slot - + SEIBUCATS_OBJ_LOAD + DISK_REGION("dvd") DISK_IMAGE_READONLY( "Scandal Blue SKTP-10008", 0, SHA1(17fe67698a9bc5dbd452c4b1afa739294ec2011c) ) ROM_END @@ -388,13 +387,8 @@ ROM_START( emjtrapz ) ROM_REGION( 0x900000, "gfx2", ROMREGION_ERASEFF ) /* background layer roms - none! */ - ROM_REGION( 0x600000, "gfx3", 0) - // comes from EJ #2, maybe identical? - ROM_LOAD16_WORD_SWAP("obj03.u0232", 0x100000, 0x100000, BAD_DUMP CRC(15c230cf) SHA1(7e12871d6e34e28cd4b5b23af6b0cbdff9432500) ) - ROM_LOAD16_WORD_SWAP("obj02.u0233", 0x000000, 0x100000, BAD_DUMP CRC(dffd0114) SHA1(b74254061b6da5a2ce310ea89684db430b43583e) ) - ROM_LOAD16_WORD_SWAP("obj01.u0231", 0x200000, 0x100000, BAD_DUMP CRC(ee5ae0fd) SHA1(0baff6ca4e8bceac4e09732da267f57578dcc280) ) -// obj4.u0234 empty slot - + SEIBUCATS_OBJ_LOAD + DISK_REGION("dvd") DISK_IMAGE_READONLY( "Trap Zone SKTP-00009", 0, SHA1(b4a51f42eeaeefc329031651859caa108418a96e) ) ROM_END From 6eb71aa622b7bf76f461932b01196e8068ccabc9 Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 21 Nov 2017 20:51:27 -0500 Subject: [PATCH 04/35] att4425: Dummy in a few handlers (nw) --- src/mame/drivers/att4425.cpp | 42 ++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/mame/drivers/att4425.cpp b/src/mame/drivers/att4425.cpp index c1221db576a..5e8ea2a9770 100644 --- a/src/mame/drivers/att4425.cpp +++ b/src/mame/drivers/att4425.cpp @@ -50,6 +50,11 @@ public: , m_screen(*this, SCREEN_TAG) { } + DECLARE_WRITE8_MEMBER(port10_w); + DECLARE_WRITE8_MEMBER(port14_w); + DECLARE_READ8_MEMBER(port14_r); + DECLARE_READ8_MEMBER(port15_r); + DECLARE_WRITE_LINE_MEMBER(write_line_clock); DECLARE_WRITE_LINE_MEMBER(write_keyboard_clock); @@ -69,19 +74,42 @@ private: /* Memory Maps */ +WRITE8_MEMBER(att4425_state::port10_w) +{ + logerror("Writing %02X to port 10\n", data); +} + +WRITE8_MEMBER(att4425_state::port14_w) +{ + logerror("Writing %02X to port 14\n", data); +} + +READ8_MEMBER(att4425_state::port14_r) +{ + // only complement of bit 0 used? + return 0; +} + +READ8_MEMBER(att4425_state::port15_r) +{ + // status of something (at least bits 2 and 3 used) + return 0; +} + static ADDRESS_MAP_START( att4425_mem, AS_PROGRAM, 8, att4425_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION(Z80_TAG, 0) AM_RANGE(0x8000, 0xffff) AM_RAM AM_SHARE("videoram") // c000..f7af? ADDRESS_MAP_END static ADDRESS_MAP_START( att4425_io, AS_IO, 8, att4425_state ) - AM_RANGE(0x0000, 0x0000) AM_MIRROR(0xff00) AM_DEVREADWRITE(I8251_TAG, i8251_device, data_r, data_w) - AM_RANGE(0x0001, 0x0001) AM_MIRROR(0xff00) AM_DEVREADWRITE(I8251_TAG, i8251_device, status_r, control_w) - AM_RANGE(0x0008, 0x0008) AM_MIRROR(0xff00) AM_UNMAP // write 08 - AM_RANGE(0x0010, 0x0010) AM_MIRROR(0xff00) AM_UNMAP // write 10 - AM_RANGE(0x0014, 0x0015) AM_MIRROR(0xff00) AM_UNMAP // NVRAM? read 14, 15; write 14 - AM_RANGE(0x0018, 0x001b) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write) - AM_RANGE(0x001c, 0x001f) AM_MIRROR(0xff00) AM_DEVREADWRITE(Z80SIO_TAG, z80sio_device, ba_cd_r, ba_cd_w) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_DEVREADWRITE(I8251_TAG, i8251_device, data_r, data_w) + AM_RANGE(0x01, 0x01) AM_DEVREADWRITE(I8251_TAG, i8251_device, status_r, control_w) + AM_RANGE(0x10, 0x10) AM_WRITE(port10_w) + AM_RANGE(0x14, 0x14) AM_READWRITE(port14_r, port14_w) + AM_RANGE(0x15, 0x15) AM_READ(port15_r) + AM_RANGE(0x18, 0x1b) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write) + AM_RANGE(0x1c, 0x1f) AM_DEVREADWRITE(Z80SIO_TAG, z80sio_device, ba_cd_r, ba_cd_w) ADDRESS_MAP_END /* Input Ports */ From 52eb2c2a2331513ae0fbc9a71d38c59bf578a711 Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 21 Nov 2017 21:06:56 -0500 Subject: [PATCH 05/35] seta.cpp: Documentation update (nw) --- src/mame/drivers/seta.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp index bc612163faa..4244093457d 100644 --- a/src/mame/drivers/seta.cpp +++ b/src/mame/drivers/seta.cpp @@ -8,16 +8,16 @@ CPU : 68000 + [65C02] (only in the earlier games) -Custom : X1-001A X1-002A (SDIP64) Sprites +Custom : X1-001A, X1-002A (SDIP64) Sprites X1-001 X1-002 - X1-003 + X1-003 or X1-007 (SDIP42) Video blanking (feeds RGB DACs) X1-004 (SDIP52) Inputs - X1-005 X0-005 - X1-006 X0-006 - X1-007 (SDIP42) Video DAC + X1-005 + X1-006 (SDIP64) Palette X1-010 (QFP80) Sound: 16 Bit PCM - X1-011 X1-012 (QFP100) Tilemaps + X1-011 (QFP80) Graphics mixing + X1-012 (QFP100) Tilemaps X1-014 Sprites? ------------------------------------------------------------------------------- From a20225037b916de8f484419c4bc03c7c4b12f6fd Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 22 Nov 2017 03:08:22 +0100 Subject: [PATCH 06/35] Fix bangball / batlbubl regression (nw) --- src/mame/drivers/metro.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp index 326fed89d0b..6b0fe78b2f5 100644 --- a/src/mame/drivers/metro.cpp +++ b/src/mame/drivers/metro.cpp @@ -3154,6 +3154,10 @@ static MACHINE_CONFIG_DERIVED( bangball, msgogo ) MCFG_CPU_PROGRAM_MAP(bangball_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt) MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 60) // ? + + // doesn't like 58.2 Hz + MCFG_DEVICE_MODIFY("screen") + MCFG_SCREEN_REFRESH_RATE(60) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( batlbubl, msgogo ) @@ -3161,6 +3165,10 @@ static MACHINE_CONFIG_DERIVED( batlbubl, msgogo ) MCFG_CPU_PROGRAM_MAP(batlbubl_map) MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt) MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 60) // ? + + // doesn't like 58.2 Hz + MCFG_DEVICE_MODIFY("screen") + MCFG_SCREEN_REFRESH_RATE(60) MACHINE_CONFIG_END From 0a2a4e849f0d90ddf494b3a1275b723545b80e4f Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 21 Nov 2017 22:02:15 -0500 Subject: [PATCH 07/35] cit220p: Give this one a separate driver as well (nw) --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/cit220.cpp | 76 ++++++++++++++++++++++++++++++++++ src/mame/drivers/terminals.cpp | 24 ----------- src/mame/mame.lst | 4 +- src/mame/mess.flt | 1 + 5 files changed, 81 insertions(+), 25 deletions(-) create mode 100644 src/mame/drivers/cit220.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 688a08db563..7c92f6261fa 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3445,6 +3445,7 @@ files { MAME_DIR .. "src/mame/drivers/chesstrv.cpp", MAME_DIR .. "src/mame/drivers/cd2650.cpp", MAME_DIR .. "src/mame/drivers/cdc721.cpp", + MAME_DIR .. "src/mame/drivers/cit220.cpp", MAME_DIR .. "src/mame/drivers/codata.cpp", MAME_DIR .. "src/mame/drivers/controlid.cpp", MAME_DIR .. "src/mame/drivers/cortex.cpp", diff --git a/src/mame/drivers/cit220.cpp b/src/mame/drivers/cit220.cpp new file mode 100644 index 00000000000..415b87ae437 --- /dev/null +++ b/src/mame/drivers/cit220.cpp @@ -0,0 +1,76 @@ +// license:BSD-3-Clause +// copyright-holders: +/*********************************************************************************************************************************** + +Skeleton driver for VT220-compatible terminals by C. Itoh/CIE Terminals. + +The CIT-220+ Video Terminal was introduced as a direct competitor to DEC's VT220. It copied the design of the VT220 closely +enough to provoke a lawsuit, which led to its eventual withdrawal in favor of its successor, the CIT224. + +************************************************************************************************************************************/ + +#include "emu.h" +#include "cpu/i8085/i8085.h" + + +class cit220_state : public driver_device +{ +public: + cit220_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + //, m_p_chargen(*this, "chargen") + { } + + DECLARE_WRITE_LINE_MEMBER(sod_w); + +private: + required_device m_maincpu; + //required_region_ptr m_p_chargen; +}; + + +WRITE_LINE_MEMBER(cit220_state::sod_w) +{ + logerror("SOD set %s\n", state ? "high" : "low"); +} + +static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, cit220_state ) + AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("maincpu", 0) + AM_RANGE(0x8000, 0x87ff) AM_RAM + AM_RANGE(0xa000, 0xa1ff) AM_ROM AM_REGION("eeprom", 0x800) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( io_map, AS_IO, 8, cit220_state ) + AM_RANGE(0x21, 0x21) AM_READNOP +ADDRESS_MAP_END + + +static INPUT_PORTS_START( cit220p ) +INPUT_PORTS_END + + +static MACHINE_CONFIG_START( cit220p ) + MCFG_CPU_ADD("maincpu", I8085A, 6'000'000) + MCFG_CPU_PROGRAM_MAP(mem_map) + MCFG_CPU_IO_MAP(io_map) + MCFG_I8085A_SOD(WRITELINE(cit220_state, sod_w)) +MACHINE_CONFIG_END + + +ROM_START( cit220p ) + ROM_REGION(0x8000, "maincpu", 0) + ROM_LOAD( "v17_001a.ic23", 0x0000, 0x4000, CRC(2cc43026) SHA1(366f57292c6e44571368c29e3258203779847356) ) + ROM_LOAD( "v17_001b.ic24", 0x4000, 0x4000, CRC(a56b16f1) SHA1(c68f26b35453153f7defcf1cf2b7ad7fe36cc9e7) ) + + ROM_REGION(0x1000, "eeprom", 0) + ROM_LOAD( "eeprom.bin", 0x0000, 0x1000, CRC(7b24878a) SHA1(20086fb792a24339b65abe627aefbcf48e2abcf4) ) // don't know where this fits in + + ROM_REGION(0x1000, "chargen", 0) + ROM_LOAD( "v20_cg.ic17", 0x0000, 0x1000, CRC(76ef7ca9) SHA1(6e7799ca0a41350fbc369bbbd4ab581150f37b10) ) + + ROM_REGION(0x10000, "keyboard", 0) + ROM_LOAD( "v00_kbd.bin", 0x0000, 0x1000, CRC(f9d24190) SHA1(c4e9ef8188afb18de373f2a537ca9b7a315bfb76) ) +ROM_END + +COMP( 1983, cit220p, 0, 0, cit220p, cit220p, cit220_state, 0, "C. Itoh", "CIT-220+ Video Terminal", MACHINE_IS_SKELETON ) diff --git a/src/mame/drivers/terminals.cpp b/src/mame/drivers/terminals.cpp index 041f9e555e3..1a920b2b663 100644 --- a/src/mame/drivers/terminals.cpp +++ b/src/mame/drivers/terminals.cpp @@ -124,30 +124,6 @@ COMP( 1987, att630, 0, 0, terminals, terminals, terminals_state, 0, "AT&T", "630 -/************************************************************************************************************** - -C. Itoh CIT-220+ -Code looks like Z80/8080/8085 - -***************************************************************************************************************/ - -ROM_START( cit220p ) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "v17_001a.ic23", 0x0000, 0x4000, CRC(2cc43026) SHA1(366f57292c6e44571368c29e3258203779847356) ) - ROM_LOAD( "v17_001b.ic24", 0x4000, 0x4000, CRC(a56b16f1) SHA1(c68f26b35453153f7defcf1cf2b7ad7fe36cc9e7) ) - ROM_LOAD( "eeprom.bin", 0xf000, 0x1000, CRC(7b24878a) SHA1(20086fb792a24339b65abe627aefbcf48e2abcf4) ) // don't know where this fits in - - ROM_REGION(0x1000, "chargen", 0) - ROM_LOAD( "v20_cg.ic17", 0x0000, 0x1000, CRC(76ef7ca9) SHA1(6e7799ca0a41350fbc369bbbd4ab581150f37b10) ) - - ROM_REGION(0x10000, "keyboard", 0) - ROM_LOAD( "v00_kbd.bin", 0x0000, 0x1000, CRC(f9d24190) SHA1(c4e9ef8188afb18de373f2a537ca9b7a315bfb76) ) -ROM_END - -COMP( 1985, cit220p, 0, 0, terminals, terminals, terminals_state, 0, "C. Itoh", "CIT-220+", MACHINE_IS_SKELETON ) - - - /************************************************************************************************************** Data General D461. diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 63968e736c7..13b897181e8 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -9713,6 +9713,9 @@ f1gpstr2 // (c) 1993 Jaleco scudhamm // (c) 1994 Jaleco wildplt // (c) 1992 Jaleco +@source:cit220.cpp +cit220p // (c) 1984 C. Itoh + @source:citycon.cpp citycon // (c) 1985 Jaleco citycona // (c) 1985 Jaleco @@ -36313,7 +36316,6 @@ t4490 // Terco 4490 Mill CNC Control (c) 1986 @source:terminals.cpp aaa att630 -cit220p d461 hp700_92 hp2622a diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 70882b7fb27..fd17e9bda7a 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -125,6 +125,7 @@ channelf.cpp chaos.cpp chessmst.cpp chesstrv.cpp +cit220.cpp clcd.cpp cm1800.cpp cmi.cpp From 4cb6ff1e4cdfe372814892ec80981bff7cd93a3a Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 21 Nov 2017 22:19:29 -0500 Subject: [PATCH 08/35] cit220p: Add SCN2674 device (nw) --- src/mame/drivers/cit220.cpp | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/cit220.cpp b/src/mame/drivers/cit220.cpp index 415b87ae437..2ea7b279959 100644 --- a/src/mame/drivers/cit220.cpp +++ b/src/mame/drivers/cit220.cpp @@ -11,6 +11,8 @@ enough to provoke a lawsuit, which led to its eventual withdrawal in favor of it #include "emu.h" #include "cpu/i8085/i8085.h" +#include "video/scn2674.h" +#include "screen.h" class cit220_state : public driver_device @@ -19,13 +21,16 @@ public: cit220_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") + , m_screen(*this, "screen") //, m_p_chargen(*this, "chargen") { } DECLARE_WRITE_LINE_MEMBER(sod_w); + SCN2674_DRAW_CHARACTER_MEMBER(draw_character); private: required_device m_maincpu; + required_device m_screen; //required_region_ptr m_p_chargen; }; @@ -42,7 +47,15 @@ static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, cit220_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( io_map, AS_IO, 8, cit220_state ) - AM_RANGE(0x21, 0x21) AM_READNOP + AM_RANGE(0x20, 0x27) AM_DEVREADWRITE("avdc", scn2674_device, read, write) +ADDRESS_MAP_END + + +SCN2674_DRAW_CHARACTER_MEMBER(cit220_state::draw_character) +{ +} + +static ADDRESS_MAP_START( vram_map, 0, 8, cit220_state ) ADDRESS_MAP_END @@ -51,10 +64,24 @@ INPUT_PORTS_END static MACHINE_CONFIG_START( cit220p ) - MCFG_CPU_ADD("maincpu", I8085A, 6'000'000) + MCFG_CPU_ADD("maincpu", I8085A, 6000000) MCFG_CPU_PROGRAM_MAP(mem_map) MCFG_CPU_IO_MAP(io_map) MCFG_I8085A_SOD(WRITELINE(cit220_state, sod_w)) + + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_REFRESH_RATE(50) + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ + MCFG_SCREEN_SIZE(720, 360) + MCFG_SCREEN_VISIBLE_AREA(0, 720-1, 0, 360-1) + MCFG_SCREEN_UPDATE_DEVICE("avdc", scn2674_device, screen_update) + + MCFG_SCN2674_VIDEO_ADD("avdc", 4000000, INPUTLINE("maincpu", I8085_RST65_LINE)) + MCFG_SCN2674_TEXT_CHARACTER_WIDTH(8) + MCFG_SCN2674_GFX_CHARACTER_WIDTH(8) + MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(cit220_state, draw_character) + MCFG_DEVICE_ADDRESS_MAP(0, vram_map) + MCFG_VIDEO_SET_SCREEN("screen") MACHINE_CONFIG_END From 25565246d887a6da10494833f5d7ce5821242194 Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 22 Nov 2017 04:42:43 +0100 Subject: [PATCH 09/35] MT #00525 (nw) --- src/mame/drivers/metro.cpp | 32 ++++++++++++++++++++++++++------ src/mame/includes/metro.h | 2 ++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp index 6b0fe78b2f5..6734362c730 100644 --- a/src/mame/drivers/metro.cpp +++ b/src/mame/drivers/metro.cpp @@ -108,7 +108,6 @@ driver modified by Hau #include "sound/ym2413.h" #include "sound/2610intf.h" #include "sound/ymf278b.h" - #include "speaker.h" @@ -226,6 +225,25 @@ INTERRUPT_GEN_MEMBER(metro_state::metro_periodic_interrupt) update_irq_state(); } +TIMER_DEVICE_CALLBACK_MEMBER(metro_state::bangball_scanline) +{ + int scanline = param; + + // vblank irq + if(scanline == 224) + { + m_requested_int[m_vblank_bit] = 1; + m_requested_int[4] = 1; // ??? + update_irq_state(); + } + else if(scanline < 224 && (*m_irq_enable & 2) == 0) + { + // pretty likely hblank irq (pressing a button when clearing a stage) + m_requested_int[1] = 1; + update_irq_state(); + } +} + /* lev 2-7 (lev 1 seems sound related) */ INTERRUPT_GEN_MEMBER(metro_state::karatour_interrupt) { @@ -3152,9 +3170,10 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( bangball, msgogo ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(bangball_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt) - MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 60) // ? - + MCFG_CPU_VBLANK_INT_REMOVE() + MCFG_CPU_PERIODIC_INT_REMOVE() + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", metro_state, bangball_scanline, "screen", 0, 1) + // doesn't like 58.2 Hz MCFG_DEVICE_MODIFY("screen") MCFG_SCREEN_REFRESH_RATE(60) @@ -3163,8 +3182,9 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( batlbubl, msgogo ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(batlbubl_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", metro_state, metro_vblank_interrupt) - MCFG_CPU_PERIODIC_INT_DRIVER(metro_state, metro_periodic_interrupt, 60) // ? + MCFG_CPU_VBLANK_INT_REMOVE() + MCFG_CPU_PERIODIC_INT_REMOVE() + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", metro_state, bangball_scanline, "screen", 0, 1) // doesn't like 58.2 Hz MCFG_DEVICE_MODIFY("screen") diff --git a/src/mame/includes/metro.h b/src/mame/includes/metro.h index d1692e70cb0..7c66b057575 100644 --- a/src/mame/includes/metro.h +++ b/src/mame/includes/metro.h @@ -13,6 +13,7 @@ #include "video/imagetek_i4100.h" #include "machine/eepromser.h" #include "machine/gen_latch.h" +#include "machine/timer.h" #include "screen.h" class metro_state : public driver_device @@ -102,6 +103,7 @@ public: uint32_t screen_update_psac_vdp2_mix(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(metro_vblank_interrupt); INTERRUPT_GEN_MEMBER(metro_periodic_interrupt); + TIMER_DEVICE_CALLBACK_MEMBER(bangball_scanline); INTERRUPT_GEN_MEMBER(karatour_interrupt); INTERRUPT_GEN_MEMBER(puzzlet_interrupt); IRQ_CALLBACK_MEMBER(metro_irq_callback); From 5ad0518db70c2e750d5a1562dcdffbd9b0d91cde Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 21 Nov 2017 22:58:32 -0500 Subject: [PATCH 10/35] cit220p: More devices (nw) --- src/mame/drivers/cit220.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/mame/drivers/cit220.cpp b/src/mame/drivers/cit220.cpp index 2ea7b279959..0cb7d789172 100644 --- a/src/mame/drivers/cit220.cpp +++ b/src/mame/drivers/cit220.cpp @@ -11,6 +11,8 @@ enough to provoke a lawsuit, which led to its eventual withdrawal in favor of it #include "emu.h" #include "cpu/i8085/i8085.h" +#include "machine/i8251.h" +#include "machine/mc68681.h" #include "video/scn2674.h" #include "screen.h" @@ -37,17 +39,23 @@ private: WRITE_LINE_MEMBER(cit220_state::sod_w) { - logerror("SOD set %s\n", state ? "high" : "low"); + // controls access to memory at Exxx? } static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, cit220_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_REGION("maincpu", 0) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0xa000, 0xa1ff) AM_ROM AM_REGION("eeprom", 0x800) + AM_RANGE(0xe000, 0xe7ff) AM_RAM // ??? ADDRESS_MAP_END static ADDRESS_MAP_START( io_map, AS_IO, 8, cit220_state ) + AM_RANGE(0x00, 0x0f) AM_DEVREADWRITE("duart", mc68681_device, read, write) + AM_RANGE(0x10, 0x10) AM_DEVREADWRITE("usart", i8251_device, data_r, data_w) + AM_RANGE(0x11, 0x11) AM_DEVREADWRITE("usart", i8251_device, status_r, control_w) AM_RANGE(0x20, 0x27) AM_DEVREADWRITE("avdc", scn2674_device, read, write) + AM_RANGE(0xa0, 0xa0) AM_UNMAP // ??? + AM_RANGE(0xc0, 0xc0) AM_UNMAP // ??? ADDRESS_MAP_END @@ -56,6 +64,7 @@ SCN2674_DRAW_CHARACTER_MEMBER(cit220_state::draw_character) } static ADDRESS_MAP_START( vram_map, 0, 8, cit220_state ) + AM_RANGE(0x0000, 0x27ff) AM_NOP ADDRESS_MAP_END @@ -82,6 +91,11 @@ static MACHINE_CONFIG_START( cit220p ) MCFG_SCN2674_DRAW_CHARACTER_CALLBACK_OWNER(cit220_state, draw_character) MCFG_DEVICE_ADDRESS_MAP(0, vram_map) MCFG_VIDEO_SET_SCREEN("screen") + + MCFG_DEVICE_ADD("duart", MC68681, 3686400) + MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", I8085_RST55_LINE)) + + MCFG_DEVICE_ADD("usart", I8251, 3000000) MACHINE_CONFIG_END From 73b75f5c705e361170c6fba5af645ecab1998653 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 01:24:05 -0500 Subject: [PATCH 11/35] mc68681: Distinguish SCN2681 and MC68681 DUART types --- src/devices/machine/mc68681.cpp | 265 +++++++++++++++++--------------- src/devices/machine/mc68681.h | 95 +++++++----- src/mame/drivers/cit220.cpp | 4 +- src/mame/drivers/microterm.cpp | 14 +- src/mame/includes/apollo.h | 2 +- src/mame/machine/apollo.cpp | 6 +- 6 files changed, 214 insertions(+), 172 deletions(-) diff --git a/src/devices/machine/mc68681.cpp b/src/devices/machine/mc68681.cpp index c8bb75f0b1c..c6717e2938b 100644 --- a/src/devices/machine/mc68681.cpp +++ b/src/devices/machine/mc68681.cpp @@ -16,7 +16,7 @@ #include "emu.h" #include "mc68681.h" -//#define VERBOSE 1 +#define VERBOSE 1 //#define LOG_OUTPUT_FUNC printf #include "logmacro.h" @@ -60,17 +60,18 @@ static const int baud_rate_ACR_1[] = { 75, 110, 134, 150, 300, 600, 1200, 2000, #define CHAND_TAG "chd" // device type definition +DEFINE_DEVICE_TYPE(SCN2681, scn2681_device, "scn2681", "SCN2681 DUART") DEFINE_DEVICE_TYPE(MC68681, mc68681_device, "mc68681", "MC68681 DUART") DEFINE_DEVICE_TYPE(SC28C94, sc28c94_device, "sc28c94", "SC28C94 QUART") DEFINE_DEVICE_TYPE(MC68340_DUART, mc68340_duart_device, "mc68340duart", "MC68340 DUART Device") -DEFINE_DEVICE_TYPE(MC68681_CHANNEL, mc68681_channel, "mc68681_channel", "MC68681 DUART channel") +DEFINE_DEVICE_TYPE(DUART_CHANNEL, duart_channel, "duart_channel", "DUART channel") //************************************************************************** // LIVE DEVICE //************************************************************************** -mc68681_base_device::mc68681_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) +duart_base_device::duart_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), m_chanA(*this, CHANA_TAG), m_chanB(*this, CHANB_TAG), @@ -88,18 +89,23 @@ mc68681_base_device::mc68681_base_device(const machine_config &mconfig, device_t ip5clk(0), ip6clk(0), ACR(0), - m_read_vector(false), IP_last_state(0) { } +scn2681_device::scn2681_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : duart_base_device(mconfig, SCN2681, tag, owner, clock) +{ +} + mc68681_device::mc68681_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : mc68681_base_device(mconfig, MC68681, tag, owner, clock) + : duart_base_device(mconfig, MC68681, tag, owner, clock), + m_read_vector(false) { } sc28c94_device::sc28c94_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : mc68681_base_device(mconfig, SC28C94, tag, owner, clock) + : duart_base_device(mconfig, SC28C94, tag, owner, clock) { } @@ -111,7 +117,7 @@ sc28c94_device::sc28c94_device(const machine_config &mconfig, const char *tag, d // TODO: A lot of subtle differences and also detect misuse of unavailable registers as they should be ignored //-------------------------------------------------------------------------------------------------------------------- mc68340_duart_device::mc68340_duart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) - : mc68681_base_device(mconfig, type, tag, owner, clock) + : duart_base_device(mconfig, type, tag, owner, clock) { } @@ -125,9 +131,9 @@ mc68340_duart_device::mc68340_duart_device(const machine_config &mconfig, const // the external clocks //------------------------------------------------- -void mc68681_base_device::static_set_clocks(device_t &device, int clk3, int clk4, int clk5, int clk6) +void duart_base_device::static_set_clocks(device_t &device, int clk3, int clk4, int clk5, int clk6) { - mc68681_base_device &duart = downcast(device); + duart_base_device &duart = downcast(device); duart.ip3clk = clk3; duart.ip4clk = clk4; duart.ip5clk = clk5; @@ -138,7 +144,7 @@ void mc68681_base_device::static_set_clocks(device_t &device, int clk3, int clk4 device start callback -------------------------------------------------*/ -void mc68681_base_device::device_start() +void duart_base_device::device_start() { write_irq.resolve_safe(); write_a_tx.resolve_safe(); @@ -148,56 +154,70 @@ void mc68681_base_device::device_start() read_inport.resolve(); write_outport.resolve_safe(); - duart_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(mc68681_base_device::duart_timer_callback),this), nullptr); + duart_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(duart_base_device::duart_timer_callback),this), nullptr); save_item(NAME(ACR)); save_item(NAME(IMR)); save_item(NAME(ISR)); - save_item(NAME(IVR)); save_item(NAME(OPCR)); save_item(NAME(CTR)); save_item(NAME(IP_last_state)); save_item(NAME(half_period)); } +void mc68681_device::device_start() +{ + duart_base_device::device_start(); + + save_item(NAME(m_read_vector)); + save_item(NAME(IVR)); +} + /*------------------------------------------------- device reset callback -------------------------------------------------*/ -void mc68681_base_device::device_reset() +void duart_base_device::device_reset() { ACR = 0; /* Interrupt Vector Register */ - IVR = 0x0f; /* Interrupt Vector Register */ IMR = 0; /* Interrupt Mask Register */ ISR = 0; /* Interrupt Status Register */ OPCR = 0; /* Output Port Conf. Register */ OPR = 0; /* Output Port Register */ CTR.d = 0; /* Counter/Timer Preset Value */ - m_read_vector = false; // "reset clears internal registers (SRA, SRB, IMR, ISR, OPR, OPCR) puts OP0-7 in the high state, stops the counter/timer, and puts channels a/b in the inactive state" IPCR = 0; + write_irq(CLEAR_LINE); write_outport(OPR ^ 0xff); } -MACHINE_CONFIG_MEMBER( mc68681_base_device::device_add_mconfig ) - MCFG_DEVICE_ADD(CHANA_TAG, MC68681_CHANNEL, 0) - MCFG_DEVICE_ADD(CHANB_TAG, MC68681_CHANNEL, 0) +void mc68681_device::device_reset() +{ + duart_base_device::device_reset(); + + IVR = 0x0f; /* Interrupt Vector Register */ + m_read_vector = false; +} + +MACHINE_CONFIG_MEMBER( duart_base_device::device_add_mconfig ) + MCFG_DEVICE_ADD(CHANA_TAG, DUART_CHANNEL, 0) + MCFG_DEVICE_ADD(CHANB_TAG, DUART_CHANNEL, 0) MACHINE_CONFIG_END MACHINE_CONFIG_MEMBER( sc28c94_device::device_add_mconfig ) - MCFG_DEVICE_ADD(CHANA_TAG, MC68681_CHANNEL, 0) - MCFG_DEVICE_ADD(CHANB_TAG, MC68681_CHANNEL, 0) - MCFG_DEVICE_ADD(CHANC_TAG, MC68681_CHANNEL, 0) - MCFG_DEVICE_ADD(CHAND_TAG, MC68681_CHANNEL, 0) + MCFG_DEVICE_ADD(CHANA_TAG, DUART_CHANNEL, 0) + MCFG_DEVICE_ADD(CHANB_TAG, DUART_CHANNEL, 0) + MCFG_DEVICE_ADD(CHANC_TAG, DUART_CHANNEL, 0) + MCFG_DEVICE_ADD(CHAND_TAG, DUART_CHANNEL, 0) MACHINE_CONFIG_END MACHINE_CONFIG_MEMBER( mc68340_duart_device::device_add_mconfig ) - MCFG_DEVICE_ADD(CHANA_TAG, MC68681_CHANNEL, 0) - MCFG_DEVICE_ADD(CHANB_TAG, MC68681_CHANNEL, 0) + MCFG_DEVICE_ADD(CHANA_TAG, DUART_CHANNEL, 0) + MCFG_DEVICE_ADD(CHANB_TAG, DUART_CHANNEL, 0) MACHINE_CONFIG_END -void mc68681_base_device::update_interrupts() +void duart_base_device::update_interrupts() { /* update SR state and update interrupt ISR state for the following bits: SRn: bits 7-4: handled elsewhere. @@ -223,7 +243,6 @@ void mc68681_base_device::update_interrupts() { LOG( "68681: Interrupt line not active (IMR & ISR = %02X)\n", ISR & IMR); write_irq(CLEAR_LINE); - m_read_vector = false; // clear IACK too } if(OPCR & 0xf0) { @@ -259,7 +278,13 @@ void mc68681_base_device::update_interrupts() } } -double mc68681_base_device::duart68681_get_ct_rate() +void mc68681_device::update_interrupts() +{ + if (!irq_pending()) + m_read_vector = false; // clear IACK too +} + +double duart_base_device::get_ct_rate() { double rate = 0.0f; @@ -301,19 +326,19 @@ double mc68681_base_device::duart68681_get_ct_rate() return rate; } -uint16_t mc68681_base_device::duart68681_get_ct_count() +uint16_t duart_base_device::get_ct_count() { - double clock = duart68681_get_ct_rate(); + double clock = get_ct_rate(); return (duart_timer->remaining() * clock).as_double(); } -void mc68681_base_device::duart68681_start_ct(int count) +void duart_base_device::start_ct(int count) { - double clock = duart68681_get_ct_rate(); + double clock = get_ct_rate(); duart_timer->adjust(attotime::from_hz(clock) * count, 0); } -TIMER_CALLBACK_MEMBER( mc68681_base_device::duart_timer_callback ) +TIMER_CALLBACK_MEMBER( duart_base_device::duart_timer_callback ) { if (ACR & 0x40) { @@ -353,24 +378,39 @@ TIMER_CALLBACK_MEMBER( mc68681_base_device::duart_timer_callback ) } if (!half_period) - { - ISR |= INT_COUNTER_READY; - update_interrupts(); - } + set_ISR_bits(INT_COUNTER_READY); int count = std::max(CTR.w.l, uint16_t(1)); - duart68681_start_ct(count); + start_ct(count); } else { // Counter mode - ISR |= INT_COUNTER_READY; - update_interrupts(); - duart68681_start_ct(0xffff); + set_ISR_bits(INT_COUNTER_READY); + start_ct(0xffff); } } +READ8_MEMBER( mc68681_device::read ) +{ + if (offset == 0x0c) + return IVR; + + uint8_t r = duart_base_device::read(space, offset, mem_mask); + + if (offset == 0x0d) + { + // bit 6 is /IACK (note the active-low) + if (m_read_vector) + r &= ~0x40; + else + r |= 0x40; + } + + return r; +} + READ8_MEMBER( mc68340_duart_device::read ) { uint8_t r = 0; @@ -390,7 +430,7 @@ READ8_MEMBER( mc68340_duart_device::read ) r = m_chanB->read_MR2(); break; default: - r = mc68681_base_device::read(space, offset, mem_mask); + r = duart_base_device::read(space, offset, mem_mask); } return r; } @@ -402,7 +442,7 @@ READ8_MEMBER( sc28c94_device::read ) if (offset < 0x10) { - return mc68681_base_device::read(space, offset, mem_mask); + return duart_base_device::read(space, offset, mem_mask); } switch (offset) @@ -423,7 +463,7 @@ READ8_MEMBER( sc28c94_device::read ) return r; } -READ8_MEMBER( mc68681_base_device::read ) +READ8_MEMBER( duart_base_device::read ) { uint8_t r = 0xff; @@ -445,8 +485,7 @@ READ8_MEMBER( mc68681_base_device::read ) // reading this clears all the input change bits IPCR &= 0x0f; - ISR &= ~INT_INPUT_PORT_CHANGE; - update_interrupts(); + clear_ISR_bits(INT_INPUT_PORT_CHANGE); } break; @@ -455,11 +494,11 @@ READ8_MEMBER( mc68681_base_device::read ) break; case 0x06: /* CUR */ - r = duart68681_get_ct_count() >> 8; + r = get_ct_count() >> 8; break; case 0x07: /* CLR */ - r = duart68681_get_ct_count() & 0xff; + r = get_ct_count() & 0xff; break; case 0x08: /* MR1B/MR2B */ @@ -483,16 +522,6 @@ READ8_MEMBER( mc68681_base_device::read ) } r |= 0x80; // bit 7 is always set - - // bit 6 is /IACK (note the active-low) - if (m_read_vector) - { - r &= ~0x40; - } - else - { - r |= 0x40; - } break; case 0x0e: /* Start counter command */ @@ -504,18 +533,17 @@ READ8_MEMBER( mc68681_base_device::read ) } int count = std::max(CTR.w.l, uint16_t(1)); - duart68681_start_ct(count); + start_ct(count); break; } case 0x0f: /* Stop counter command */ - ISR &= ~INT_COUNTER_READY; + clear_ISR_bits(INT_COUNTER_READY); // Stop the counter only if (!(ACR & 0x40)) duart_timer->adjust(attotime::never); - update_interrupts(); break; default: @@ -527,6 +555,14 @@ READ8_MEMBER( mc68681_base_device::read ) return r; } +WRITE8_MEMBER( mc68681_device::write ) +{ + if (offset == 0x0c) + IVR = data; + else + duart_base_device::write(space, offset, data, mem_mask); +} + WRITE8_MEMBER( mc68340_duart_device::write ) { //printf("Duart write %02x -> %02x\n", data, offset); @@ -546,7 +582,7 @@ WRITE8_MEMBER( mc68340_duart_device::write ) m_chanB->write_MR2(data); break; default: - mc68681_base_device::write(space, offset, data, mem_mask); + duart_base_device::write(space, offset, data, mem_mask); } } @@ -556,7 +592,7 @@ WRITE8_MEMBER( sc28c94_device::write ) if (offset < 0x10) { - mc68681_base_device::write(space, offset, data, mem_mask); + duart_base_device::write(space, offset, data, mem_mask); } switch(offset) @@ -577,7 +613,7 @@ WRITE8_MEMBER( sc28c94_device::write ) } } -WRITE8_MEMBER( mc68681_base_device::write ) +WRITE8_MEMBER( duart_base_device::write ) { offset &= 0x0f; LOG( "Writing 68681 (%s) reg %x (%s) with %04x\n", tag(), offset, duart68681_reg_write_names[offset], data ); @@ -605,7 +641,7 @@ WRITE8_MEMBER( mc68681_base_device::write ) uint16_t count = std::max(CTR.w.l, uint16_t(1)); half_period = 0; - duart68681_start_ct(count); + start_ct(count); } else { @@ -616,15 +652,12 @@ WRITE8_MEMBER( mc68681_base_device::write ) // check for pending input port delta interrupts if ((((IPCR>>4) & data) & 0x0f) != 0) - { - ISR |= INT_INPUT_PORT_CHANGE; - } + set_ISR_bits(INT_INPUT_PORT_CHANGE); m_chanA->ACR_updated(); m_chanB->ACR_updated(); m_chanA->update_interrupts(); m_chanB->update_interrupts(); - update_interrupts(); break; } case 0x05: /* IMR */ @@ -647,10 +680,6 @@ WRITE8_MEMBER( mc68681_base_device::write ) m_chanB->write_chan_reg(offset&3, data); break; - case 0x0c: /* IVR */ - IVR = data; - break; - case 0x0d: /* OPCR */ if (((data & 0xf) != 0x00) && ((data & 0xc) != 0x4)) logerror( "68681 (%s): Unhandled OPCR value: %02x\n", tag(), data); @@ -669,7 +698,7 @@ WRITE8_MEMBER( mc68681_base_device::write ) } } -WRITE_LINE_MEMBER( mc68681_base_device::ip0_w ) +WRITE_LINE_MEMBER( duart_base_device::ip0_w ) { uint8_t newIP = (IP_last_state & ~0x01) | ((state == ASSERT_LINE) ? 1 : 0); @@ -680,16 +709,13 @@ WRITE_LINE_MEMBER( mc68681_base_device::ip0_w ) IPCR |= 0x10; if (ACR & 1) - { - ISR |= INT_INPUT_PORT_CHANGE; - update_interrupts(); - } + set_ISR_bits(INT_INPUT_PORT_CHANGE); } IP_last_state = newIP; } -WRITE_LINE_MEMBER( mc68681_base_device::ip1_w ) +WRITE_LINE_MEMBER( duart_base_device::ip1_w ) { uint8_t newIP = (IP_last_state & ~0x02) | ((state == ASSERT_LINE) ? 2 : 0); @@ -700,16 +726,13 @@ WRITE_LINE_MEMBER( mc68681_base_device::ip1_w ) IPCR |= 0x20; if (ACR & 2) - { - ISR |= INT_INPUT_PORT_CHANGE; - update_interrupts(); - } + set_ISR_bits(INT_INPUT_PORT_CHANGE); } IP_last_state = newIP; } -WRITE_LINE_MEMBER( mc68681_base_device::ip2_w ) +WRITE_LINE_MEMBER( duart_base_device::ip2_w ) { uint8_t newIP = (IP_last_state & ~0x04) | ((state == ASSERT_LINE) ? 4 : 0); @@ -720,16 +743,13 @@ WRITE_LINE_MEMBER( mc68681_base_device::ip2_w ) IPCR |= 0x40; if (ACR & 4) - { - ISR |= INT_INPUT_PORT_CHANGE; - update_interrupts(); - } + set_ISR_bits(INT_INPUT_PORT_CHANGE); } IP_last_state = newIP; } -WRITE_LINE_MEMBER( mc68681_base_device::ip3_w ) +WRITE_LINE_MEMBER( duart_base_device::ip3_w ) { uint8_t newIP = (IP_last_state & ~0x08) | ((state == ASSERT_LINE) ? 8 : 0); @@ -740,37 +760,34 @@ WRITE_LINE_MEMBER( mc68681_base_device::ip3_w ) IPCR |= 0x80; if (ACR & 8) - { - ISR |= INT_INPUT_PORT_CHANGE; - update_interrupts(); - } + set_ISR_bits(INT_INPUT_PORT_CHANGE); } IP_last_state = newIP; } -WRITE_LINE_MEMBER( mc68681_base_device::ip4_w ) +WRITE_LINE_MEMBER( duart_base_device::ip4_w ) { uint8_t newIP = (IP_last_state & ~0x10) | ((state == ASSERT_LINE) ? 0x10 : 0); // TODO: special mode for ip4 (Ch. A Rx clock) IP_last_state = newIP; } -WRITE_LINE_MEMBER( mc68681_base_device::ip5_w ) +WRITE_LINE_MEMBER( duart_base_device::ip5_w ) { uint8_t newIP = (IP_last_state & ~0x20) | ((state == ASSERT_LINE) ? 0x20 : 0); // TODO: special mode for ip5 (Ch. B Tx clock) IP_last_state = newIP; } -WRITE_LINE_MEMBER( mc68681_base_device::ip6_w ) +WRITE_LINE_MEMBER( duart_base_device::ip6_w ) { uint8_t newIP = (IP_last_state & ~0x40) | ((state == ASSERT_LINE) ? 0x40 : 0); // TODO: special mode for ip6 (Ch. B Rx clock) IP_last_state = newIP; } -mc68681_channel *mc68681_base_device::get_channel(int chan) +duart_channel *duart_base_device::get_channel(int chan) { if (chan == 0) { @@ -780,7 +797,7 @@ mc68681_channel *mc68681_base_device::get_channel(int chan) return m_chanB; } -int mc68681_base_device::calc_baud(int ch, uint8_t data) +int duart_base_device::calc_baud(int ch, uint8_t data) { int baud_rate; @@ -825,20 +842,28 @@ int mc68681_base_device::calc_baud(int ch, uint8_t data) return baud_rate; } -void mc68681_base_device::clear_ISR_bits(int mask) +void duart_base_device::clear_ISR_bits(int mask) { - ISR &= ~mask; + if ((ISR & mask) != 0) + { + ISR &= ~mask; + update_interrupts(); + } } -void mc68681_base_device::set_ISR_bits(int mask) +void duart_base_device::set_ISR_bits(int mask) { - ISR |= mask; + if ((~ISR & mask) != 0) + { + ISR |= mask; + update_interrupts(); + } } // DUART channel class stuff -mc68681_channel::mc68681_channel(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, MC68681_CHANNEL, tag, owner, clock), +duart_channel::duart_channel(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, DUART_CHANNEL, tag, owner, clock), device_serial_interface(mconfig, *this), MR1(0), MR2(0), @@ -849,9 +874,9 @@ mc68681_channel::mc68681_channel(const machine_config &mconfig, const char *tag, { } -void mc68681_channel::device_start() +void duart_channel::device_start() { - m_uart = downcast(owner()); + m_uart = downcast(owner()); m_ch = m_uart->get_ch(this); // get our channel number save_item(NAME(CR)); @@ -872,7 +897,7 @@ void mc68681_channel::device_start() save_item(NAME(tx_ready)); } -void mc68681_channel::device_reset() +void duart_channel::device_reset() { write_CR(0x10); // reset MR write_CR(0x20); // reset Rx @@ -886,7 +911,7 @@ void mc68681_channel::device_reset() } // serial device virtual overrides -void mc68681_channel::rcv_complete() +void duart_channel::rcv_complete() { receive_register_extract(); @@ -910,7 +935,7 @@ void mc68681_channel::rcv_complete() } } -void mc68681_channel::tra_complete() +void duart_channel::tra_complete() { //printf("%s ch %d Tx complete\n", tag(), m_ch); tx_ready = 1; @@ -943,7 +968,7 @@ void mc68681_channel::tra_complete() update_interrupts(); } -void mc68681_channel::tra_callback() +void duart_channel::tra_callback() { // don't actually send in loopback mode if ((MR2&0xC0) != 0x80) @@ -973,7 +998,7 @@ void mc68681_channel::tra_callback() } } -void mc68681_channel::update_interrupts() +void duart_channel::update_interrupts() { if (rx_enabled) { @@ -1067,12 +1092,10 @@ void mc68681_channel::update_interrupts() } } - m_uart->update_interrupts(); - //logerror("DEBUG: 68681 int check: after receiver test, SR%c is %02X, ISR is %02X\n", (ch+0x41), duart68681->channel[ch].SR, duart68681->ISR); } -uint8_t mc68681_channel::read_rx_fifo() +uint8_t duart_channel::read_rx_fifo() { uint8_t rv; @@ -1099,7 +1122,7 @@ uint8_t mc68681_channel::read_rx_fifo() return rv; } -uint8_t mc68681_channel::read_chan_reg(int reg) +uint8_t duart_channel::read_chan_reg(int reg) { uint8_t rv = 0xff; @@ -1132,7 +1155,7 @@ uint8_t mc68681_channel::read_chan_reg(int reg) return rv; } -void mc68681_channel::write_chan_reg(int reg, uint8_t data) +void duart_channel::write_chan_reg(int reg, uint8_t data) { switch (reg) { @@ -1159,7 +1182,7 @@ void mc68681_channel::write_chan_reg(int reg, uint8_t data) } } -void mc68681_channel::write_MR(uint8_t data) +void duart_channel::write_MR(uint8_t data) { if ( MR_ptr == 0 ) { @@ -1174,7 +1197,7 @@ void mc68681_channel::write_MR(uint8_t data) update_interrupts(); } -void mc68681_channel::recalc_framing() +void duart_channel::recalc_framing() { parity_t parity = PARITY_NONE; switch ((MR1>>3) & 3) @@ -1234,7 +1257,7 @@ void mc68681_channel::recalc_framing() set_data_frame(1, (MR1 & 3)+5, parity, stopbits); } -void mc68681_channel::write_CR(uint8_t data) +void duart_channel::write_CR(uint8_t data) { CR = data; @@ -1312,7 +1335,7 @@ void mc68681_channel::write_CR(uint8_t data) update_interrupts(); } -void mc68681_channel::write_TX(uint8_t data) +void duart_channel::write_TX(uint8_t data) { tx_data = data; @@ -1337,12 +1360,12 @@ void mc68681_channel::write_TX(uint8_t data) update_interrupts(); } -void mc68681_channel::ACR_updated() +void duart_channel::ACR_updated() { write_chan_reg(1, CSR); } -uint8_t mc68681_channel::get_chan_CSR() +uint8_t duart_channel::get_chan_CSR() { return CSR; } diff --git a/src/devices/machine/mc68681.h b/src/devices/machine/mc68681.h index 694e6a45246..82a31f72b65 100644 --- a/src/devices/machine/mc68681.h +++ b/src/devices/machine/mc68681.h @@ -13,23 +13,23 @@ MCFG_DEVICE_REPLACE(_tag, MC68681, _clock) #define MCFG_MC68681_IRQ_CALLBACK(_cb) \ - devcb = &mc68681_base_device::set_irq_cb(*device, DEVCB_##_cb); + devcb = &duart_base_device::set_irq_cb(*device, DEVCB_##_cb); #define MCFG_MC68681_A_TX_CALLBACK(_cb) \ - devcb = &mc68681_base_device::set_a_tx_cb(*device, DEVCB_##_cb); + devcb = &duart_base_device::set_a_tx_cb(*device, DEVCB_##_cb); #define MCFG_MC68681_B_TX_CALLBACK(_cb) \ - devcb = &mc68681_base_device::set_b_tx_cb(*device, DEVCB_##_cb); + devcb = &duart_base_device::set_b_tx_cb(*device, DEVCB_##_cb); // deprecated: use ipX_w() instead #define MCFG_MC68681_INPORT_CALLBACK(_cb) \ - devcb = &mc68681_base_device::set_inport_cb(*device, DEVCB_##_cb); + devcb = &duart_base_device::set_inport_cb(*device, DEVCB_##_cb); #define MCFG_MC68681_OUTPORT_CALLBACK(_cb) \ - devcb = &mc68681_base_device::set_outport_cb(*device, DEVCB_##_cb); + devcb = &duart_base_device::set_outport_cb(*device, DEVCB_##_cb); #define MCFG_MC68681_SET_EXTERNAL_CLOCKS(_a, _b, _c, _d) \ - mc68681_base_device::static_set_clocks(*device, _a, _b, _c, _d); + duart_base_device::static_set_clocks(*device, _a, _b, _c, _d); // SC28C94 specific callbacks #define MCFG_SC28C94_ADD(_tag, _clock) \ @@ -48,13 +48,13 @@ #define MC68681_RX_FIFO_SIZE 3 // forward declaration -class mc68681_base_device; +class duart_base_device; -// mc68681_channel class -class mc68681_channel : public device_t, public device_serial_interface +// duart_channel class +class duart_channel : public device_t, public device_serial_interface { public: - mc68681_channel(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + duart_channel(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // device-level overrides virtual void device_start() override; @@ -107,7 +107,7 @@ private: uint8_t tx_data; uint8_t tx_ready; - mc68681_base_device *m_uart; + duart_base_device *m_uart; void write_MR(uint8_t data); void write_CR(uint8_t data); @@ -115,15 +115,15 @@ private: void recalc_framing(); }; -class mc68681_base_device : public device_t +class duart_base_device : public device_t { - friend class mc68681_channel; + friend class duart_channel; public: - required_device m_chanA; - required_device m_chanB; - optional_device m_chanC; - optional_device m_chanD; + required_device m_chanA; + required_device m_chanB; + optional_device m_chanC; + optional_device m_chanD; // inline configuration helpers static void static_set_clocks(device_t &device, int clk3, int clk4, int clk5, int clk6); @@ -131,16 +131,15 @@ public: // API virtual DECLARE_READ8_MEMBER(read); virtual DECLARE_WRITE8_MEMBER(write); - uint8_t get_irq_vector() { m_read_vector = true; return IVR; } DECLARE_WRITE_LINE_MEMBER( rx_a_w ) { m_chanA->device_serial_interface::rx_w((uint8_t)state); } DECLARE_WRITE_LINE_MEMBER( rx_b_w ) { m_chanB->device_serial_interface::rx_w((uint8_t)state); } - template static devcb_base &set_irq_cb(device_t &device, Object &&cb) { return downcast(device).write_irq.set_callback(std::forward(cb)); } - template static devcb_base &set_a_tx_cb(device_t &device, Object &&cb) { return downcast(device).write_a_tx.set_callback(std::forward(cb)); } - template static devcb_base &set_b_tx_cb(device_t &device, Object &&cb) { return downcast(device).write_b_tx.set_callback(std::forward(cb)); } - template static devcb_base &set_inport_cb(device_t &device, Object &&cb) { return downcast(device).read_inport.set_callback(std::forward(cb)); } - template static devcb_base &set_outport_cb(device_t &device, Object &&cb) { return downcast(device).write_outport.set_callback(std::forward(cb)); } + template static devcb_base &set_irq_cb(device_t &device, Object &&cb) { return downcast(device).write_irq.set_callback(std::forward(cb)); } + template static devcb_base &set_a_tx_cb(device_t &device, Object &&cb) { return downcast(device).write_a_tx.set_callback(std::forward(cb)); } + template static devcb_base &set_b_tx_cb(device_t &device, Object &&cb) { return downcast(device).write_b_tx.set_callback(std::forward(cb)); } + template static devcb_base &set_inport_cb(device_t &device, Object &&cb) { return downcast(device).read_inport.set_callback(std::forward(cb)); } + template static devcb_base &set_outport_cb(device_t &device, Object &&cb) { return downcast(device).write_outport.set_callback(std::forward(cb)); } // new-style push handlers for input port bits DECLARE_WRITE_LINE_MEMBER( ip0_w ); @@ -151,8 +150,10 @@ public: DECLARE_WRITE_LINE_MEMBER( ip5_w ); DECLARE_WRITE_LINE_MEMBER( ip6_w ); + bool irq_pending() const { return (ISR & IMR) != 0; } + protected: - mc68681_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + duart_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides virtual void device_start() override; @@ -171,14 +172,11 @@ private: uint8_t ACR; /* Auxiliary Control Register */ uint8_t IMR; /* Interrupt Mask Register */ uint8_t ISR; /* Interrupt Status Register */ - uint8_t IVR; /* Interrupt Vector Register */ uint8_t OPCR; /* Output Port Conf. Register */ uint8_t OPR; /* Output Port Register */ PAIR CTR; /* Counter/Timer Preset Value */ uint8_t IPCR; /* Input Port Control Register */ - bool m_read_vector; // if this is read and IRQ is active, it counts as pulling IACK - /* state */ uint8_t IP_last_state; /* last state of IP bits */ @@ -186,15 +184,15 @@ private: uint8_t half_period; emu_timer *duart_timer; - double duart68681_get_ct_rate(); - uint16_t duart68681_get_ct_count(); - void duart68681_start_ct(int count); + double get_ct_rate(); + uint16_t get_ct_count(); + void start_ct(int count); int calc_baud(int ch, uint8_t data); void clear_ISR_bits(int mask); void set_ISR_bits(int mask); - void update_interrupts(); + virtual void update_interrupts(); - int get_ch(mc68681_channel *ch) + int get_ch(duart_channel *ch) { if (ch == m_chanA) { @@ -212,16 +210,36 @@ private: return 3; } - mc68681_channel *get_channel(int chan); + duart_channel *get_channel(int chan); }; -class mc68681_device : public mc68681_base_device +class scn2681_device : public duart_base_device +{ +public: + scn2681_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + +class mc68681_device : public duart_base_device { public: mc68681_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual DECLARE_READ8_MEMBER(read) override; + virtual DECLARE_WRITE8_MEMBER(write) override; + uint8_t get_irq_vector() { m_read_vector = true; return IVR; } + +protected: + virtual void device_start() override; + virtual void device_reset() override; + virtual void update_interrupts() override; + +private: + bool m_read_vector; // if this is read and IRQ is active, it counts as pulling IACK + + uint8_t IVR; /* Interrupt Vector Register */ }; -class sc28c94_device : public mc68681_base_device +class sc28c94_device : public duart_base_device { public: sc28c94_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); @@ -241,10 +259,10 @@ protected: private: }; -class mc68340_duart_device : public mc68681_base_device +class mc68340_duart_device : public duart_base_device { public: - mc68340_duart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + mc68340_duart_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); virtual DECLARE_READ8_MEMBER(read) override; virtual DECLARE_WRITE8_MEMBER(write) override; @@ -254,9 +272,10 @@ protected: mc68340_duart_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); }; +DECLARE_DEVICE_TYPE(SCN2681, scn2681_device) DECLARE_DEVICE_TYPE(MC68681, mc68681_device) DECLARE_DEVICE_TYPE(SC28C94, sc28c94_device) DECLARE_DEVICE_TYPE(MC68340_DUART, mc68340_duart_device) -DECLARE_DEVICE_TYPE(MC68681_CHANNEL, mc68681_channel) +DECLARE_DEVICE_TYPE(DUART_CHANNEL, duart_channel) #endif // MAME_MACHINE_MC68681_H diff --git a/src/mame/drivers/cit220.cpp b/src/mame/drivers/cit220.cpp index 0cb7d789172..4247d0fd99c 100644 --- a/src/mame/drivers/cit220.cpp +++ b/src/mame/drivers/cit220.cpp @@ -50,7 +50,7 @@ static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, cit220_state ) ADDRESS_MAP_END static ADDRESS_MAP_START( io_map, AS_IO, 8, cit220_state ) - AM_RANGE(0x00, 0x0f) AM_DEVREADWRITE("duart", mc68681_device, read, write) + AM_RANGE(0x00, 0x0f) AM_DEVREADWRITE("duart", scn2681_device, read, write) AM_RANGE(0x10, 0x10) AM_DEVREADWRITE("usart", i8251_device, data_r, data_w) AM_RANGE(0x11, 0x11) AM_DEVREADWRITE("usart", i8251_device, status_r, control_w) AM_RANGE(0x20, 0x27) AM_DEVREADWRITE("avdc", scn2674_device, read, write) @@ -92,7 +92,7 @@ static MACHINE_CONFIG_START( cit220p ) MCFG_DEVICE_ADDRESS_MAP(0, vram_map) MCFG_VIDEO_SET_SCREEN("screen") - MCFG_DEVICE_ADD("duart", MC68681, 3686400) + MCFG_DEVICE_ADD("duart", SCN2681, 3686400) MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", I8085_RST55_LINE)) MCFG_DEVICE_ADD("usart", I8251, 3000000) diff --git a/src/mame/drivers/microterm.cpp b/src/mame/drivers/microterm.cpp index f0e2f4532d7..12a3027600d 100644 --- a/src/mame/drivers/microterm.cpp +++ b/src/mame/drivers/microterm.cpp @@ -44,7 +44,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mt420_io_map, AS_IO, 8, microterm_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0xe0, 0xef) AM_DEVREADWRITE("duart", mc68681_device, read, write) + AM_RANGE(0xe0, 0xef) AM_DEVREADWRITE("duart", scn2681_device, read, write) AM_RANGE(0xf0, 0xf3) AM_DEVREADWRITE("asci", mc2661_device, read, write) ADDRESS_MAP_END @@ -56,7 +56,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mt5510_io_map, AS_IO, 8, microterm_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x60, 0x6f) AM_DEVREADWRITE("duart", mc68681_device, read, write) + AM_RANGE(0x60, 0x6f) AM_DEVREADWRITE("duart", scn2681_device, read, write) ADDRESS_MAP_END static INPUT_PORTS_START( microterm ) @@ -67,7 +67,7 @@ static MACHINE_CONFIG_START( mt420 ) MCFG_CPU_PROGRAM_MAP(mt420_mem_map) MCFG_CPU_IO_MAP(mt420_io_map) - MCFG_DEVICE_ADD("duart", MC68681, XTAL_3_6864MHz) // SCN2681 + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) // MC2681 MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", 0)) MCFG_MC68681_OUTPORT_CALLBACK(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(5) MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("eeprom", eeprom_serial_93cxx_device, cs_write)) MCFG_DEVCB_BIT(4) @@ -76,7 +76,7 @@ static MACHINE_CONFIG_START( mt420 ) MCFG_DEVICE_ADD("asci", MC2661, XTAL_3_6864MHz) // SCN2641 MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") - MCFG_EEPROM_SERIAL_DO_CALLBACK(DEVWRITELINE("duart", mc68681_device, ip6_w)) + MCFG_EEPROM_SERIAL_DO_CALLBACK(DEVWRITELINE("duart", scn2681_device, ip6_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_START( mt5510 ) @@ -84,7 +84,7 @@ static MACHINE_CONFIG_START( mt5510 ) MCFG_CPU_PROGRAM_MAP(mt5510_mem_map) MCFG_CPU_IO_MAP(mt5510_io_map) - MCFG_DEVICE_ADD("duart", MC68681, XTAL_3_6864MHz) // SCN2681 + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", 0)) MCFG_MC68681_OUTPORT_CALLBACK(DEVWRITELINE("eeprom1", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(6) MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("eeprom2", eeprom_serial_93cxx_device, di_write)) MCFG_DEVCB_BIT(5) @@ -94,10 +94,10 @@ static MACHINE_CONFIG_START( mt5510 ) MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("eeprom2", eeprom_serial_93cxx_device, clk_write)) MCFG_DEVCB_BIT(3) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom1") - MCFG_EEPROM_SERIAL_DO_CALLBACK(DEVWRITELINE("duart", mc68681_device, ip6_w)) + MCFG_EEPROM_SERIAL_DO_CALLBACK(DEVWRITELINE("duart", scn2681_device, ip6_w)) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom2") - MCFG_EEPROM_SERIAL_DO_CALLBACK(DEVWRITELINE("duart", mc68681_device, ip5_w)) + MCFG_EEPROM_SERIAL_DO_CALLBACK(DEVWRITELINE("duart", scn2681_device, ip5_w)) MACHINE_CONFIG_END diff --git a/src/mame/includes/apollo.h b/src/mame/includes/apollo.h index e1006db7bee..b15bd7296b6 100644 --- a/src/mame/includes/apollo.h +++ b/src/mame/includes/apollo.h @@ -327,7 +327,7 @@ void apollo_csr_set_status_register(uint16_t mask, uint16_t data); #define MCFG_APOLLO_SIO_OUTPORT_CALLBACK(_cb) \ devcb = &apollo_sio::set_outport_cb(*device, DEVCB_##_cb); -class apollo_sio: public mc68681_base_device +class apollo_sio: public duart_base_device { public: apollo_sio(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp index 61a635e0f1e..5284d636c8f 100644 --- a/src/mame/machine/apollo.cpp +++ b/src/mame/machine/apollo.cpp @@ -713,7 +713,7 @@ TIMER_CALLBACK_MEMBER( apollo_state::apollo_rtc_timer ) #define VERBOSE 0 apollo_sio::apollo_sio(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - mc68681_base_device(mconfig, APOLLO_SIO, tag, owner, clock), + duart_base_device(mconfig, APOLLO_SIO, tag, owner, clock), m_csrb(0), m_ip6(0) { @@ -744,7 +744,7 @@ READ8_MEMBER( apollo_sio::read ) "1X/16X Test", "RHRB", "IVR", "Input Ports", "Start Counter", "Stop Counter" }; - int data = mc68681_base_device::read(space, offset/2, mem_mask); + int data = duart_base_device::read(space, offset/2, mem_mask); switch (offset / 2) { @@ -804,7 +804,7 @@ WRITE8_MEMBER( apollo_sio::write ) break; #endif } - mc68681_base_device::write(space, offset/2, data, mem_mask); + duart_base_device::write(space, offset/2, data, mem_mask); } // device type definition From fe1fe28b94f16e71d66ac58104278f215aeecad4 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 01:42:30 -0500 Subject: [PATCH 12/35] Don't accidentally deprive MC68681 of interrupts (nw) --- src/devices/machine/mc68681.cpp | 2 ++ src/devices/machine/mc68681.h | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/devices/machine/mc68681.cpp b/src/devices/machine/mc68681.cpp index c6717e2938b..720e20bddcd 100644 --- a/src/devices/machine/mc68681.cpp +++ b/src/devices/machine/mc68681.cpp @@ -280,6 +280,8 @@ void duart_base_device::update_interrupts() void mc68681_device::update_interrupts() { + duart_base_device::update_interrupts(); + if (!irq_pending()) m_read_vector = false; // clear IACK too } diff --git a/src/devices/machine/mc68681.h b/src/devices/machine/mc68681.h index 82a31f72b65..643d3d0bce6 100644 --- a/src/devices/machine/mc68681.h +++ b/src/devices/machine/mc68681.h @@ -165,6 +165,9 @@ protected: devcb_write8 write_outport; int32_t ip3clk, ip4clk, ip5clk, ip6clk; +protected: + virtual void update_interrupts(); + private: TIMER_CALLBACK_MEMBER( duart_timer_callback ); @@ -190,7 +193,6 @@ private: int calc_baud(int ch, uint8_t data); void clear_ISR_bits(int mask); void set_ISR_bits(int mask); - virtual void update_interrupts(); int get_ch(duart_channel *ch) { From 522692d891702e2ffab342884e9f4adfed7bb7ca Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 02:04:28 -0500 Subject: [PATCH 13/35] A few more that use SCN2681 (nw) --- src/mame/drivers/esqkt.cpp | 10 +++++----- src/mame/drivers/lb186.cpp | 8 ++++---- src/mame/drivers/slicer.cpp | 8 ++++---- src/mame/drivers/vt240.cpp | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/mame/drivers/esqkt.cpp b/src/mame/drivers/esqkt.cpp index a3e5d5ef931..7b886790275 100644 --- a/src/mame/drivers/esqkt.cpp +++ b/src/mame/drivers/esqkt.cpp @@ -8,7 +8,7 @@ Hardware: CPU: 68EC020-16 CPU - Serial/timers: SCN2681 (MC68681 clone) + Serial/timers: SCN2681 Sound: 2xES5506 Effects: ES5510 @@ -144,7 +144,7 @@ static ADDRESS_MAP_START( kt_map, AS_PROGRAM, 32, esqkt_state ) AM_RANGE(0x200000, 0x20003f) AM_DEVREADWRITE8("ensoniq", es5506_device, read, write, 0xffffffff) AM_RANGE(0x240000, 0x24003f) AM_DEVREADWRITE8("ensoniq2", es5506_device, read, write, 0xffffffff) AM_RANGE(0x280000, 0x2801ff) AM_DEVREADWRITE8("esp", es5510_device, host_r, host_w, 0xffffffff) - AM_RANGE(0x300000, 0x30001f) AM_DEVREADWRITE8("duart", mc68681_device, read, write, 0xffffffff) + AM_RANGE(0x300000, 0x30001f) AM_DEVREADWRITE8("duart", scn2681_device, read, write, 0xffffffff) AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("osram") ADDRESS_MAP_END @@ -209,9 +209,9 @@ static MACHINE_CONFIG_START( kt ) MCFG_DEVICE_DISABLE() MCFG_ESQPANEL2X16_SQ1_ADD("sq1panel") - MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) + MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", scn2681_device, rx_b_w)) - MCFG_MC68681_ADD("duart", 4000000) + MCFG_DEVICE_ADD("duart", SCN2681, 4000000) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esqkt_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(esqkt_state, duart_tx_a)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(esqkt_state, duart_tx_b)) @@ -220,7 +220,7 @@ static MACHINE_CONFIG_START( kt ) MCFG_MC68681_SET_EXTERNAL_CLOCKS(500000, 500000, 1000000, 1000000) MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin") - MCFG_MIDI_RX_HANDLER(DEVWRITELINE("duart", mc68681_device, rx_a_w)) // route MIDI Tx send directly to 68681 channel A Rx + MCFG_MIDI_RX_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_a_w)) // route MIDI Tx send directly to 68681 channel A Rx MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout") diff --git a/src/mame/drivers/lb186.cpp b/src/mame/drivers/lb186.cpp index f64fe453e8e..bab75030513 100644 --- a/src/mame/drivers/lb186.cpp +++ b/src/mame/drivers/lb186.cpp @@ -92,7 +92,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( lb186_io, AS_IO, 16, lb186_state ) ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x1000, 0x101f) AM_DEVREADWRITE8("sc2681", mc68681_device, read, write, 0x00ff) + AM_RANGE(0x1000, 0x101f) AM_DEVREADWRITE8("duart", scn2681_device, read, write, 0x00ff) AM_RANGE(0x1080, 0x108f) AM_DEVREADWRITE8("scsibus:7:ncr5380", ncr5380n_device, read, write, 0x00ff) AM_RANGE(0x1100, 0x1107) AM_DEVREADWRITE8("fdc", wd1772_device, read, write, 0x00ff) AM_RANGE(0x1180, 0x1181) AM_READWRITE8(scsi_dack_r, scsi_dack_w, 0x00ff) @@ -124,16 +124,16 @@ static MACHINE_CONFIG_START( lb186 ) MCFG_CPU_PROGRAM_MAP(lb186_map) MCFG_CPU_IO_MAP(lb186_io) - MCFG_MC68681_ADD("sc2681", XTAL_3_6864MHz) + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) MCFG_MC68681_IRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, int0_w)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("rs232_1", rs232_port_device, write_txd)) MCFG_MC68681_B_TX_CALLBACK(DEVWRITELINE("rs232_2", rs232_port_device, write_txd)) MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(lb186_state, sio_out_w)) MCFG_RS232_PORT_ADD("rs232_1", default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_a_w)) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_a_w)) MCFG_RS232_PORT_ADD("rs232_2", default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_b_w)) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_b_w)) MCFG_WD1772_ADD("fdc", XTAL_16MHz/2) MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, int2_w)) diff --git a/src/mame/drivers/slicer.cpp b/src/mame/drivers/slicer.cpp index ebe607a763a..4e9bca5b073 100644 --- a/src/mame/drivers/slicer.cpp +++ b/src/mame/drivers/slicer.cpp @@ -85,7 +85,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( slicer_io, AS_IO, 16, slicer_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x007f) AM_DEVREADWRITE8("fdc", fd1797_device, read, write, 0x00ff) //PCS0 - AM_RANGE(0x0080, 0x00ff) AM_DEVREADWRITE8("sc2681", mc68681_device, read, write, 0x00ff) //PCS1 + AM_RANGE(0x0080, 0x00ff) AM_DEVREADWRITE8("duart", scn2681_device, read, write, 0x00ff) //PCS1 AM_RANGE(0x0100, 0x017f) AM_WRITE8(drive_sel_w, 0x00ff) //PCS2 // TODO: 0x180 sets ack AM_RANGE(0x0180, 0x0181) AM_DEVREAD8("sasi_data_in", input_buffer_device, read, 0x00ff) AM_DEVWRITE8("sasi_data_out", output_latch_device, write, 0x00ff) //PCS3 @@ -104,16 +104,16 @@ static MACHINE_CONFIG_START( slicer ) MCFG_CPU_PROGRAM_MAP(slicer_map) MCFG_CPU_IO_MAP(slicer_io) - MCFG_MC68681_ADD("sc2681", XTAL_3_6864MHz) + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) MCFG_MC68681_IRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, int0_w)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("rs232_1", rs232_port_device, write_txd)) MCFG_MC68681_B_TX_CALLBACK(DEVWRITELINE("rs232_2", rs232_port_device, write_txd)) MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(slicer_state, sio_out_w)) MCFG_RS232_PORT_ADD("rs232_1", default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_a_w)) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_a_w)) MCFG_RS232_PORT_ADD("rs232_2", default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_b_w)) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_b_w)) MCFG_FD1797_ADD("fdc", XTAL_16MHz/2/8) MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("maincpu", i80186_cpu_device, int1_w)) diff --git a/src/mame/drivers/vt240.cpp b/src/mame/drivers/vt240.cpp index 09edcce9a5c..36fe38796d5 100644 --- a/src/mame/drivers/vt240.cpp +++ b/src/mame/drivers/vt240.cpp @@ -672,7 +672,7 @@ static MACHINE_CONFIG_START( vt240 ) MCFG_UPD7220_BLANK_CALLBACK(INPUTLINE("charcpu", I8085_RST55_LINE)) MCFG_VIDEO_SET_SCREEN("screen") - MCFG_MC68681_ADD("duart", XTAL_3_6864MHz) /* 2681 duart (not 68681!) */ + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(vt240_state, irq13_w)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("host", rs232_port_device, write_txd)) MCFG_MC68681_B_TX_CALLBACK(DEVWRITELINE("printer", rs232_port_device, write_txd)) From 5642f550622c929ae347d8e1f2653c43c0c6be8d Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 02:21:47 -0500 Subject: [PATCH 14/35] slicer: Add 74LS259 (nw) --- src/mame/drivers/slicer.cpp | 49 ++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/src/mame/drivers/slicer.cpp b/src/mame/drivers/slicer.cpp index 4e9bca5b073..872a69b7da4 100644 --- a/src/mame/drivers/slicer.cpp +++ b/src/mame/drivers/slicer.cpp @@ -7,6 +7,7 @@ #include "emu.h" #include "cpu/i86/i186.h" +#include "machine/74259.h" #include "machine/wd_fdc.h" #include "machine/mc68681.h" #include "bus/rs232/rs232.h" @@ -24,7 +25,7 @@ public: } DECLARE_WRITE8_MEMBER(sio_out_w); - DECLARE_WRITE8_MEMBER(drive_sel_w); + template DECLARE_WRITE_LINE_MEMBER(drive_sel_w); protected: required_device m_fdc; @@ -46,35 +47,18 @@ WRITE8_MEMBER(slicer_state::sio_out_w) } } -WRITE8_MEMBER(slicer_state::drive_sel_w) +template +WRITE_LINE_MEMBER(slicer_state::drive_sel_w) { - data &= 1; - switch(offset) - { - case 0: - m_sasi->write_sel(data); - break; - case 1: - m_sasi->write_rst(data); - break; - case 7: - m_fdc->dden_w(data); - break; + floppy_image_device *floppy; + char devname[8]; - default: - { - floppy_image_device *floppy; - char devname[8]; - unsigned int drive = 3 - (offset - 2); - if((drive > 3) || !data) - break; + if (!state) + return; - sprintf(devname, "%d", drive); - floppy = m_fdc->subdevice(devname)->get_device(); - m_fdc->set_floppy(floppy); - break; - } - } + sprintf(devname, "%d", drive); + floppy = m_fdc->subdevice(devname)->get_device(); + m_fdc->set_floppy(floppy); } static ADDRESS_MAP_START( slicer_map, AS_PROGRAM, 16, slicer_state ) @@ -86,7 +70,7 @@ static ADDRESS_MAP_START( slicer_io, AS_IO, 16, slicer_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x007f) AM_DEVREADWRITE8("fdc", fd1797_device, read, write, 0x00ff) //PCS0 AM_RANGE(0x0080, 0x00ff) AM_DEVREADWRITE8("duart", scn2681_device, read, write, 0x00ff) //PCS1 - AM_RANGE(0x0100, 0x017f) AM_WRITE8(drive_sel_w, 0x00ff) //PCS2 + AM_RANGE(0x0100, 0x0107) AM_MIRROR(0x0078) AM_DEVWRITE8("drivelatch", ls259_device, write_d0, 0x00ff) //PCS2 // TODO: 0x180 sets ack AM_RANGE(0x0180, 0x0181) AM_DEVREAD8("sasi_data_in", input_buffer_device, read, 0x00ff) AM_DEVWRITE8("sasi_data_out", output_latch_device, write, 0x00ff) //PCS3 AM_RANGE(0x0180, 0x0181) AM_DEVREAD8("sasi_ctrl_in", input_buffer_device, read, 0xff00) @@ -123,6 +107,15 @@ static MACHINE_CONFIG_START( slicer ) MCFG_FLOPPY_DRIVE_ADD("fdc:2", slicer_floppies, nullptr, floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("fdc:3", slicer_floppies, nullptr, floppy_image_device::default_floppy_formats) + MCFG_DEVICE_ADD("drivelatch", LS259, 0) // U29 + MCFG_ADDRESSABLE_LATCH_Q0_OUT_CB(DEVWRITELINE("sasi", scsi_port_device, write_sel)) + MCFG_ADDRESSABLE_LATCH_Q1_OUT_CB(DEVWRITELINE("sasi", scsi_port_device, write_rst)) + MCFG_ADDRESSABLE_LATCH_Q2_OUT_CB(WRITELINE(slicer_state, drive_sel_w<3>)) + MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(WRITELINE(slicer_state, drive_sel_w<2>)) + MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(WRITELINE(slicer_state, drive_sel_w<1>)) + MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(slicer_state, drive_sel_w<0>)) + MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(DEVWRITELINE("fdc", fd1797_device, dden_w)) + MCFG_DEVICE_ADD("sasi", SCSI_PORT, 0) MCFG_SCSI_DATA_INPUT_BUFFER("sasi_data_in") MCFG_SCSI_BSY_HANDLER(DEVWRITELINE("sasi_ctrl_in", input_buffer_device, write_bit3)) From 05eb5f34a2b9edffaf7c235924413f440fcea0d0 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 02:29:40 -0500 Subject: [PATCH 15/35] vt240: Fix device type (nw) --- src/mame/drivers/vt240.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/vt240.cpp b/src/mame/drivers/vt240.cpp index 36fe38796d5..483783444fc 100644 --- a/src/mame/drivers/vt240.cpp +++ b/src/mame/drivers/vt240.cpp @@ -57,7 +57,7 @@ public: required_device m_maincpu; required_device m_i8085; required_device m_i8251; - required_device m_duart; + required_device m_duart; required_device m_host; required_device m_hgdc; required_device m_bank; @@ -691,13 +691,13 @@ static MACHINE_CONFIG_START( vt240 ) MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(vt240_state, write_keyboard_clock)) MCFG_RS232_PORT_ADD("host", default_rs232_devices, "null_modem") - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", mc68681_device, rx_a_w)) - MCFG_RS232_DSR_HANDLER(DEVWRITELINE("duart", mc68681_device, ip5_w)) - MCFG_RS232_CTS_HANDLER(DEVWRITELINE("duart", mc68681_device, ip0_w)) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_a_w)) + MCFG_RS232_DSR_HANDLER(DEVWRITELINE("duart", scn2681_device, ip5_w)) + MCFG_RS232_CTS_HANDLER(DEVWRITELINE("duart", scn2681_device, ip0_w)) MCFG_RS232_PORT_ADD("printer", default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", mc68681_device, rx_b_w)) - MCFG_RS232_DSR_HANDLER(DEVWRITELINE("duart", mc68681_device, ip1_w)) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_b_w)) + MCFG_RS232_DSR_HANDLER(DEVWRITELINE("duart", scn2681_device, ip1_w)) MCFG_X2212_ADD("x2212") MACHINE_CONFIG_END From f2405a9cc85732a62a828638d3937aa18a0effa8 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 02:32:26 -0500 Subject: [PATCH 16/35] esqkt: Fix device type (nw) --- src/mame/drivers/esqkt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mame/drivers/esqkt.cpp b/src/mame/drivers/esqkt.cpp index 7b886790275..c20cf0f1c63 100644 --- a/src/mame/drivers/esqkt.cpp +++ b/src/mame/drivers/esqkt.cpp @@ -114,7 +114,7 @@ public: required_device m_maincpu; required_device m_esp; - required_device m_duart; + required_device m_duart; required_device m_sq1panel; required_device m_mdout; From 89d0f66afa94c6d3bb426607b1a559bc03971841 Mon Sep 17 00:00:00 2001 From: Lord-Nightmare Date: Wed, 22 Nov 2017 06:04:04 -0500 Subject: [PATCH 17/35] Switched dectalk to use SCN2681, plus some code cleanup (nw) --- src/mame/drivers/dectalk.cpp | 157 +++++++++++++++++------------------ 1 file changed, 75 insertions(+), 82 deletions(-) diff --git a/src/mame/drivers/dectalk.cpp b/src/mame/drivers/dectalk.cpp index c4ce9352a6f..af810c8aca9 100644 --- a/src/mame/drivers/dectalk.cpp +++ b/src/mame/drivers/dectalk.cpp @@ -261,7 +261,7 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_dsp(*this, "dsp"), - m_duart(*this, "duartn68681"), + m_duart(*this, "duart"), m_nvram(*this, "x2212"), m_dac(*this, "dac") { @@ -277,27 +277,27 @@ public: uint8_t m_outfifo_count; uint8_t m_outfifo_tail_ptr; uint8_t m_outfifo_head_ptr; - uint8_t m_infifo_semaphore; // latch for status of output fifo, d-latch 74ls74 @ E64 'lower half' - uint8_t m_spc_error_latch; // latch for error status of speech dsp, d-latch 74ls74 @ E64 'upper half' - uint8_t m_m68k_spcflags_latch; // latch for initializing the speech dsp, d-latch 74ls74 @ E29 'lower half', AND latch for spc irq enable, d-latch 74ls74 @ E29 'upper half'; these are stored in bits 0 and 6 respectively, the rest of the bits stored here MUST be zeroed! - uint8_t m_m68k_tlcflags_latch; // latch for telephone interface stuff, d-latches 74ls74 @ E93 'upper half' and @ 103 'upper and lower halves' - uint8_t m_simulate_outfifo_error; // simulate an error on the outfifo, which does something unusual to the dsp latches - uint8_t m_tlc_tonedetect; - uint8_t m_tlc_ringdetect; + bool m_infifo_semaphore; // latch for status of output fifo, d-latch 74ls74 @ E64 'lower half' + bool m_spc_error_latch; // latch for error status of speech dsp, d-latch 74ls74 @ E64 'upper half' + uint8_t m_m68k_spcflags_latch; // latch for initializing the speech dsp, d-latch 74ls74 @ E29 'lower half', AND latch for spc irq enable, d-latch 74ls74 @ E29 'upper half'; these are stored in bits 0 and 6 respectively, the rest of the bits stored here MUST be zeroed! // TODO: Split this into two separate booleans! + uint8_t m_m68k_tlcflags_latch; // latch for telephone interface stuff, d-latches 74ls74 @ E93 'upper half' and @ 103 'upper and lower halves' // TODO: Split this into three separate booleans! + bool m_simulate_outfifo_error; // simulate an error on the outfifo, which does something unusual to the dsp latches + bool m_tlc_tonedetect; + bool m_tlc_ringdetect; uint8_t m_tlc_dtmf; // dtmf holding reg uint8_t m_duart_inport; // low 4 bits of duart input uint8_t m_duart_outport; // most recent duart output - uint8_t m_hack_self_test; // temp variable for hack below + bool m_hack_self_test_is_second_read; // temp variable for hack below required_device m_maincpu; required_device m_dsp; - required_device m_duart; + required_device m_duart; required_device m_nvram; required_device m_dac; - DECLARE_WRITE_LINE_MEMBER(dectalk_duart_irq_handler); - DECLARE_WRITE_LINE_MEMBER(dectalk_duart_txa); - DECLARE_READ8_MEMBER(dectalk_duart_input); - DECLARE_WRITE8_MEMBER(dectalk_duart_output); + DECLARE_WRITE_LINE_MEMBER(duart_irq_handler); + DECLARE_WRITE_LINE_MEMBER(duart_txa); + DECLARE_READ8_MEMBER(duart_input); + DECLARE_WRITE8_MEMBER(duart_output); DECLARE_READ8_MEMBER(nvram_recall); DECLARE_WRITE8_MEMBER(led_write); DECLARE_WRITE8_MEMBER(nvram_store); @@ -315,10 +315,10 @@ public: virtual void machine_start() override; TIMER_CALLBACK_MEMBER(outfifo_read_cb); emu_timer *m_outfifo_read_timer; - void dectalk_outfifo_check(); - void dectalk_clear_all_fifos(); - void dectalk_semaphore_w(uint16_t data); - uint16_t dectalk_outfifo_r(); + void outfifo_check(); + void clear_all_fifos(); + void dsp_semaphore_w(bool state); + uint16_t dsp_outfifo_r(); DECLARE_WRITE_LINE_MEMBER(dectalk_reset); protected: @@ -327,24 +327,24 @@ protected: /* 2681 DUART */ -WRITE_LINE_MEMBER(dectalk_state::dectalk_duart_irq_handler) +WRITE_LINE_MEMBER(dectalk_state::duart_irq_handler) { m_maincpu->set_input_line_and_vector(M68K_IRQ_6, state, M68K_INT_ACK_AUTOVECTOR); //drvstate->m_maincpu->set_input_line_and_vector(M68K_IRQ_6, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR); //drvstate->m_maincpu->set_input_line_and_vector(M68K_IRQ_6, HOLD_LINE, vector); } -READ8_MEMBER(dectalk_state::dectalk_duart_input) +READ8_MEMBER(dectalk_state::duart_input) { uint8_t data = 0; data |= m_duart_inport&0xf; data |= (ioport("duart_in")->read()&0xf0); - if ((m_hack_self_test == 1) && (ioport("hacks")->read()&0x01)) data |= 0x10; // hack to prevent hang if selftest disable bit is kept low past the first read; i suppose the proper use of this bit was an incremental switch, or perhaps its expecting an interrupt later from serial in or tone in? added a dipswitch to disable the hack for testing - m_hack_self_test = 1; + if ((m_hack_self_test_is_second_read) && (ioport("hacks")->read()&0x01)) data |= 0x10; // hack to prevent hang if selftest disable bit is kept low past the first read; i suppose the proper use of this bit was an incremental switch, or perhaps its expecting an interrupt later from serial in or tone in? added a dipswitch to disable the hack for testing + m_hack_self_test_is_second_read = true; return data; } -WRITE8_MEMBER(dectalk_state::dectalk_duart_output) +WRITE8_MEMBER(dectalk_state::duart_output) { m_duart_outport = data; #ifdef SERIAL_TO_STDERR @@ -352,7 +352,7 @@ WRITE8_MEMBER(dectalk_state::dectalk_duart_output) #endif } -WRITE_LINE_MEMBER(dectalk_state::dectalk_duart_txa) +WRITE_LINE_MEMBER(dectalk_state::duart_txa) { //TODO: this needs to be plumbed so it shows up optionally on a second terminal somehow, or connects to diserial // it is the second 'alternate' serial connection on the DTC-01, used for a serial passthru and other stuff. @@ -365,7 +365,7 @@ WRITE_LINE_MEMBER(dectalk_state::dectalk_duart_txa) #define SPC_INITIALIZE state->m_m68k_spcflags_latch&0x1 // speech initialize flag #define SPC_IRQ_ENABLED ((state->m_m68k_spcflags_latch&0x40)>>6) // irq enable flag -void dectalk_state::dectalk_outfifo_check () +void dectalk_state::outfifo_check() { // check if output fifo is full; if it isn't, set the int on the dsp if (m_outfifo_count < 16) @@ -374,7 +374,7 @@ void dectalk_state::dectalk_outfifo_check () m_dsp->set_input_line(0, CLEAR_LINE); // TMS32010 INT } -void dectalk_state::dectalk_clear_all_fifos( ) +void dectalk_state::clear_all_fifos() { // clear fifos (TODO: memset would work better here...) int i; @@ -384,14 +384,14 @@ void dectalk_state::dectalk_clear_all_fifos( ) for (i=0; i<32; i++) m_infifo[i] = 0; m_infifo_count = 0; m_infifo_tail_ptr = m_infifo_head_ptr = 0; - dectalk_outfifo_check(); + outfifo_check(); } // helper for dsp infifo_semaphore flag to make dealing with interrupts easier -void dectalk_state::dectalk_semaphore_w ( uint16_t data ) +void dectalk_state::dsp_semaphore_w(bool state) { - m_infifo_semaphore = data&1; - if ((m_infifo_semaphore == 1) && (m_m68k_spcflags_latch&0x40)) + m_infifo_semaphore = state; + if ((m_infifo_semaphore) && (m_m68k_spcflags_latch&0x40)) { #ifdef VERBOSE logerror("speech int fired!\n"); @@ -403,7 +403,7 @@ void dectalk_state::dectalk_semaphore_w ( uint16_t data ) } // read the output fifo and set the interrupt line active on the dsp -uint16_t dectalk_state::dectalk_outfifo_r ( ) +uint16_t dectalk_state::dsp_outfifo_r ( ) { uint16_t data = 0xffff; #ifdef USE_LOOSE_TIMING_OUTPUT @@ -422,7 +422,7 @@ uint16_t dectalk_state::dectalk_outfifo_r ( ) m_outfifo_count--; } m_outfifo_tail_ptr&=0xf; - dectalk_outfifo_check(); + outfifo_check(); return ((data&0xfff0)^0x8000); // yes this is right, top bit is inverted and bottom 4 are ignored //return data; // not right but want to get it working first } @@ -430,7 +430,7 @@ uint16_t dectalk_state::dectalk_outfifo_r ( ) /* Machine reset and friends: stuff that needs setting up which IS directly affected by reset */ WRITE_LINE_MEMBER(dectalk_state::dectalk_reset) { - m_hack_self_test = 0; // hack + m_hack_self_test_is_second_read = false; // hack // stuff that is DIRECTLY affected by the RESET line machine().device("x2212")->recall(0); machine().device("x2212")->recall(1); @@ -439,12 +439,12 @@ WRITE_LINE_MEMBER(dectalk_state::dectalk_reset) m_m68k_tlcflags_latch = 0; // initial status is tone detect int(d6) off, answer phone(d8) off, ring detect int(d14) off m_duart->reset(); // reset the DUART // stuff that is INDIRECTLY affected by the RESET line - dectalk_clear_all_fifos(); // speech reset clears the fifos, though we have to do it explicitly here since we're not actually in the m68k_spcflags_w function. - dectalk_semaphore_w(0); // on the original DECtalk DTC-01 pcb revision, this is a semaphore for the INPUT fifo, later dec hacked on a check for the 3 output fifo chips to see if they're in sync, and set both of these latches if true. - m_spc_error_latch = 0; // spc error latch is cleared on /reset + clear_all_fifos(); // speech reset clears the fifos, though we have to do it explicitly here since we're not actually in the m68k_spcflags_w function. + dsp_semaphore_w(false); // on the original DECtalk DTC-01 pcb revision, this is a semaphore for the INPUT fifo, later dec hacked on a check for the 3 output fifo chips to see if they're in sync, and set both of these latches if true. + m_spc_error_latch = false; // spc error latch is cleared on /reset m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); // speech reset forces the CLR line active on the tms32010 - m_tlc_tonedetect = 0; // TODO, needed for selftest pass - m_tlc_ringdetect = 0; // TODO + m_tlc_tonedetect = false; // TODO, needed for selftest pass + m_tlc_ringdetect = false; // TODO m_tlc_dtmf = 0; // TODO m_duart_inport = 0xf; m_duart_outport = 0; @@ -472,9 +472,9 @@ void dectalk_state::machine_start() save_item(NAME(m_tlc_dtmf)); save_item(NAME(m_duart_inport)); save_item(NAME(m_duart_outport)); - save_item(NAME(m_hack_self_test)); - dectalk_clear_all_fifos(); - m_simulate_outfifo_error = 0; + save_item(NAME(m_hack_self_test_is_second_read)); + clear_all_fifos(); + m_simulate_outfifo_error = false; // TODO: HACK for now, should be hooked to a fake dipswitch to simulate fifo errors } void dectalk_state::machine_reset() @@ -541,8 +541,8 @@ READ16_MEMBER(dectalk_state::m68k_spcflags_r)// 68k read from the speech flags { uint8_t data = 0; data |= m_m68k_spcflags_latch; // bits 0 and 6 - data |= m_spc_error_latch<<5; // bit 5 - data |= m_infifo_semaphore<<7; // bit 7 + data |= m_spc_error_latch?0x20:0; // bit 5 + data |= m_infifo_semaphore?0x80:0; // bit 7 #ifdef SPC_LOG_68K logerror("m68k: SPC flags read, returning data = %04X\n",data); #endif @@ -564,11 +564,11 @@ WRITE16_MEMBER(dectalk_state::m68k_spcflags_w)// 68k write to the speech flags ( #ifdef SPC_LOG_68K logerror(" | 0x01: initialize speech: fifos reset, clear error+semaphore latches and dsp reset\n"); #endif - dectalk_clear_all_fifos(); + clear_all_fifos(); m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); // speech reset forces the CLR line active on the tms32010 // clear the two speech side latches - m_spc_error_latch = 0; - dectalk_semaphore_w(0); + m_spc_error_latch = false; + dsp_semaphore_w(false); } else // (data&0x1) == 0 { @@ -583,15 +583,15 @@ WRITE16_MEMBER(dectalk_state::m68k_spcflags_w)// 68k write to the speech flags ( logerror(" | 0x02: clear error+semaphore latches\n"); #endif // clear the two speech side latches - m_spc_error_latch = 0; - dectalk_semaphore_w(0); + m_spc_error_latch = false; + dsp_semaphore_w(false); } if ((data&0x40) == 0x40) // bit 6 - spc irq enable { #ifdef SPC_LOG_68K logerror(" | 0x40: speech int enabled\n"); #endif - if (m_infifo_semaphore == 1) + if (m_infifo_semaphore) { #ifdef SPC_LOG_68K logerror(" speech int fired!\n"); @@ -611,9 +611,9 @@ WRITE16_MEMBER(dectalk_state::m68k_spcflags_w)// 68k write to the speech flags ( READ16_MEMBER(dectalk_state::m68k_tlcflags_r)// dtmf flags read { uint16_t data = 0; - data |= m_m68k_tlcflags_latch; // bits 6, 8, 14; - data |= m_tlc_tonedetect<<7; // bit 7 is tone detect - data |= m_tlc_ringdetect<<14; // bit 15 is ring detect + data |= m_m68k_tlcflags_latch; // bits 6, 8, 14: tone detected int enable, answer phone relay enable, and ring int enable respectively + data |= m_tlc_tonedetect?0x0080:0; // bit 7 is tone detected + data |= m_tlc_ringdetect?0x8000:0; // bit 15 is ring detected #ifdef TLC_LOG logerror("m68k: TLC flags read, returning data = %04X\n",data); #endif @@ -626,12 +626,12 @@ WRITE16_MEMBER(dectalk_state::m68k_tlcflags_w)// dtmf flags write logerror("m68k: TLC flags written with %04X, only storing %04X\n",data, data&0x4140); #endif m_m68k_tlcflags_latch = data&0x4140; // ONLY store bits 6 8 and 14! - if ((data&0x40) == 0x40) // bit 6: tone detect interrupt enable + if (data&0x40) // bit 6: tone detect interrupt enable { #ifdef TLC_LOG logerror(" | 0x40: tone detect int enabled\n"); #endif - if (m_tlc_tonedetect == 1) + if (m_tlc_tonedetect) { #ifdef TLC_LOG logerror(" TLC int fired!\n"); @@ -644,10 +644,10 @@ WRITE16_MEMBER(dectalk_state::m68k_tlcflags_w)// dtmf flags write #ifdef TLC_LOG logerror(" | 0x40 = 0: tone detect int disabled\n"); #endif - if (((data&0x4000)!=0x4000) || (m_tlc_ringdetect == 0)) // check to be sure we don't disable int if both ints fired at once + if ((!(data&0x4000)) || (!m_tlc_ringdetect)) // check to be sure we don't disable int if both ints fired at once m_maincpu->set_input_line_and_vector(M68K_IRQ_4, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR); // clear int because int is now disabled } - if ((data&0x100) == 0x100) // bit 8: answer phone relay enable + if (data&0x100) // bit 8: answer phone relay enable { #ifdef TLC_LOG logerror(" | 0x100: answer phone relay enabled\n"); @@ -659,7 +659,7 @@ WRITE16_MEMBER(dectalk_state::m68k_tlcflags_w)// dtmf flags write logerror(" | 0x100 = 0: answer phone relay disabled\n"); #endif } - if ((data&0x4000) == 0x4000) // bit 14: ring int enable + if (data&0x4000) // bit 14: ring int enable { #ifdef TLC_LOG logerror(" | 0x4000: ring detect int enabled\n"); @@ -677,7 +677,7 @@ WRITE16_MEMBER(dectalk_state::m68k_tlcflags_w)// dtmf flags write #ifdef TLC_LOG logerror(" | 0x4000 = 0: ring detect int disabled\n"); #endif - if (((data&0x40)!=0x40) || (m_tlc_tonedetect == 0)) // check to be sure we don't disable int if both ints fired at once + if ((!(data&0x40)) || (!m_tlc_tonedetect)) // check to be sure we don't disable int if both ints fired at once m_maincpu->set_input_line_and_vector(M68K_IRQ_4, CLEAR_LINE, M68K_INT_ACK_AUTOVECTOR); // clear int because int is now disabled } } @@ -702,7 +702,7 @@ WRITE16_MEMBER(dectalk_state::spc_latch_outfifo_error_stats)// latch 74ls74 @ E6 #ifdef SPC_LOG_DSP logerror("dsp: set fifo semaphore and set error status = %01X\n",data&1); #endif - dectalk_semaphore_w((~m_simulate_outfifo_error)&1); // always set to 1 here, unless outfifo desync-between-the-three-parallel-fifo-chips error occurs. + dsp_semaphore_w(m_simulate_outfifo_error?false:true); // always set to true here, unless outfifo desync-between-the-three-parallel-fifo-chips error occurs. m_spc_error_latch = (data&1); // latch the dsp 'soft error' state aka "ERROR DETECTED D5 H" on schematics (different from the outfifo error state above!) } @@ -742,7 +742,7 @@ WRITE16_MEMBER(dectalk_state::spc_outfifo_data_w) m_outfifo_head_ptr++; m_outfifo_count++; m_outfifo_head_ptr&=0xf; - //dectalk_outfifo_check(); // outfifo check should only be done in the audio 10khz polling function + //outfifo_check(); // outfifo check should only be done in the audio 10khz polling function } READ_LINE_MEMBER(dectalk_state::spc_semaphore_r)// Return state of d-latch 74ls74 @ E64 'lower half' in d0 which indicates whether infifo is readable @@ -780,10 +780,10 @@ a23 a22 a21 a20 a19 a18 a17 a16 a15 a14 a13 a12 a11 a10 a9 a8 a7 a6 a5 a4 0 x x x 1 x x 1 0 1 x x x x 0 * * * * * * * * 1 RW NVRAM (read/write volatile ram, does not store to eeprom) 0 x x x 1 x x 1 0 1 x x x x 1 * * * * * * * * 1 RW NVRAM (all reads do /recall from eeprom, all writes do /store to eeprom) 0 x x x 1 x x 1 1 0 x x x x x x x x x * * * * x RW DUART (keep in mind that a0 is not connected) -0 x x x 1 x x 1 1 1 x x x x x x x x x x x 0 0 * RW SPC flags: fifo writable (readonly, d7), spc irq suppress (readwrite, d6), fifo error status (readonly, d5), 'fifo release'/clear-tms-fifo-error-status-bits (writeonly, d1), speech initialize/clear (readwrite, d0) [see schematic sheet 4] -0 x x x 1 x x 1 1 1 x x x x x x x x x x x 0 1 0? W SPC fifo write (clocks fifo) -0 x x x 1 x x 1 1 1 x x x x x x x x x x x 1 0 * RW TLC flags: ring detect (readonly, d15), ring detected irq enable (readwrite, d14), answer phone (readwrite, d8), tone detected (readonly, d7), tone detected irq enable (readwrite, d6) [see schematic sheet 6] -0 x x x 1 x x 1 1 1 x x x x x x x x x x x 1 1 * R TLC tone chip read, reads on bits d0-d7 only, d4-d7 are tied low; d15-d8 are probably open bus +0 x x x 1 x x 1 1 1 x x x x x x x x x x x 0 0 0? RW SPC SR (flags): fifo-not-full (spc writable) flag (readonly, d7), fifo-not-full spc irq mask (readwrite, d6), fifo error status (readonly, d5), 'fifo release'/clear-tms-fifo-error-status-bits (writeonly, d1), speech initialize/clear (readwrite, d0) [see schematic sheet 4] +0 x x x 1 x x 1 1 1 x x x x x x x x x x x 0 1 * W SPC DR fifo write (clocks fifo) +0 x x x 1 x x 1 1 1 x x x x x x x x x x x 1 0 * RW TLC SR (flags): ring detect (readonly, d15), ring detected irq enable (readwrite, d14), answer phone (readwrite, d8), tone detected (readonly, d7), tone detected irq enable (readwrite, d6) [see schematic sheet 6] +0 x x x 1 x x 1 1 1 x x x x x x x x x x x 1 1 * R TLC DR tone chip read, reads on bits d0-d7 only, d4-d7 are tied low; d15-d8 are probably open bus 1 x x x x x x x x x x x x x x x x x x x x x x x OPEN BUS | | | | | */ @@ -795,18 +795,13 @@ static ADDRESS_MAP_START(m68k_mem, AS_PROGRAM, 16, dectalk_state ) AM_RANGE(0x094000, 0x0943ff) AM_MIRROR(0x763c00) AM_WRITE8(led_write, 0x00ff) /* LED array */ AM_RANGE(0x094000, 0x0941ff) AM_MIRROR(0x763c00) AM_DEVREADWRITE8("x2212", x2212_device, read, write, 0xff00) /* Xicor X2212 NVRAM */ AM_RANGE(0x094200, 0x0943ff) AM_MIRROR(0x763c00) AM_READWRITE8(nvram_recall, nvram_store, 0xff00) /* Xicor X2212 NVRAM */ - AM_RANGE(0x098000, 0x09801f) AM_MIRROR(0x763fe0) AM_DEVREADWRITE8("duartn68681", mc68681_device, read, write, 0xff ) /* DUART */ + AM_RANGE(0x098000, 0x09801f) AM_MIRROR(0x763fe0) AM_DEVREADWRITE8("duart", scn2681_device, read, write, 0x00ff ) /* DUART */ AM_RANGE(0x09c000, 0x09c001) AM_MIRROR(0x763ff8) AM_READWRITE(m68k_spcflags_r, m68k_spcflags_w) /* SPC flags reg */ AM_RANGE(0x09c002, 0x09c003) AM_MIRROR(0x763ff8) AM_WRITE(m68k_infifo_w) /* SPC fifo reg */ AM_RANGE(0x09c004, 0x09c005) AM_MIRROR(0x763ff8) AM_READWRITE(m68k_tlcflags_r, m68k_tlcflags_w) /* telephone status flags */ AM_RANGE(0x09c006, 0x09c007) AM_MIRROR(0x763ff8) AM_READ(m68k_tlc_dtmf_r) /* telephone dtmf read */ ADDRESS_MAP_END -// do we even need this below? -static ADDRESS_MAP_START(m68k_io, AS_IO, 16, dectalk_state ) - ADDRESS_MAP_GLOBAL_MASK(0xff) -ADDRESS_MAP_END - static ADDRESS_MAP_START(tms32010_mem, AS_PROGRAM, 16, dectalk_state ) AM_RANGE(0x000, 0x7ff) AM_ROM /* ROM */ ADDRESS_MAP_END @@ -858,8 +853,7 @@ void dectalk_state::device_timer(emu_timer &timer, device_timer_id id, int param TIMER_CALLBACK_MEMBER(dectalk_state::outfifo_read_cb) { - uint16_t data; - data = dectalk_outfifo_r(); + uint16_t data = dsp_outfifo_r(); #ifdef VERBOSE if (data!= 0x8000) logerror("sample output: %04X\n", data); #endif @@ -867,24 +861,23 @@ TIMER_CALLBACK_MEMBER(dectalk_state::outfifo_read_cb) m_dac->write(data >> 4); // hack for break key, requires hacked up duart core so disabled for now // also it doesn't work well, the setup menu is badly corrupt - /*device_t *duart = machine().device("duartn68681"); + /*device_t *duart = machine().device("duart"); if (machine.input().code_pressed(KEYCODE_F1)) - duart68681_rx_break(duart, 1, 1); + duart_rx_break(duart, 1, 1); else - duart68681_rx_break(duart, 1, 0);*/ + duart_rx_break(duart, 1, 0);*/ } static MACHINE_CONFIG_START( dectalk ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68000, XTAL_20MHz/2) /* E74 20MHz OSC (/2) */ MCFG_CPU_PROGRAM_MAP(m68k_mem) - MCFG_CPU_IO_MAP(m68k_io) - MCFG_MC68681_ADD( "duartn68681", XTAL_3_6864MHz ) /* 2681 duart (not 68681!); Y3 3.6864MHz Xtal */ - MCFG_MC68681_IRQ_CALLBACK(WRITELINE(dectalk_state, dectalk_duart_irq_handler)) - MCFG_MC68681_A_TX_CALLBACK(WRITELINE(dectalk_state, dectalk_duart_txa)) + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) // MC2681 DUART ; Y3 3.6864MHz xtal */ + MCFG_MC68681_IRQ_CALLBACK(WRITELINE(dectalk_state, duart_irq_handler)) + MCFG_MC68681_A_TX_CALLBACK(WRITELINE(dectalk_state, duart_txa)) MCFG_MC68681_B_TX_CALLBACK(DEVWRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_MC68681_INPORT_CALLBACK(READ8(dectalk_state, dectalk_duart_input)) - MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(dectalk_state, dectalk_duart_output)) + MCFG_MC68681_INPORT_CALLBACK(READ8(dectalk_state, duart_input)) + MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(dectalk_state, duart_output)) MCFG_CPU_ADD("dsp", TMS32010, XTAL_20MHz) /* Y1 20MHz xtal */ MCFG_CPU_PROGRAM_MAP(tms32010_mem) @@ -909,7 +902,7 @@ static MACHINE_CONFIG_START( dectalk ) /* Y2 is a 3.579545 MHz xtal for the dtmf decoder chip */ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duartn68681", mc68681_device, rx_b_w)) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_b_w)) MACHINE_CONFIG_END From 837b7b17b6a448a19d730741866142f019511876 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Thu, 23 Nov 2017 01:38:51 +1100 Subject: [PATCH 18/35] New Not Working machines : Televideo TVI-912C, TVI-955, TVI-965. --- src/mame/drivers/terminals.cpp | 64 ++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 ++ 2 files changed, 67 insertions(+) diff --git a/src/mame/drivers/terminals.cpp b/src/mame/drivers/terminals.cpp index 1a920b2b663..e3775eadfb1 100644 --- a/src/mame/drivers/terminals.cpp +++ b/src/mame/drivers/terminals.cpp @@ -308,6 +308,70 @@ COMP( 1982, tr175, 0, 0, terminals, terminals, terminals_state, 0, "Relisys", "T +/************************************************************************************************************** + +Televideo TVI-912C. +Chips: i8035, TMS9927NL, AY5-1013A (COM2502) +Crystals: 23.814 (divide by 4 for CPU clock) +Other: 1x 8-sw DIP, 1x 10-sw DIP (internal), 2x 10-sw DIP (available to user at the back) + +***************************************************************************************************************/ + +ROM_START( tv912c ) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD( "a49c1.bin", 0x0000, 0x1000, CRC(d21851bf) SHA1(28fe77a218a5eee11de376f5d16e9380b616b3ca) ) // last half is all FF + + ROM_REGION(0x0800, "chargen", 0) + ROM_LOAD( "a3-2.bin", 0x0000, 0x0800, CRC(bb9a7fbd) SHA1(5f1c4d41b25bd3ca4dbc336873362935daf283da) ) +ROM_END + +COMP( 1978, tv912c, 0, 0, terminals, terminals, terminals_state, 0, "TeleVideo", "TVI-912C", MACHINE_IS_SKELETON ) + + + +/************************************************************************************************************** + +Televideo TVI-955 +Chips: G65SC02P-3, 3x S6551AP, SCN2674B, AMI 131406-00 (unknown 40-pin DIL), odd round silver thing, might be a battery +Crystals: 19.3396, 31.684, 3.6864 +Keyboard: M5L8049-230P-6, 5.7143, Beeper + +***************************************************************************************************************/ + +ROM_START( tv955 ) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD( "t180002-88d_955.u4", 0x0000, 0x4000, CRC(5767fbe7) SHA1(49a2241612af5c3af09778ffa541ac0bc186e05a) ) + ROM_LOAD( "t180002-91a_calc.u5", 0x4000, 0x2000, CRC(f86c103a) SHA1(fa3ada3a5d8913e519e2ea4817e96166c1fedd32) ) // first half is all FF + + ROM_REGION(0x1000, "chargen", 0) + ROM_LOAD( "t180002-26b.u45", 0x0000, 0x1000, CRC(69c9ebc7) SHA1(32282c816ec597a7c45e939acb7a4155d35ea584) ) + + ROM_REGION(0x10000, "keyboard", 0) + ROM_LOAD( "8049.kbd", 0x0000, 0x0800, CRC(bc86e349) SHA1(0b62003ab7931822f1bcac8370517c685849f62c) ) +ROM_END + +COMP( 1985, tv955, 0, 0, terminals, terminals, terminals_state, 0, "TeleVideo", "TVI-955", MACHINE_IS_SKELETON ) + + + +/************************************************************************************************************** + +Televideo TVI-965 +Chips: G65SC816P-5, SCN2672TC5N40, 271582-00 (unknown square chip), 2x UM6551A, Beeper +Crystals: 44.4528, 26.9892, 3.6864 + +***************************************************************************************************************/ + +ROM_START( tv965 ) + ROM_REGION(0x20000, "maincpu", 0) + ROM_LOAD( "180003-30h.u8", 0x00000, 0x010000, CRC(c7b9ca39) SHA1(1d95a8b0a4ea5caf3fb628c44c7a3567700a0b59) ) + ROM_LOAD( "180003-38h.u9", 0x10000, 0x008000, CRC(30fae408) SHA1(f05bb2a9ce2df60b046733f746d8d8a1eb3ac8bc) ) +ROM_END + +COMP( 1989, tv965, 0, 0, terminals, terminals, terminals_state, 0, "TeleVideo", "TVI-965", MACHINE_IS_SKELETON ) + + + /************************************************************************************************************** Visual 100. (VT-100 clone) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 13b897181e8..a580846113a 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -36325,6 +36325,9 @@ qvt103 qvt190 qvt201 tr175 +tv912c +tv955 +tv965 v100 v102 vp60 From dce16721c900d7df5c2a22b658d22ad505c3d59d Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 10:59:00 -0500 Subject: [PATCH 19/35] mc68681: Use MCFG_DEVICE_ADD instead of custom macro; switch one more to SCN2681 (nw) --- src/devices/bus/electron/m2105.cpp | 8 ++++---- src/devices/bus/electron/m2105.h | 2 +- src/devices/machine/68307.cpp | 2 +- src/devices/machine/mc68681.h | 6 ------ src/mame/audio/taito_en.cpp | 2 +- src/mame/drivers/adp.cpp | 2 +- src/mame/drivers/bfm_sc4.cpp | 2 +- src/mame/drivers/bfm_sc5.cpp | 2 +- src/mame/drivers/cat.cpp | 2 +- src/mame/drivers/esq1.cpp | 2 +- src/mame/drivers/esq5505.cpp | 4 ++-- src/mame/drivers/harddriv.cpp | 2 +- src/mame/drivers/ht68k.cpp | 2 +- src/mame/drivers/iris3130.cpp | 4 ++-- src/mame/drivers/maygay1b.cpp | 2 +- src/mame/drivers/maygayv1.cpp | 2 +- src/mame/drivers/micro20.cpp | 4 ++-- src/mame/drivers/micro3d.cpp | 2 +- src/mame/drivers/pt68k4.cpp | 8 ++++---- src/mame/drivers/tmaster.cpp | 2 +- src/mame/drivers/vlc.cpp | 6 +++--- src/mame/drivers/wildpkr.cpp | 4 ++-- 22 files changed, 33 insertions(+), 39 deletions(-) diff --git a/src/devices/bus/electron/m2105.cpp b/src/devices/bus/electron/m2105.cpp index 228c0e006a6..2c5921c8d3a 100644 --- a/src/devices/bus/electron/m2105.cpp +++ b/src/devices/bus/electron/m2105.cpp @@ -78,13 +78,13 @@ MACHINE_CONFIG_MEMBER( electron_m2105_device::device_add_mconfig ) MCFG_VIA6522_IRQ_HANDLER(DEVWRITELINE("irqs", input_merger_device, in_w<1>)) /* duart */ - MCFG_MC68681_ADD("sc2681", XTAL_3_6864MHz) + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) MCFG_MC68681_IRQ_CALLBACK(DEVWRITELINE("irqs", input_merger_device, in_w<2>)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("rs232", rs232_port_device, write_txd)) //MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(electron_m2105_device, sio_out_w)) MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, nullptr) - MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sc2681", mc68681_device, rx_a_w)) + MCFG_RS232_RXD_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_a_w)) /* printer */ MCFG_CENTRONICS_ADD("centronics", centronics_devices, "printer") @@ -117,7 +117,7 @@ electron_m2105_device::electron_m2105_device(const machine_config &mconfig, cons , m_exp_rom(*this, "exp_rom") , m_via6522_0(*this, "via6522_0") , m_via6522_1(*this, "via6522_1") - , m_duart(*this, "sc2681") + , m_duart(*this, "duart") , m_tms(*this, "tms5220") , m_centronics(*this, "centronics") , m_irqs(*this, "irqs") @@ -134,7 +134,7 @@ void electron_m2105_device::device_start() m_slot = dynamic_cast(owner()); space.install_readwrite_handler(0xfc40, 0xfc5f, READ8_DEVICE_DELEGATE(m_via6522_1, via6522_device, read), WRITE8_DEVICE_DELEGATE(m_via6522_1, via6522_device, write)); - space.install_readwrite_handler(0xfc60, 0xfc6f, READ8_DEVICE_DELEGATE(m_duart, mc68681_device, read), WRITE8_DEVICE_DELEGATE(m_duart, mc68681_device, write)); + space.install_readwrite_handler(0xfc60, 0xfc6f, READ8_DEVICE_DELEGATE(m_duart, scn2681_device, read), WRITE8_DEVICE_DELEGATE(m_duart, scn2681_device, write)); space.install_readwrite_handler(0xfc70, 0xfc8f, READ8_DEVICE_DELEGATE(m_via6522_0, via6522_device, read), WRITE8_DEVICE_DELEGATE(m_via6522_0, via6522_device, write)); } diff --git a/src/devices/bus/electron/m2105.h b/src/devices/bus/electron/m2105.h index 387b96f918d..2411913008c 100644 --- a/src/devices/bus/electron/m2105.h +++ b/src/devices/bus/electron/m2105.h @@ -46,7 +46,7 @@ private: required_memory_region m_exp_rom; required_device m_via6522_0; required_device m_via6522_1; - required_device m_duart; + required_device m_duart; required_device m_tms; required_device m_centronics; required_device m_irqs; diff --git a/src/devices/machine/68307.cpp b/src/devices/machine/68307.cpp index 64e52ebb295..0e15dfdd167 100644 --- a/src/devices/machine/68307.cpp +++ b/src/devices/machine/68307.cpp @@ -44,7 +44,7 @@ ADDRESS_MAP_END MACHINE_CONFIG_MEMBER( m68307_cpu_device::device_add_mconfig ) - MCFG_MC68681_ADD("internal68681", 16000000/4) // ?? Mhz - should be specified in inline config + MCFG_DEVICE_ADD("internal68681", MC68681, 16000000/4) // ?? Mhz - should be specified in inline config MCFG_MC68681_IRQ_CALLBACK(WRITELINE(m68307_cpu_device, m68307_duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(m68307_cpu_device, m68307_duart_txa)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(m68307_cpu_device, m68307_duart_txb)) diff --git a/src/devices/machine/mc68681.h b/src/devices/machine/mc68681.h index 643d3d0bce6..452b67cb64f 100644 --- a/src/devices/machine/mc68681.h +++ b/src/devices/machine/mc68681.h @@ -6,12 +6,6 @@ #pragma once -#define MCFG_MC68681_ADD(_tag, _clock) \ - MCFG_DEVICE_ADD(_tag, MC68681, _clock) - -#define MCFG_MC68681_REPLACE(_tag, _clock) \ - MCFG_DEVICE_REPLACE(_tag, MC68681, _clock) - #define MCFG_MC68681_IRQ_CALLBACK(_cb) \ devcb = &duart_base_device::set_irq_cb(*device, DEVCB_##_cb); diff --git a/src/mame/audio/taito_en.cpp b/src/mame/audio/taito_en.cpp index 2cc1ac987e2..88a776e7f22 100644 --- a/src/mame/audio/taito_en.cpp +++ b/src/mame/audio/taito_en.cpp @@ -276,7 +276,7 @@ MACHINE_CONFIG_MEMBER( taito_en_device::device_add_mconfig ) MCFG_CPU_ADD("audiocpu", M68000, XTAL_30_4761MHz / 2) MCFG_CPU_PROGRAM_MAP(en_sound_map) - MCFG_MC68681_ADD("duart68681", XTAL_16MHz / 4) + MCFG_DEVICE_ADD("duart68681", MC68681, XTAL_16MHz / 4) MCFG_MC68681_SET_EXTERNAL_CLOCKS(XTAL_16MHz/2/8, XTAL_16MHz/2/16, XTAL_16MHz/2/16, XTAL_16MHz/2/8) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(taito_en_device, duart_irq_handler)) diff --git a/src/mame/drivers/adp.cpp b/src/mame/drivers/adp.cpp index 682938053f4..1a2de92f5ab 100644 --- a/src/mame/drivers/adp.cpp +++ b/src/mame/drivers/adp.cpp @@ -542,7 +542,7 @@ static MACHINE_CONFIG_START( quickjac ) MCFG_MACHINE_START_OVERRIDE(adp_state,skattv) MCFG_MACHINE_RESET_OVERRIDE(adp_state,skattv) - MCFG_MC68681_ADD( "duart68681", XTAL_8_664MHz / 2 ) + MCFG_DEVICE_ADD( "duart68681", MC68681, XTAL_8_664MHz / 2 ) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(adp_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("microtouch", microtouch_device, rx)) MCFG_MC68681_INPORT_CALLBACK(IOPORT("DSW1")) diff --git a/src/mame/drivers/bfm_sc4.cpp b/src/mame/drivers/bfm_sc4.cpp index 4dafa976eff..89e174d597c 100644 --- a/src/mame/drivers/bfm_sc4.cpp +++ b/src/mame/drivers/bfm_sc4.cpp @@ -905,7 +905,7 @@ MACHINE_CONFIG_START( sc4_common ) MCFG_NVRAM_ADD_1FILL("nvram") - MCFG_MC68681_ADD("duart68681", 16000000/4) // ?? Mhz + MCFG_DEVICE_ADD("duart68681", MC68681, 16000000/4) // ?? Mhz MCFG_MC68681_SET_EXTERNAL_CLOCKS(XTAL_16MHz/2/8, XTAL_16MHz/2/16, XTAL_16MHz/2/16, XTAL_16MHz/2/8) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(sc4_state, bfm_sc4_duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(sc4_state, bfm_sc4_duart_txa)) diff --git a/src/mame/drivers/bfm_sc5.cpp b/src/mame/drivers/bfm_sc5.cpp index bf7f9fcc339..9619d4516eb 100644 --- a/src/mame/drivers/bfm_sc5.cpp +++ b/src/mame/drivers/bfm_sc5.cpp @@ -217,7 +217,7 @@ MACHINE_CONFIG_START( bfm_sc5 ) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") - MCFG_MC68681_ADD("duart68681", 16000000/4) // ?? Mhz + MCFG_DEVICE_ADD("duart68681", MC68681, 16000000/4) // ?? Mhz MCFG_MC68681_SET_EXTERNAL_CLOCKS(16000000/2/8, 16000000/2/16, 16000000/2/16, 16000000/2/8) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(bfm_sc5_state, bfm_sc5_duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(bfm_sc5_state, bfm_sc5_duart_txa)) diff --git a/src/mame/drivers/cat.cpp b/src/mame/drivers/cat.cpp index 9634752eba1..42f61e413f1 100644 --- a/src/mame/drivers/cat.cpp +++ b/src/mame/drivers/cat.cpp @@ -1070,7 +1070,7 @@ static MACHINE_CONFIG_START( cat ) MCFG_VIDEO_START_OVERRIDE(cat_state,cat) - MCFG_MC68681_ADD( "duartn68681", (XTAL_19_968MHz*2)/11 ) // duart is normally clocked by 3.6864mhz xtal, but cat seemingly uses a divider from the main xtal instead which probably yields 3.63054545Mhz. There is a trace to cut and a mounting area to allow using an actual 3.6864mhz xtal if you so desire + MCFG_DEVICE_ADD( "duartn68681", MC68681, (XTAL_19_968MHz*2)/11 ) // duart is normally clocked by 3.6864mhz xtal, but cat seemingly uses a divider from the main xtal instead which probably yields 3.63054545Mhz. There is a trace to cut and a mounting area to allow using an actual 3.6864mhz xtal if you so desire MCFG_MC68681_IRQ_CALLBACK(WRITELINE(cat_state, cat_duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(cat_state, cat_duart_txa)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(cat_state, cat_duart_txb)) diff --git a/src/mame/drivers/esq1.cpp b/src/mame/drivers/esq1.cpp index 773ce100727..f91727df6a3 100644 --- a/src/mame/drivers/esq1.cpp +++ b/src/mame/drivers/esq1.cpp @@ -588,7 +588,7 @@ static MACHINE_CONFIG_START( esq1 ) MCFG_CPU_ADD("maincpu", M6809E, 4000000) // how fast is it? MCFG_CPU_PROGRAM_MAP(esq1_map) - MCFG_MC68681_ADD("duart", 4000000) + MCFG_DEVICE_ADD("duart", MC68681, 4000000) MCFG_MC68681_SET_EXTERNAL_CLOCKS(500000, 500000, 1000000, 1000000) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esq1_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(esq1_state, duart_tx_a)) diff --git a/src/mame/drivers/esq5505.cpp b/src/mame/drivers/esq5505.cpp index 47bdfd7e6a8..bc48e68781f 100644 --- a/src/mame/drivers/esq5505.cpp +++ b/src/mame/drivers/esq5505.cpp @@ -616,7 +616,7 @@ static MACHINE_CONFIG_START( vfx ) MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) MCFG_ESQPANEL_ANALOG_CALLBACK(WRITE16(esq5505_state, analog_w)) - MCFG_MC68681_ADD("duart", 4000000) + MCFG_DEVICE_ADD("duart", MC68681, 4000000) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esq5505_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(esq5505_state, duart_tx_a)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(esq5505_state, duart_tx_b)) @@ -693,7 +693,7 @@ static MACHINE_CONFIG_START(vfx32) MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) MCFG_ESQPANEL_ANALOG_CALLBACK(WRITE16(esq5505_state, analog_w)) - MCFG_MC68681_ADD("duart", 4000000) + MCFG_DEVICE_ADD("duart", MC68681, 4000000) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esq5505_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(esq5505_state, duart_tx_a)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(esq5505_state, duart_tx_b)) diff --git a/src/mame/drivers/harddriv.cpp b/src/mame/drivers/harddriv.cpp index 5cc063e8384..ad742c134a5 100644 --- a/src/mame/drivers/harddriv.cpp +++ b/src/mame/drivers/harddriv.cpp @@ -1446,7 +1446,7 @@ static MACHINE_CONFIG_START( driver_nomsp ) MCFG_M48T02_ADD("200e") // MK48T02 MCFG_EEPROM_2816_ADD("210e") // MK48Z02 - MCFG_MC68681_ADD("duartn68681", XTAL_3_6864MHz) + MCFG_DEVICE_ADD("duartn68681", MC68681, XTAL_3_6864MHz) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(harddriv_state, harddriv_duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE ("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/ht68k.cpp b/src/mame/drivers/ht68k.cpp index 900c70bcc2b..b8a5445c1ff 100644 --- a/src/mame/drivers/ht68k.cpp +++ b/src/mame/drivers/ht68k.cpp @@ -129,7 +129,7 @@ static MACHINE_CONFIG_START( ht68k ) MCFG_CPU_PROGRAM_MAP(ht68k_mem) /* video hardware */ - MCFG_MC68681_ADD( "duart68681", XTAL_8MHz / 2 ) + MCFG_DEVICE_ADD( "duart68681", MC68681, XTAL_8MHz / 2 ) MCFG_MC68681_SET_EXTERNAL_CLOCKS(500000, 500000, 1000000, 1000000) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(ht68k_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("rs232", rs232_port_device, write_txd)) diff --git a/src/mame/drivers/iris3130.cpp b/src/mame/drivers/iris3130.cpp index 96c5ea9f1d7..fb6515b8ae2 100644 --- a/src/mame/drivers/iris3130.cpp +++ b/src/mame/drivers/iris3130.cpp @@ -423,11 +423,11 @@ static MACHINE_CONFIG_START( sgi_ip2 ) MCFG_CPU_ADD("maincpu", M68020, 16000000) MCFG_CPU_PROGRAM_MAP(sgi_ip2_map) - MCFG_MC68681_ADD( "duart68681a", XTAL_3_6864MHz ) /* Y3 3.6864MHz Xtal ??? copy-over from dectalk */ + MCFG_DEVICE_ADD( "duart68681a", MC68681, XTAL_3_6864MHz ) /* Y3 3.6864MHz Xtal ??? copy-over from dectalk */ MCFG_MC68681_IRQ_CALLBACK(WRITELINE(sgi_ip2_state, duarta_irq_handler)) MCFG_MC68681_B_TX_CALLBACK(DEVWRITELINE("rs232", rs232_port_device, write_txd)) - MCFG_MC68681_ADD( "duart68681b", XTAL_3_6864MHz ) /* Y3 3.6864MHz Xtal ??? copy-over from dectalk */ + MCFG_DEVICE_ADD( "duart68681b", MC68681, XTAL_3_6864MHz ) /* Y3 3.6864MHz Xtal ??? copy-over from dectalk */ MCFG_MC68681_IRQ_CALLBACK(WRITELINE(sgi_ip2_state, duartb_irq_handler)) MCFG_MC146818_ADD( "rtc", XTAL_4_194304Mhz ) diff --git a/src/mame/drivers/maygay1b.cpp b/src/mame/drivers/maygay1b.cpp index a236c2d786a..e8d95836dcf 100644 --- a/src/mame/drivers/maygay1b.cpp +++ b/src/mame/drivers/maygay1b.cpp @@ -776,7 +776,7 @@ MACHINE_CONFIG_START( maygay_m1 ) MCFG_CPU_IO_MAP(maygay_mcu_io) - MCFG_MC68681_ADD("duart68681", M1_DUART_CLOCK) + MCFG_DEVICE_ADD("duart68681", MC68681, M1_DUART_CLOCK) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(maygay1b_state, duart_irq_handler)) MCFG_MC68681_INPORT_CALLBACK(READ8(maygay1b_state, m1_duart_r)) diff --git a/src/mame/drivers/maygayv1.cpp b/src/mame/drivers/maygayv1.cpp index 2288214dd6d..7577957b9cc 100644 --- a/src/mame/drivers/maygayv1.cpp +++ b/src/mame/drivers/maygayv1.cpp @@ -897,7 +897,7 @@ static MACHINE_CONFIG_START( maygayv1 ) MCFG_PALETTE_ADD("palette", 16) - MCFG_MC68681_ADD("duart68681", DUART_CLOCK) + MCFG_DEVICE_ADD("duart68681", MC68681, DUART_CLOCK) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(maygayv1_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(maygayv1_state, duart_txa)) diff --git a/src/mame/drivers/micro20.cpp b/src/mame/drivers/micro20.cpp index 131ea4e5ec6..1b69cc61587 100644 --- a/src/mame/drivers/micro20.cpp +++ b/src/mame/drivers/micro20.cpp @@ -156,13 +156,13 @@ static MACHINE_CONFIG_START( micro20 ) MCFG_CPU_ADD(MAINCPU_TAG, M68020, XTAL_16_67MHz) MCFG_CPU_PROGRAM_MAP(micro20_map) - MCFG_MC68681_ADD(DUART_A_TAG, XTAL_3_6864MHz) + MCFG_DEVICE_ADD(DUART_A_TAG, MC68681, XTAL_3_6864MHz) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("rs232", rs232_port_device, write_txd)) MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal") MCFG_RS232_RXD_HANDLER(DEVWRITELINE(DUART_A_TAG, mc68681_device, rx_a_w)) - MCFG_MC68681_ADD(DUART_B_TAG, XTAL_3_6864MHz) + MCFG_DEVICE_ADD(DUART_B_TAG, MC68681, XTAL_3_6864MHz) MCFG_WD1772_ADD(FDC_TAG, XTAL_16_67MHz / 2) diff --git a/src/mame/drivers/micro3d.cpp b/src/mame/drivers/micro3d.cpp index a7eb066f225..d3b77edb0e7 100644 --- a/src/mame/drivers/micro3d.cpp +++ b/src/mame/drivers/micro3d.cpp @@ -319,7 +319,7 @@ static MACHINE_CONFIG_START( micro3d ) MCFG_MCS51_SERIAL_TX_CB(WRITE8(micro3d_state, data_from_i8031)) MCFG_MCS51_SERIAL_RX_CB(READ8(micro3d_state, data_to_i8031)) - MCFG_MC68681_ADD("duart", XTAL_3_6864MHz) + MCFG_DEVICE_ADD("duart", MC68681, XTAL_3_6864MHz) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(micro3d_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("monitor", rs232_port_device, write_txd)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(micro3d_state, duart_txb)) diff --git a/src/mame/drivers/pt68k4.cpp b/src/mame/drivers/pt68k4.cpp index f5cbc2c2f0a..e7385ce6fb7 100644 --- a/src/mame/drivers/pt68k4.cpp +++ b/src/mame/drivers/pt68k4.cpp @@ -399,11 +399,11 @@ static MACHINE_CONFIG_START( pt68k2 ) MCFG_CPU_ADD(M68K_TAG, M68000, XTAL_16MHz/2) // 68k2 came in 8, 10, and 12 MHz versions MCFG_CPU_PROGRAM_MAP(pt68k2_mem) - MCFG_MC68681_ADD("duart1", XTAL_3_6864MHz) + MCFG_DEVICE_ADD("duart1", MC68681, XTAL_3_6864MHz) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(pt68k4_state, duart1_irq)) MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(pt68k4_state, duart1_out)) - MCFG_MC68681_ADD("duart2", XTAL_3_6864MHz) + MCFG_DEVICE_ADD("duart2", MC68681, XTAL_3_6864MHz) MCFG_DEVICE_ADD(KBDC_TAG, PC_KBDC, 0) MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(pt68k4_state, keyboard_clock_w)) @@ -440,11 +440,11 @@ static MACHINE_CONFIG_START( pt68k4 ) MCFG_CPU_PROGRAM_MAP(pt68k4_mem) // add the DUARTS. first one has the console on channel A at 19200. - MCFG_MC68681_ADD("duart1", XTAL_16MHz / 4) + MCFG_DEVICE_ADD("duart1", MC68681, XTAL_16MHz / 4) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(pt68k4_state, duart1_irq)) MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(pt68k4_state, duart1_out)) - MCFG_MC68681_ADD("duart2", XTAL_16MHz / 4) + MCFG_DEVICE_ADD("duart2", MC68681, XTAL_16MHz / 4) MCFG_DEVICE_ADD(KBDC_TAG, PC_KBDC, 0) MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(pt68k4_state, keyboard_clock_w)) diff --git a/src/mame/drivers/tmaster.cpp b/src/mame/drivers/tmaster.cpp index 260e822c0dd..742964de8c9 100644 --- a/src/mame/drivers/tmaster.cpp +++ b/src/mame/drivers/tmaster.cpp @@ -364,7 +364,7 @@ static MACHINE_CONFIG_START( tm ) MCFG_CPU_PROGRAM_MAP(tmaster_map) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", tmaster_state, scanline_interrupt, "screen", 0, 1) - MCFG_MC68681_ADD( "duart68681", XTAL_8_664MHz / 2 /*??*/) + MCFG_DEVICE_ADD( "duart68681", MC68681, XTAL_8_664MHz / 2 /*??*/) MCFG_MC68681_IRQ_CALLBACK(WRITELINE(tmaster_state, duart_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("microtouch", microtouch_device, rx)) diff --git a/src/mame/drivers/vlc.cpp b/src/mame/drivers/vlc.cpp index 5574256c365..0b76cf3640a 100644 --- a/src/mame/drivers/vlc.cpp +++ b/src/mame/drivers/vlc.cpp @@ -624,15 +624,15 @@ static MACHINE_CONFIG_START( nevada ) MCFG_SOUND_ADD("aysnd", AY8912, SOUND_CLOCK) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.75) - MCFG_MC68681_ADD( "duart18_68681", XTAL_3_6864MHz ) // UARTA = Modem 1200Baud + MCFG_DEVICE_ADD("duart18_68681", MC68681, XTAL_3_6864MHz) // UARTA = Modem 1200Baud MCFG_MC68681_IRQ_CALLBACK(WRITELINE(nevada_state, duart18_irq_handler)) MCFG_MC68681_INPORT_CALLBACK(IOPORT("DSW1")) - MCFG_MC68681_ADD( "duart39_68681", XTAL_3_6864MHz ) // UARTA = Printer + MCFG_DEVICE_ADD("duart39_68681", MC68681, XTAL_3_6864MHz) // UARTA = Printer MCFG_MC68681_IRQ_CALLBACK(WRITELINE(nevada_state, duart39_irq_handler)) MCFG_MC68681_INPORT_CALLBACK(IOPORT("DSW2")) - MCFG_MC68681_ADD( "duart40_68681", XTAL_3_6864MHz ) // UARTA = Touch , UARTB = Bill Acceptor + MCFG_DEVICE_ADD("duart40_68681", MC68681, XTAL_3_6864MHz) // UARTA = Touch , UARTB = Bill Acceptor MCFG_MC68681_IRQ_CALLBACK(WRITELINE(nevada_state, duart40_irq_handler)) MCFG_MC68681_A_TX_CALLBACK(DEVWRITELINE("microtouch", microtouch_device, rx)) MCFG_MC68681_INPORT_CALLBACK(IOPORT("DSW3")) diff --git a/src/mame/drivers/wildpkr.cpp b/src/mame/drivers/wildpkr.cpp index 7313d113fce..701a69d4346 100644 --- a/src/mame/drivers/wildpkr.cpp +++ b/src/mame/drivers/wildpkr.cpp @@ -456,7 +456,7 @@ static MACHINE_CONFIG_START( wildpkr ) MCFG_CPU_PROGRAM_MAP(wildpkr_map) //MCFG_CPU_VBLANK_INT_DRIVER("screen", wildpkr_state, irq2_line_hold) // guess - MCFG_MC68681_ADD("duart", SEC_CLOCK) + MCFG_DEVICE_ADD("duart", MC68681, SEC_CLOCK) MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -490,7 +490,7 @@ static MACHINE_CONFIG_START( tabpkr ) MCFG_NVRAM_ADD_1FILL("nvram") // DS1220Y - MCFG_MC68681_ADD("duart", 3686400) + MCFG_DEVICE_ADD("duart", MC68681, 3686400) MCFG_MC68681_IRQ_CALLBACK(ASSERTLINE("maincpu", M68K_IRQ_2)) MCFG_DEVICE_ADD("id", DS2401, 0) From 34a37860d51dc35f0483377cd15e09d88523f8fc Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 13:50:02 -0500 Subject: [PATCH 20/35] esq1.cpp: Minor cleanup (nw) --- src/mame/drivers/esq1.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/mame/drivers/esq1.cpp b/src/mame/drivers/esq1.cpp index f91727df6a3..a4724698827 100644 --- a/src/mame/drivers/esq1.cpp +++ b/src/mame/drivers/esq1.cpp @@ -409,7 +409,6 @@ public: DECLARE_WRITE8_MEMBER(mapper_w); DECLARE_WRITE8_MEMBER(analog_w); - DECLARE_WRITE_LINE_MEMBER(duart_irq_handler); DECLARE_WRITE_LINE_MEMBER(duart_tx_a); DECLARE_WRITE_LINE_MEMBER(duart_tx_b); DECLARE_WRITE8_MEMBER(duart_output); @@ -537,11 +536,6 @@ ADDRESS_MAP_END // OP5 = metronome hi // OP6/7 = tape out -WRITE_LINE_MEMBER(esq1_state::duart_irq_handler) -{ - m_maincpu->set_input_line(M6809_IRQ_LINE, state); -} - WRITE8_MEMBER(esq1_state::duart_output) { int bank = ((data >> 1) & 0x7); @@ -590,7 +584,7 @@ static MACHINE_CONFIG_START( esq1 ) MCFG_DEVICE_ADD("duart", MC68681, 4000000) MCFG_MC68681_SET_EXTERNAL_CLOCKS(500000, 500000, 1000000, 1000000) - MCFG_MC68681_IRQ_CALLBACK(WRITELINE(esq1_state, duart_irq_handler)) + MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", M6809_IRQ_LINE)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(esq1_state, duart_tx_a)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(esq1_state, duart_tx_b)) MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(esq1_state, duart_output)) From 7331bddbeffcc6ca0116213b38071b4e91debce4 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 13:51:02 -0500 Subject: [PATCH 21/35] xtal.h: Major addition of terminal XTAL frequencies (nw) --- src/emu/drivers/xtal.h | 19 ++++++++++++++++++- src/mame/drivers/tv950.cpp | 4 ++-- src/mame/drivers/vk100.cpp | 6 +++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h index 8890811766c..7a01107ab8c 100644 --- a/src/emu/drivers/xtal.h +++ b/src/emu/drivers/xtal.h @@ -158,6 +158,7 @@ enum XTAL_14_705882MHz = 14705882, /* Aleck64 */ XTAL_14_7456MHz = 14745600, /* Namco System 12 & System Super 22/23 for JVS */ XTAL_15MHz = 15000000, /* Sinclair QL, Amusco Poker */ + XTAL_15_30072MHz = 15300720, /* Microterm 420 */ XTAL_15_36MHz = 15360000, /* Visual 1050 */ XTAL_15_4MHz = 15400000, /* DVK KSM */ XTAL_15_468MHz = 15468480, /* Bank Panic h/w, Sega G80 */ @@ -168,6 +169,7 @@ enum XTAL_16_384MHz = 16384000, XTAL_16_4MHz = 16400000, /* MS 6102 */ XTAL_16_5888MHz = 16588800, /* SM 7238 */ + XTAL_16_6698MHz = 16669800, /* Qume QVT-102 */ XTAL_16_67MHz = 16670000, XTAL_16_777216MHz = 16777216, /* Nintendo Game Boy Advance */ XTAL_16_9344MHz = 16934400, /* Usually used to drive 90's Yamaha OPL/FM chips (44100 * 384) */ @@ -178,8 +180,10 @@ enum XTAL_17_9712MHz = 17971200, XTAL_18MHz = 18000000, /* S.A.R, Ikari Warriors 3 */ XTAL_18_432MHz = 18432000, /* Extremely common, used on 100's of PCBs (48000 * 384) */ + XTAL_18_575MHz = 18575000, /* Visual 102 */ XTAL_18_720MHz = 18720000, /* Nokia MikroMikko 1 */ XTAL_18_8696MHz = 18869600, /* Memorex 2178 */ + XTAL_19_3396MHz = 19339600, /* TeleVideo TVI-955 80-column display clock */ XTAL_19_6MHz = 19600000, /* Universal Mr. Do - Model 8021 PCB */ XTAL_19_6608MHz = 19660800, /* Euro League (bootleg), labeled as "UKI 19.6608 20PF" */ XTAL_19_923MHz = 19923000, /* Cinematronics vectors */ @@ -195,6 +199,7 @@ enum XTAL_22_1184MHz = 22118400, /* Amusco Poker */ XTAL_22_3210MHz = 22321000, /* Apple LaserWriter II NT */ XTAL_22_656MHz = 22656000, /* Super Pinball Action (~1440x NTSC line rate) */ + XTAL_23_814MHz = 23814000, /* TeleVideo TVI-912C & 950 */ XTAL_23_9616MHz = 23961600, /* Osborne 4 (Vixen) */ XTAL_24MHz = 24000000, /* Mario, 80's Data East games, 80's Konami games */ XTAL_24_0734MHz = 24073400, /* DEC Rainbow 100 */ @@ -206,10 +211,12 @@ enum XTAL_25_447MHz = 25447000, /* Namco EVA3A (Funcube2) */ XTAL_25_590906MHz = 25590906, /* Atari Jaguar NTSC */ XTAL_25_593900MHz = 25593900, /* Atari Jaguar PAL */ + XTAL_25_7715MHz = 25771500, /* HP-2622A */ XTAL_26MHz = 26000000, /* Gaelco PCBs */ XTAL_26_601712MHz = 26601712, /* Astro Corp.'s Show Hand, PAL Vtech/Yeno Socrates (6x PAL subcarrier) */ XTAL_26_66666MHz = 26666666, /* Irem M92 but most use 27MHz */ XTAL_26_686MHz = 26686000, /* Typically used on 90's Taito PCBs to drive the custom chips */ + XTAL_26_9892MHz = 26989200, /* TeleVideo 965 */ XTAL_27MHz = 27000000, /* Some Banpresto games macrossp, Irem M92 and 90's Toaplan games */ XTAL_27_164MHz = 27164000, /* Typically used on 90's Taito PCBs to drive the custom chips */ XTAL_27_2109MHz = 27210900, /* LA Girl */ @@ -221,9 +228,11 @@ enum XTAL_28_64MHz = 28640000, /* Fukki FG-1c AI AM-2 PCB */ XTAL_28_7MHz = 28700000, XTAL_29_4912MHz = 29491200, /* Xerox Alto-II system clock (tagged 29.4MHz in the schematics) */ + XTAL_29_876MHz = 29876000, /* Qume QVT-103 */ XTAL_30MHz = 30000000, /* Impera Magic Card */ XTAL_30_4761MHz = 30476100, /* Taito JC */ XTAL_30_8MHz = 30800000, /* 15IE-00-013 */ + XTAL_31_684MHz = 31684000, /* TeleVideo TVI-955 132-column display clock */ XTAL_32MHz = 32000000, XTAL_32_22MHz = 32220000, /* Typically used on 90's Data East PCBs (close to 9x NTSC subcarrier which is 32.215905Mhz*/ XTAL_32_5304MHz = 32530400, /* Seta 2 */ @@ -239,12 +248,18 @@ enum XTAL_40MHz = 40000000, XTAL_42MHz = 42000000, /* BMC A-00211 - Popo Bear */ XTAL_42_9545MHz = 42954545, /* CPS3 (12x NTSC subcarrier)*/ + XTAL_43_320MHz = 43320000, /* DEC VT420 */ XTAL_44_1MHz = 44100000, /* Subsino's Bishou Jan */ + XTAL_44_4528MHz = 44452800, /* TeleVideo 965 */ XTAL_45MHz = 45000000, /* Eolith with Hyperstone CPUs */ XTAL_45_158MHz = 45158000, /* Sega Model 2A video board, Model 3 CPU board */ - XTAL_45_6192Mhz = 45619200, /* DEC VK100 */ + XTAL_45_582MHz = 45582000, /* Zentec Zephyr */ + XTAL_45_6192MHz = 45619200, /* DEC VK100 */ + XTAL_45_8304MHz = 45830400, /* Microterm 5510 */ + XTAL_47_736MHz = 47736000, /* Visual 100 */ XTAL_48MHz = 48000000, /* Williams/Midway Y/Z-unit system / SSV board */ XTAL_48_384MHz = 48384000, /* Namco NB-1 */ + XTAL_48_654MHz = 48654000, /* Qume QVT-201 */ XTAL_48_66MHz = 48660000, /* Zaxxon */ XTAL_49_152MHz = 49152000, /* Used on some Namco PCBs, Baraduke h/w, System 21, Super System 22 */ XTAL_50MHz = 50000000, /* Williams/Midway T/W/V-unit system */ @@ -258,6 +273,7 @@ enum XTAL_55MHz = 55000000, /* Eolith Vega */ XTAL_57_2727MHz = 57272727, /* Psikyo SH2 with /2 divider (16x NTSC subcarrier)*/ XTAL_58MHz = 58000000, /* Magic Reel (Play System) */ + XTAL_59_2920MHz = 59292000, /* Data General D461 */ XTAL_60MHz = 60000000, XTAL_61_44MHz = 61440000, /* dkong */ XTAL_64MHz = 64000000, /* BattleToads */ @@ -266,6 +282,7 @@ enum XTAL_72MHz = 72000000, /* Aristocrat MKV */ XTAL_72_576MHz = 72576000, /* Centipede, Millipede, Missile Command, Let's Go Bowling "Multipede" */ XTAL_73_728MHz = 73728000, /* Ms. Pac-Man/Galaga 20th Anniversary */ + XTAL_87_18336MHz = 87183360, /* AT&T 630 MTG */ XTAL_100MHz = 100000000, /* PSX-based Namco System 12, Vegas, Sony ZN1-2-based */ XTAL_101_4912MHz = 101491200, /* PSX-based Namco System 10 */ XTAL_200MHz = 200000000, /* Base SH4 CPU (Naomi, Hikaru etc.) */ diff --git a/src/mame/drivers/tv950.cpp b/src/mame/drivers/tv950.cpp index 852e983f722..5730eb940fd 100644 --- a/src/mame/drivers/tv950.cpp +++ b/src/mame/drivers/tv950.cpp @@ -50,7 +50,7 @@ #define RS232A_TAG "rs232a" #define RS232B_TAG "rs232b" -#define MASTER_CLOCK (23814000) +#define MASTER_CLOCK XTAL_23_814MHz class tv950_state : public driver_device { @@ -329,4 +329,4 @@ ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS -COMP( 1981, tv950, 0, 0, tv950, tv950, tv950_state, 0, "TeleVideo", "TV950", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +COMP( 1981, tv950, 0, 0, tv950, tv950, tv950_state, 0, "TeleVideo", "Model 950 Video Display Terminal", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) diff --git a/src/mame/drivers/vk100.cpp b/src/mame/drivers/vk100.cpp index 6d53403aec5..9ab61e5a94d 100644 --- a/src/mame/drivers/vk100.cpp +++ b/src/mame/drivers/vk100.cpp @@ -422,7 +422,7 @@ TIMER_CALLBACK_MEMBER(vk100_state::execute_vg) m_vgPAT_Mask >>= 1; // shift the mask if (m_vgPAT_Mask == 0) m_vgPAT_Mask = 0x80; // reset mask if it hits 0 } - if (m_vgGO) timer_set(attotime::from_hz(XTAL_45_6192Mhz/3/12/2), TIMER_EXECUTE_VG); // /3/12/2 is correct. the sync counter is clocked by the dot clock, despite the error on figure 5-21 + if (m_vgGO) timer_set(attotime::from_hz(XTAL_45_6192MHz/3/12/2), TIMER_EXECUTE_VG); // /3/12/2 is correct. the sync counter is clocked by the dot clock, despite the error on figure 5-21 } /* ports 0x40 and 0x41: load low and high bytes of vector gen X register */ @@ -1040,10 +1040,10 @@ static MACHINE_CONFIG_START( vk100 ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(XTAL_45_6192Mhz/3, 882, 0, 720, 370, 0, 350 ) // fake screen timings for startup until 6845 sets real ones + MCFG_SCREEN_RAW_PARAMS(XTAL_45_6192MHz/3, 882, 0, 720, 370, 0, 350 ) // fake screen timings for startup until 6845 sets real ones MCFG_SCREEN_UPDATE_DEVICE( "crtc", mc6845_device, screen_update ) - MCFG_MC6845_ADD( "crtc", H46505, "screen", XTAL_45_6192Mhz/3/12) + MCFG_MC6845_ADD( "crtc", H46505, "screen", XTAL_45_6192MHz/3/12) MCFG_MC6845_SHOW_BORDER_AREA(false) MCFG_MC6845_CHAR_WIDTH(12) MCFG_MC6845_UPDATE_ROW_CB(vk100_state, crtc_update_row) From b37f4794d805d440ac9290ebaa504fdc7b0bab92 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 13:53:02 -0500 Subject: [PATCH 22/35] Remove pulse_input_line version using CPU minimum quantum, which can (though ideally shouldn't) be used explicitly now (nw) --- src/emu/diexec.h | 5 +++-- src/mame/audio/dcs.cpp | 2 +- src/mame/audio/rax.cpp | 2 +- src/mame/drivers/cball.cpp | 2 +- src/mame/drivers/changela.cpp | 2 +- src/mame/drivers/cvs.cpp | 2 +- src/mame/drivers/equites.cpp | 2 +- src/mame/drivers/fitfight.cpp | 2 +- src/mame/drivers/gaelco3d.cpp | 2 +- src/mame/drivers/homedata.cpp | 2 +- src/mame/drivers/igs_m027.cpp | 2 +- src/mame/drivers/m90.cpp | 2 +- src/mame/drivers/mgolf.cpp | 2 +- src/mame/drivers/namcond1.cpp | 2 +- src/mame/drivers/namcos22.cpp | 4 ++-- src/mame/drivers/pntnpuzl.cpp | 2 +- src/mame/drivers/riscpc.cpp | 6 +++--- src/mame/drivers/ssfindo.cpp | 6 +++--- src/mame/drivers/starshp1.cpp | 2 +- src/mame/drivers/zac_2.cpp | 2 +- src/mame/machine/3do.cpp | 2 +- src/mame/machine/archimds.cpp | 2 +- src/mame/machine/galaxold.cpp | 2 +- src/mame/machine/namcos2.cpp | 2 +- src/mame/machine/pgmprot_igs027a_type3.cpp | 2 +- 25 files changed, 32 insertions(+), 31 deletions(-) diff --git a/src/emu/diexec.h b/src/emu/diexec.h index e07b2b3ad5f..c307400dd69 100644 --- a/src/emu/diexec.h +++ b/src/emu/diexec.h @@ -164,8 +164,6 @@ public: int input_state(int linenum) const { return m_input[linenum].m_curstate; } void pulse_input_line(int irqline, const attotime &duration); void pulse_input_line_and_vector(int irqline, int vector, const attotime &duration); - void pulse_input_line(int irqline, int cycles) { pulse_input_line(irqline, cycles_to_attotime(cycles * min_cycles())); } - void pulse_input_line_and_vector(int irqline, int vector, int cycles) { pulse_input_line_and_vector(irqline, vector, cycles_to_attotime(cycles * min_cycles())); } // suspend/resume void suspend(u32 reason, bool eatcycles); @@ -300,6 +298,9 @@ private: void suspend_resume_changed(); attoseconds_t minimum_quantum() const; + +public: + attotime minimum_quantum_time() const { return attotime(0, minimum_quantum()); } }; // iterator diff --git a/src/mame/audio/dcs.cpp b/src/mame/audio/dcs.cpp index 4d0dde895fa..e2aeae153c8 100644 --- a/src/mame/audio/dcs.cpp +++ b/src/mame/audio/dcs.cpp @@ -1962,7 +1962,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( dcs_audio_device::dcs_irq ) /* generate the (internal, thats why the pulse) irq */ if (LOG_DCS_IO) logerror("dcs_irq: Genrating interrupt\n"); - m_cpu->pulse_input_line(ADSP2105_IRQ1, 1); + m_cpu->pulse_input_line(ADSP2105_IRQ1, m_cpu->minimum_quantum_time()); } /* store it */ diff --git a/src/mame/audio/rax.cpp b/src/mame/audio/rax.cpp index bf6c4c939ed..617eae79a79 100644 --- a/src/mame/audio/rax.cpp +++ b/src/mame/audio/rax.cpp @@ -227,7 +227,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( acclaim_rax_device::dma_timer_callback ) if (m_control_regs[BDMA_CONTROL_REG] & 8) m_cpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); else - m_cpu->pulse_input_line(ADSP2181_BDMA, 1); + m_cpu->pulse_input_line(ADSP2181_BDMA, m_cpu->minimum_quantum_time()); timer.adjust(attotime::never); } diff --git a/src/mame/drivers/cball.cpp b/src/mame/drivers/cball.cpp index 4b3258caabc..fe294667f9e 100644 --- a/src/mame/drivers/cball.cpp +++ b/src/mame/drivers/cball.cpp @@ -114,7 +114,7 @@ TIMER_CALLBACK_MEMBER(cball_state::interrupt_callback) { int scanline = param; - m_maincpu->pulse_input_line(0, 1); + m_maincpu->pulse_input_line(0, m_maincpu->minimum_quantum_time()); scanline = scanline + 32; diff --git a/src/mame/drivers/changela.cpp b/src/mame/drivers/changela.cpp index 54980809db9..6ea7203b6ce 100644 --- a/src/mame/drivers/changela.cpp +++ b/src/mame/drivers/changela.cpp @@ -352,7 +352,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(changela_state::changela_scanline) INTERRUPT_GEN_MEMBER(changela_state::chl_mcu_irq) { - m_mcu->pulse_input_line(0, 1); + m_mcu->pulse_input_line(0, m_mcu->minimum_quantum_time()); } void changela_state::machine_start() diff --git a/src/mame/drivers/cvs.cpp b/src/mame/drivers/cvs.cpp index a0fe224e809..8581b6b4a36 100644 --- a/src/mame/drivers/cvs.cpp +++ b/src/mame/drivers/cvs.cpp @@ -227,7 +227,7 @@ WRITE8_MEMBER(cvs_state::cvs_s2636_2_or_character_ram_w) INTERRUPT_GEN_MEMBER(cvs_state::cvs_main_cpu_interrupt) { - device.execute().pulse_input_line_and_vector(0, 0x03, 1); + device.execute().pulse_input_line_and_vector(0, 0x03, device.execute().minimum_quantum_time()); cvs_scroll_stars(); } diff --git a/src/mame/drivers/equites.cpp b/src/mame/drivers/equites.cpp index ea58d2f9391..d10fbe2b4c6 100644 --- a/src/mame/drivers/equites.cpp +++ b/src/mame/drivers/equites.cpp @@ -416,7 +416,7 @@ WRITE8_MEMBER(equites_state::equites_c0f8_w) case 1: // c0f9: RST75 trigger (written by NMI handler) // Note: solder pad CP3 on the pcb would allow to disable this - m_audiocpu->pulse_input_line(I8085_RST75_LINE, 1); + m_audiocpu->pulse_input_line(I8085_RST75_LINE, m_audiocpu->minimum_quantum_time()); break; case 2: // c0fa: INTR trigger (written by NMI handler) diff --git a/src/mame/drivers/fitfight.cpp b/src/mame/drivers/fitfight.cpp index af4d340212e..d1ee97d6419 100644 --- a/src/mame/drivers/fitfight.cpp +++ b/src/mame/drivers/fitfight.cpp @@ -258,7 +258,7 @@ WRITE8_MEMBER(fitfight_state::snd_portc_w) INTERRUPT_GEN_MEMBER(fitfight_state::snd_irq) { - device.execute().pulse_input_line(UPD7810_INTF2, 1); + device.execute().pulse_input_line(UPD7810_INTF2, device.execute().minimum_quantum_time()); } diff --git a/src/mame/drivers/gaelco3d.cpp b/src/mame/drivers/gaelco3d.cpp index 472b72fcfa6..e65502e9719 100644 --- a/src/mame/drivers/gaelco3d.cpp +++ b/src/mame/drivers/gaelco3d.cpp @@ -561,7 +561,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(gaelco3d_state::adsp_autobuffer_irq) reg = m_adsp_ireg_base; /* generate the (internal, thats why the pulse) irq */ - m_adsp->pulse_input_line(ADSP2105_IRQ1, 1); + m_adsp->pulse_input_line(ADSP2105_IRQ1, m_adsp->minimum_quantum_time()); } /* store it */ diff --git a/src/mame/drivers/homedata.cpp b/src/mame/drivers/homedata.cpp index 5d87f0fc10b..faa8401f0d1 100644 --- a/src/mame/drivers/homedata.cpp +++ b/src/mame/drivers/homedata.cpp @@ -253,7 +253,7 @@ INTERRUPT_GEN_MEMBER(homedata_state::homedata_irq) INTERRUPT_GEN_MEMBER(homedata_state::upd7807_irq) { - device.execute().pulse_input_line(UPD7810_INTF1, 1); + device.execute().pulse_input_line(UPD7810_INTF1, device.execute().minimum_quantum_time()); } diff --git a/src/mame/drivers/igs_m027.cpp b/src/mame/drivers/igs_m027.cpp index ab088d6625e..a2389ee2a6a 100644 --- a/src/mame/drivers/igs_m027.cpp +++ b/src/mame/drivers/igs_m027.cpp @@ -329,7 +329,7 @@ INPUT_PORTS_END INTERRUPT_GEN_MEMBER(igs_m027_state::igs_majhong_interrupt) { - device.execute().pulse_input_line(ARM7_FIRQ_LINE, 1); + device.execute().pulse_input_line(ARM7_FIRQ_LINE, device.execute().minimum_quantum_time()); } diff --git a/src/mame/drivers/m90.cpp b/src/mame/drivers/m90.cpp index 3ac5c8626fe..b121752189a 100644 --- a/src/mame/drivers/m90.cpp +++ b/src/mame/drivers/m90.cpp @@ -699,7 +699,7 @@ INTERRUPT_GEN_MEMBER(m90_state::bomblord_fake_nmi) INTERRUPT_GEN_MEMBER(m90_state::m90_interrupt) { - device.execute().pulse_input_line(NEC_INPUT_LINE_INTP0, 1); + device.execute().pulse_input_line(NEC_INPUT_LINE_INTP0, device.execute().minimum_quantum_time()); } INTERRUPT_GEN_MEMBER(m90_state::dynablsb_interrupt) diff --git a/src/mame/drivers/mgolf.cpp b/src/mame/drivers/mgolf.cpp index 58421585d08..d27ffbb548d 100644 --- a/src/mame/drivers/mgolf.cpp +++ b/src/mame/drivers/mgolf.cpp @@ -159,7 +159,7 @@ TIMER_CALLBACK_MEMBER(mgolf_state::interrupt_callback) update_plunger(); - m_maincpu->pulse_input_line(0, 1); + m_maincpu->pulse_input_line(0, m_maincpu->minimum_quantum_time()); scanline = scanline + 32; diff --git a/src/mame/drivers/namcond1.cpp b/src/mame/drivers/namcond1.cpp index 19f16c41265..4931866af33 100644 --- a/src/mame/drivers/namcond1.cpp +++ b/src/mame/drivers/namcond1.cpp @@ -322,7 +322,7 @@ INTERRUPT_GEN_MEMBER(namcond1_state::mcu_interrupt) { if( m_h8_irq5_enabled ) { - device.execute().pulse_input_line(5, 1); + device.execute().pulse_input_line(5, device.execute().minimum_quantum_time()); } } diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp index ee8068ec479..5929f68d546 100644 --- a/src/mame/drivers/namcos22.cpp +++ b/src/mame/drivers/namcos22.cpp @@ -2978,7 +2978,7 @@ ADDRESS_MAP_END TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_interrupt) { - m_mcu->pulse_input_line(M37710_LINE_TIMERA3TICK, 1); + m_mcu->pulse_input_line(M37710_LINE_TIMERA3TICK, m_mcu->minimum_quantum_time()); } TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_update) @@ -3013,7 +3013,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_update) TIMER_CALLBACK_MEMBER(namcos22_state::adillor_trackball_interrupt) { - m_mcu->pulse_input_line(param ? M37710_LINE_TIMERA2TICK : M37710_LINE_TIMERA3TICK, 1); + m_mcu->pulse_input_line(param ? M37710_LINE_TIMERA2TICK : M37710_LINE_TIMERA3TICK, m_mcu->minimum_quantum_time()); } TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::adillor_trackball_update) diff --git a/src/mame/drivers/pntnpuzl.cpp b/src/mame/drivers/pntnpuzl.cpp index 4406c61808a..a58618a2326 100644 --- a/src/mame/drivers/pntnpuzl.cpp +++ b/src/mame/drivers/pntnpuzl.cpp @@ -293,7 +293,7 @@ INPUT_CHANGED_MEMBER(pntnpuzl_state::coin_inserted) { /* TODO: change this! */ if(newval) - m_maincpu->pulse_input_line((uint8_t)(uintptr_t)param, 1); + m_maincpu->pulse_input_line((uint8_t)(uintptr_t)param, m_maincpu->minimum_quantum_time()); } static INPUT_PORTS_START( pntnpuzl ) diff --git a/src/mame/drivers/riscpc.cpp b/src/mame/drivers/riscpc.cpp index 06bd5c8e1a6..07daf4733b0 100644 --- a/src/mame/drivers/riscpc.cpp +++ b/src/mame/drivers/riscpc.cpp @@ -589,7 +589,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::IOMD_timer0_callback) m_IRQ_status_A|=0x20; if(m_IRQ_mask_A&0x20) { - m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1); + m_maincpu->pulse_input_line(ARM7_IRQ_LINE, m_maincpu->minimum_quantum_time()); } } @@ -598,7 +598,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::IOMD_timer1_callback) m_IRQ_status_A|=0x40; if(m_IRQ_mask_A&0x40) { - m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1); + m_maincpu->pulse_input_line(ARM7_IRQ_LINE, m_maincpu->minimum_quantum_time()); } } @@ -607,7 +607,7 @@ TIMER_CALLBACK_MEMBER(riscpc_state::flyback_timer_callback) m_IRQ_status_A|=0x08; if(m_IRQ_mask_A&0x08) { - m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1); + m_maincpu->pulse_input_line(ARM7_IRQ_LINE, m_maincpu->minimum_quantum_time()); } m_flyback_timer->adjust(machine().first_screen()->time_until_pos(m_vidc20_vert_reg[VDER])); diff --git a/src/mame/drivers/ssfindo.cpp b/src/mame/drivers/ssfindo.cpp index 42348d99fde..6f7037e304c 100644 --- a/src/mame/drivers/ssfindo.cpp +++ b/src/mame/drivers/ssfindo.cpp @@ -339,7 +339,7 @@ TIMER_CALLBACK_MEMBER(ssfindo_state::PS7500_Timer0_callback) m_PS7500_IO[IRQSTA]|=0x20; if(m_PS7500_IO[IRQMSKA]&0x20) { - m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1); + m_maincpu->pulse_input_line(ARM7_IRQ_LINE, m_maincpu->minimum_quantum_time()); } } @@ -358,7 +358,7 @@ TIMER_CALLBACK_MEMBER(ssfindo_state::PS7500_Timer1_callback) m_PS7500_IO[IRQSTA]|=0x40; if(m_PS7500_IO[IRQMSKA]&0x40) { - m_maincpu->pulse_input_line(ARM7_IRQ_LINE, 1); + m_maincpu->pulse_input_line(ARM7_IRQ_LINE, m_maincpu->minimum_quantum_time()); } } @@ -376,7 +376,7 @@ INTERRUPT_GEN_MEMBER(ssfindo_state::interrupt) m_PS7500_IO[IRQSTA]|=0x08; if(m_PS7500_IO[IRQMSKA]&0x08) { - device.execute().pulse_input_line(ARM7_IRQ_LINE, 1); + device.execute().pulse_input_line(ARM7_IRQ_LINE, device.execute().minimum_quantum_time()); } } diff --git a/src/mame/drivers/starshp1.cpp b/src/mame/drivers/starshp1.cpp index 02256b74153..6d71cde804c 100644 --- a/src/mame/drivers/starshp1.cpp +++ b/src/mame/drivers/starshp1.cpp @@ -21,7 +21,7 @@ Atari Starship 1 driver INTERRUPT_GEN_MEMBER(starshp1_state::starshp1_interrupt) { if ((ioport("SYSTEM")->read() & 0x90) != 0x90) - device.execute().pulse_input_line(0, 1); + device.execute().pulse_input_line(0, device.execute().minimum_quantum_time()); } diff --git a/src/mame/drivers/zac_2.cpp b/src/mame/drivers/zac_2.cpp index a5e51abc05d..daccf3470ac 100644 --- a/src/mame/drivers/zac_2.cpp +++ b/src/mame/drivers/zac_2.cpp @@ -185,7 +185,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(zac_2_state::zac_2_inttimer) { // a pulse is sent via a capacitor (similar to what one finds at a reset pin) if (m_t_c > 0x80) - m_maincpu->pulse_input_line_and_vector(INPUT_LINE_IRQ0, 0xbf, 2); + m_maincpu->pulse_input_line_and_vector(INPUT_LINE_IRQ0, 0xbf, 2 * m_maincpu->minimum_quantum_time()); else m_t_c++; } diff --git a/src/mame/machine/3do.cpp b/src/mame/machine/3do.cpp index 0325a759ee8..f2f35b21034 100644 --- a/src/mame/machine/3do.cpp +++ b/src/mame/machine/3do.cpp @@ -121,7 +121,7 @@ void _3do_state::m_3do_request_fiq(uint32_t irq_req, uint8_t type) if((m_clio.irq0 & m_clio.irq0_enable) || (m_clio.irq1 & m_clio.irq1_enable)) { //printf("Go irq %08x & %08x %08x & %08x\n",m_clio.irq0, m_clio.irq0_enable, m_clio.irq1, m_clio.irq1_enable); - m_maincpu->pulse_input_line(ARM7_FIRQ_LINE, 1); + m_maincpu->pulse_input_line(ARM7_FIRQ_LINE, m_maincpu->minimum_quantum_time()); } } diff --git a/src/mame/machine/archimds.cpp b/src/mame/machine/archimds.cpp index ae026c8938a..8868f485f1a 100644 --- a/src/mame/machine/archimds.cpp +++ b/src/mame/machine/archimds.cpp @@ -67,7 +67,7 @@ void archimedes_state::archimedes_request_fiq(int mask) if (m_ioc_regs[FIQ_STATUS] & m_ioc_regs[FIQ_MASK]) { - m_maincpu->pulse_input_line(ARM_FIRQ_LINE, 1); + m_maincpu->pulse_input_line(ARM_FIRQ_LINE, m_maincpu->minimum_quantum_time()); //m_maincpu->set_input_line(ARM_FIRQ_LINE, CLEAR_LINE); //m_maincpu->set_input_line(ARM_FIRQ_LINE, ASSERT_LINE); diff --git a/src/mame/machine/galaxold.cpp b/src/mame/machine/galaxold.cpp index 51ceaca724b..165830bd07b 100644 --- a/src/mame/machine/galaxold.cpp +++ b/src/mame/machine/galaxold.cpp @@ -171,7 +171,7 @@ DRIVER_INIT_MEMBER(galaxold_state,4in1) INTERRUPT_GEN_MEMBER(galaxold_state::hunchbks_vh_interrupt) { - device.execute().pulse_input_line_and_vector(0, 0x03, 1); + device.execute().pulse_input_line_and_vector(0, 0x03, device.execute().minimum_quantum_time()); } DRIVER_INIT_MEMBER(galaxold_state,bullsdrtg) diff --git a/src/mame/machine/namcos2.cpp b/src/mame/machine/namcos2.cpp index e060200d4de..eb055be1911 100644 --- a/src/mame/machine/namcos2.cpp +++ b/src/mame/machine/namcos2.cpp @@ -504,7 +504,7 @@ WRITE8_MEMBER( namcos2_shared_state::namcos2_mcu_analog_ctrl_w ) /* If the interrupt enable bit is set trigger an A/D IRQ */ if(data & 0x20) { - m_mcu->pulse_input_line(HD63705_INT_ADCONV, 1); + m_mcu->pulse_input_line(HD63705_INT_ADCONV, m_mcu->minimum_quantum_time()); } } } diff --git a/src/mame/machine/pgmprot_igs027a_type3.cpp b/src/mame/machine/pgmprot_igs027a_type3.cpp index 65ae0c7b89a..5dd50881dfb 100644 --- a/src/mame/machine/pgmprot_igs027a_type3.cpp +++ b/src/mame/machine/pgmprot_igs027a_type3.cpp @@ -90,7 +90,7 @@ READ16_MEMBER(pgm_arm_type3_state::svg_68k_nmi_r ) WRITE16_MEMBER(pgm_arm_type3_state::svg_68k_nmi_w ) { - m_prot->pulse_input_line(ARM7_FIRQ_LINE, 1); + m_prot->pulse_input_line(ARM7_FIRQ_LINE, m_prot->minimum_quantum_time()); } WRITE16_MEMBER(pgm_arm_type3_state::svg_latch_68k_w ) From 9ebe37ae55a2875bc4b6d9268fbad021e7acaf64 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 14:19:34 -0500 Subject: [PATCH 23/35] esq1.cpp: This is actually 2681 as well (nw) --- src/mame/drivers/esq1.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/esq1.cpp b/src/mame/drivers/esq1.cpp index a4724698827..627604ff5a2 100644 --- a/src/mame/drivers/esq1.cpp +++ b/src/mame/drivers/esq1.cpp @@ -396,7 +396,7 @@ public: { } required_device m_maincpu; - required_device m_duart; + required_device m_duart; required_device m_filters; optional_device m_fdc; optional_device m_panel; @@ -502,7 +502,7 @@ static ADDRESS_MAP_START( esq1_map, AS_PROGRAM, 8, esq1_state ) AM_RANGE(0x0000, 0x1fff) AM_RAM // OSRAM AM_RANGE(0x4000, 0x5fff) AM_RAM // SEQRAM AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("es5503", es5503_device, read, write) - AM_RANGE(0x6400, 0x640f) AM_DEVREADWRITE("duart", mc68681_device, read, write) + AM_RANGE(0x6400, 0x640f) AM_DEVREADWRITE("duart", scn2681_device, read, write) AM_RANGE(0x6800, 0x68ff) AM_WRITE(analog_w) AM_RANGE(0x7000, 0x7fff) AM_ROMBANK("osbank") AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("osrom", 0x8000) // OS "high" ROM is always mapped here @@ -513,7 +513,7 @@ static ADDRESS_MAP_START( sq80_map, AS_PROGRAM, 8, esq1_state ) AM_RANGE(0x4000, 0x5fff) AM_RAM // SEQRAM // AM_RANGE(0x4000, 0x5fff) AM_READWRITE(seqdosram_r, seqdosram_w) AM_RANGE(0x6000, 0x63ff) AM_DEVREADWRITE("es5503", es5503_device, read, write) - AM_RANGE(0x6400, 0x640f) AM_DEVREADWRITE("duart", mc68681_device, read, write) + AM_RANGE(0x6400, 0x640f) AM_DEVREADWRITE("duart", scn2681_device, read, write) AM_RANGE(0x6800, 0x68ff) AM_WRITE(analog_w) AM_RANGE(0x6c00, 0x6dff) AM_WRITE(mapper_w) AM_RANGE(0x6e00, 0x6fff) AM_READWRITE(wd1772_r, wd1772_w) @@ -582,7 +582,7 @@ static MACHINE_CONFIG_START( esq1 ) MCFG_CPU_ADD("maincpu", M6809E, 4000000) // how fast is it? MCFG_CPU_PROGRAM_MAP(esq1_map) - MCFG_DEVICE_ADD("duart", MC68681, 4000000) + MCFG_DEVICE_ADD("duart", SCN2681, 4000000) MCFG_MC68681_SET_EXTERNAL_CLOCKS(500000, 500000, 1000000, 1000000) MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", M6809_IRQ_LINE)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(esq1_state, duart_tx_a)) @@ -590,10 +590,10 @@ static MACHINE_CONFIG_START( esq1 ) MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(esq1_state, duart_output)) MCFG_ESQPANEL2X40_ADD("panel") - MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", mc68681_device, rx_b_w)) + MCFG_ESQPANEL_TX_CALLBACK(DEVWRITELINE("duart", scn2681_device, rx_b_w)) MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin") - MCFG_MIDI_RX_HANDLER(DEVWRITELINE("duart", mc68681_device, rx_a_w)) // route MIDI Tx send directly to 68681 channel A Rx + MCFG_MIDI_RX_HANDLER(DEVWRITELINE("duart", scn2681_device, rx_a_w)) // route MIDI Tx send directly to 68681 channel A Rx MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout") From 13eaaff8f8bbc0dae06b617c83b1b53b23c21e8e Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 14:33:35 -0500 Subject: [PATCH 24/35] esq1.cpp: Add XTAL clocks (nw) --- src/mame/drivers/esq1.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/esq1.cpp b/src/mame/drivers/esq1.cpp index 627604ff5a2..26ae4ad59a3 100644 --- a/src/mame/drivers/esq1.cpp +++ b/src/mame/drivers/esq1.cpp @@ -582,8 +582,8 @@ static MACHINE_CONFIG_START( esq1 ) MCFG_CPU_ADD("maincpu", M6809E, 4000000) // how fast is it? MCFG_CPU_PROGRAM_MAP(esq1_map) - MCFG_DEVICE_ADD("duart", SCN2681, 4000000) - MCFG_MC68681_SET_EXTERNAL_CLOCKS(500000, 500000, 1000000, 1000000) + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_8MHz / 2) + MCFG_MC68681_SET_EXTERNAL_CLOCKS(XTAL_8MHz / 16, XTAL_8MHz / 16, XTAL_8MHz / 8, XTAL_8MHz / 8) MCFG_MC68681_IRQ_CALLBACK(INPUTLINE("maincpu", M6809_IRQ_LINE)) MCFG_MC68681_A_TX_CALLBACK(WRITELINE(esq1_state, duart_tx_a)) MCFG_MC68681_B_TX_CALLBACK(WRITELINE(esq1_state, duart_tx_b)) @@ -603,7 +603,7 @@ static MACHINE_CONFIG_START( esq1 ) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) - MCFG_ES5503_ADD("es5503", 7000000) + MCFG_ES5503_ADD("es5503", XTAL_8MHz) MCFG_ES5503_OUTPUT_CHANNELS(8) MCFG_ES5503_IRQ_FUNC(WRITELINE(esq1_state, esq1_doc_irq)) MCFG_ES5503_ADC_FUNC(READ8(esq1_state, esq1_adc_read)) From 220443f85b2f89b7497987a697e4d47886bad1f2 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 14:41:58 -0500 Subject: [PATCH 25/35] esq1.cpp: Use full machine names (nw) --- src/mame/drivers/esq1.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/esq1.cpp b/src/mame/drivers/esq1.cpp index 26ae4ad59a3..600341203e9 100644 --- a/src/mame/drivers/esq1.cpp +++ b/src/mame/drivers/esq1.cpp @@ -690,6 +690,6 @@ ROM_START( esqm ) ROM_END -CONS( 1986, esq1, 0 , 0, esq1, esq1, esq1_state, 0, "Ensoniq", "ESQ-1", MACHINE_NOT_WORKING ) -CONS( 1986, esqm, esq1, 0, esq1, esq1, esq1_state, 0, "Ensoniq", "ESQ-M", MACHINE_NOT_WORKING ) -CONS( 1988, sq80, 0, 0, sq80, esq1, esq1_state, 0, "Ensoniq", "SQ-80", MACHINE_NOT_WORKING ) +CONS( 1986, esq1, 0 , 0, esq1, esq1, esq1_state, 0, "Ensoniq", "ESQ-1 Digital Wave Synthesizer", MACHINE_NOT_WORKING ) +CONS( 1986, esqm, esq1, 0, esq1, esq1, esq1_state, 0, "Ensoniq", "ESQ-M Digital Wave Synthesizer Module", MACHINE_NOT_WORKING ) +CONS( 1988, sq80, 0, 0, sq80, esq1, esq1_state, 0, "Ensoniq", "SQ-80 Cross Wave Synthesizer", MACHINE_NOT_WORKING ) From 0068ae654749b1a4be0bb3d95994e78886173a9b Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Wed, 22 Nov 2017 21:32:52 +0200 Subject: [PATCH 26/35] tmc600: Fixed cursor blink rate. [Curt Coder] --- src/mame/video/tmc600.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/mame/video/tmc600.cpp b/src/mame/video/tmc600.cpp index 86c9e7562c0..3f5a0e9b9ab 100644 --- a/src/mame/video/tmc600.cpp +++ b/src/mame/video/tmc600.cpp @@ -69,18 +69,19 @@ CDP1869_PCB_READ_MEMBER( tmc600_state::tmc600_pcb_r ) WRITE_LINE_MEMBER( tmc600_state::prd_w ) { - if (state) { + if (!state) { m_frame++; + + switch (m_frame) { + case 8: + m_maincpu->int_w(CLEAR_LINE); + break; - switch (m_frame) - { - case 31: - m_frame = 0; - m_blink = !m_blink; - // fallthru - case 15: - m_maincpu->int_w(m_rtc_int); - break; + case 16: + m_maincpu->int_w(m_rtc_int); + m_blink = !m_blink; + m_frame = 0; + break; } } } From 3d32ab63d469e31d3fa5ae4c82b6dee70be62f6f Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 14:58:39 -0500 Subject: [PATCH 27/35] mc68681: Note on model differences (nw) --- src/devices/machine/mc68681.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/devices/machine/mc68681.cpp b/src/devices/machine/mc68681.cpp index 720e20bddcd..5b5d67aca92 100644 --- a/src/devices/machine/mc68681.cpp +++ b/src/devices/machine/mc68681.cpp @@ -11,6 +11,12 @@ Improved interrupt handling by R. Belmont Rewrite and modernization in progress by R. Belmont Addition of the duart compatible 68340 serial module support by Edstrom + + The main incompatibility between the 2681 and 68681 (Signetics and Motorola each + manufactured both versions of the chip) is that the 68681 has a R/W input and + generates a 68000-compatible DTACK signal, instead of using generic RD and WR + strobes as the 2681 does. The 68681 also adds a programmable interrupt vector, + with an IACK input replacing IP6. */ #include "emu.h" From 5259599bd5c70b7856ad75746ab2874989239e56 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 15:37:46 -0500 Subject: [PATCH 28/35] apollo: Clean up SIO device now that base device is more or less equivalent to 2681 (nw) --- src/mame/includes/apollo.h | 1 - src/mame/machine/apollo.cpp | 14 +++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/mame/includes/apollo.h b/src/mame/includes/apollo.h index b15bd7296b6..d00be887813 100644 --- a/src/mame/includes/apollo.h +++ b/src/mame/includes/apollo.h @@ -340,7 +340,6 @@ protected: private: uint8_t m_csrb; - uint8_t m_ip6; }; DECLARE_DEVICE_TYPE(APOLLO_SIO, apollo_sio) diff --git a/src/mame/machine/apollo.cpp b/src/mame/machine/apollo.cpp index 5284d636c8f..d13aa342fc2 100644 --- a/src/mame/machine/apollo.cpp +++ b/src/mame/machine/apollo.cpp @@ -714,8 +714,7 @@ TIMER_CALLBACK_MEMBER( apollo_state::apollo_rtc_timer ) apollo_sio::apollo_sio(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : duart_base_device(mconfig, APOLLO_SIO, tag, owner, clock), - m_csrb(0), - m_ip6(0) + m_csrb(0) { } @@ -728,10 +727,7 @@ void apollo_sio::device_reset() ip3_w((input_data & 0x08) ? ASSERT_LINE : CLEAR_LINE); ip4_w((input_data & 0x10) ? ASSERT_LINE : CLEAR_LINE); ip5_w((input_data & 0x20) ? ASSERT_LINE : CLEAR_LINE); -// ip6_w((input_data & 0x40) ? ASSERT_LINE : CLEAR_LINE); - - // MC2681 has IP[6] (instead of /IACK on MC68681) - m_ip6 = (input_data & 0x40) ? ASSERT_LINE : CLEAR_LINE; + ip6_w((input_data & 0x40) ? ASSERT_LINE : CLEAR_LINE); } READ8_MEMBER( apollo_sio::read ) @@ -761,10 +757,6 @@ READ8_MEMBER( apollo_sio::read ) data = 0xff; } break; - case 0x0d: /* IP */ - // MC2681 has IP[6] (instead of /IACK on MC68681) - data = (data & ~0x40) | (m_ip6 ? 0x40 : 0); - break; } // omit logging if sio is being polled from the boot rom @@ -808,7 +800,7 @@ WRITE8_MEMBER( apollo_sio::write ) } // device type definition -DEFINE_DEVICE_TYPE(APOLLO_SIO, apollo_sio, "apollo_sio", "DN3000/DS3500 SIO") +DEFINE_DEVICE_TYPE(APOLLO_SIO, apollo_sio, "apollo_sio", "DN3000/DS3500 SIO (MC2681)") WRITE_LINE_MEMBER(apollo_state::sio_irq_handler) { From caaeb6be54c368b1a1a0bfcfcf9cc04e2e145dbf Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 15:38:35 -0500 Subject: [PATCH 29/35] omti8621: Remove custom instance name to avoid collision with Apollo floppies (nw) --- src/devices/bus/isa/omti8621.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/devices/bus/isa/omti8621.cpp b/src/devices/bus/isa/omti8621.cpp index ddffb43575e..3490b7ae7fe 100644 --- a/src/devices/bus/isa/omti8621.cpp +++ b/src/devices/bus/isa/omti8621.cpp @@ -64,8 +64,6 @@ public: virtual bool is_reset_on_load() const override { return 0; } virtual bool support_command_line_image_creation() const override { return 1; } virtual const char *file_extensions() const override { return "awd"; } - virtual const char *custom_instance_name() const override { return "disk"; } - virtual const char *custom_brief_instance_name() const override { return "disk"; } virtual image_init_result call_create(int format_type, util::option_resolution *format_options) override; protected: From 139d4c7bb348d631df1bd2646dfea2a84a0710c9 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 16:18:16 -0500 Subject: [PATCH 30/35] vt220: Add SCN2681 hookup based on schematics (nw; code doesn't seem to quite agree) --- src/mame/drivers/vt220.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/mame/drivers/vt220.cpp b/src/mame/drivers/vt220.cpp index abb63cfab67..94927aad235 100644 --- a/src/mame/drivers/vt220.cpp +++ b/src/mame/drivers/vt220.cpp @@ -13,6 +13,7 @@ #include "emu.h" #include "cpu/mcs51/mcs51.h" +#include "machine/mc68681.h" #include "machine/ram.h" #include "screen.h" @@ -38,6 +39,8 @@ static ADDRESS_MAP_START(vt220_mem, AS_PROGRAM, 8, vt220_state) ADDRESS_MAP_END static ADDRESS_MAP_START(vt220_io, AS_IO, 8, vt220_state) + AM_RANGE(0x2000, 0x2fff) AM_MIRROR(0xc000) AM_RAM + AM_RANGE(0x3000, 0x300f) AM_MIRROR(0xc7f0) AM_DEVREADWRITE("duart", scn2681_device, read, write) ADDRESS_MAP_END /* Input ports */ @@ -65,6 +68,7 @@ static MACHINE_CONFIG_START( vt220 ) MCFG_CPU_PROGRAM_MAP(vt220_mem) MCFG_CPU_IO_MAP(vt220_io) + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) From 49fa0203d24ff8838946caa8508836bdd1061879 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 22 Nov 2017 17:08:47 -0500 Subject: [PATCH 31/35] d461: Another skeleton driver created (nw) --- scripts/target/mame/mess.lua | 1 + src/mame/drivers/d400.cpp | 64 ++++++++++++++++++++++++++++++++++ src/mame/drivers/terminals.cpp | 17 --------- src/mame/mame.lst | 4 ++- src/mame/mess.flt | 1 + 5 files changed, 69 insertions(+), 18 deletions(-) create mode 100644 src/mame/drivers/d400.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 7c92f6261fa..26de92f0f4d 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3455,6 +3455,7 @@ files { MAME_DIR .. "src/mame/drivers/cxhumax.cpp", MAME_DIR .. "src/mame/includes/cxhumax.h", MAME_DIR .. "src/mame/drivers/czk80.cpp", + MAME_DIR .. "src/mame/drivers/d400.cpp", MAME_DIR .. "src/mame/drivers/d6800.cpp", MAME_DIR .. "src/mame/drivers/d6809.cpp", MAME_DIR .. "src/mame/drivers/daruma.cpp", diff --git a/src/mame/drivers/d400.cpp b/src/mame/drivers/d400.cpp new file mode 100644 index 00000000000..d3d943d8eb0 --- /dev/null +++ b/src/mame/drivers/d400.cpp @@ -0,0 +1,64 @@ +// license:BSD-3-Clause +// copyright-holders: +/*********************************************************************************************************************************** + +Skeleton driver for Data General Dasher 400 series terminals. + +************************************************************************************************************************************/ + +#include "emu.h" +#include "cpu/m6809/m6809.h" +#include "machine/mc68681.h" +#include "machine/x2212.h" + +class d400_state : public driver_device +{ +public: + d400_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + { } + +private: + required_device m_maincpu; +}; + +static ADDRESS_MAP_START( mem_map, AS_PROGRAM, 8, d400_state ) + AM_RANGE(0x0000, 0x3fff) AM_RAM + AM_RANGE(0x4800, 0x48ff) AM_RAM + AM_RANGE(0x5000, 0x50ff) AM_RAM + AM_RANGE(0x6000, 0x6fff) AM_RAM + AM_RANGE(0x7800, 0x780f) AM_DEVREADWRITE("duart", scn2681_device, read, write) + AM_RANGE(0x7880, 0x78bf) AM_DEVREADWRITE("novram", x2210_device, read, write) + AM_RANGE(0x7c00, 0x7c00) AM_WRITENOP + AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("maincpu", 0) +ADDRESS_MAP_END + +static INPUT_PORTS_START( d461 ) +INPUT_PORTS_END + +static MACHINE_CONFIG_START( d461 ) + MCFG_CPU_ADD("maincpu", M6809, 4'000'000) + MCFG_CPU_PROGRAM_MAP(mem_map) + + MCFG_DEVICE_ADD("novram", X2210, 0) + + MCFG_DEVICE_ADD("duart", SCN2681, XTAL_3_6864MHz) +MACHINE_CONFIG_END + + + +/************************************************************************************************************** + +Data General D461. +Chips: SCN2681A, X2210P, 2x HM6116P-2, 2x HM6264P-20, HD68B09EP, CRT9007, 1x 8-sw dip. +Crystals: 3.6864, 59.2920 + +***************************************************************************************************************/ + +ROM_START( d461 ) + ROM_REGION(0x10000, "maincpu", 0) + ROM_LOAD( "dgc_100_5776-05.bin", 0x0000, 0x8000, CRC(fdce2132) SHA1(82eac1751c31f99d4490505e16af5e7e7a52b310) ) +ROM_END + +COMP( 1986, d461, 0, 0, d461, d461, d400_state, 0, "Data General", "Dasher D461", MACHINE_IS_SKELETON ) diff --git a/src/mame/drivers/terminals.cpp b/src/mame/drivers/terminals.cpp index e3775eadfb1..4c7bfa0c598 100644 --- a/src/mame/drivers/terminals.cpp +++ b/src/mame/drivers/terminals.cpp @@ -124,23 +124,6 @@ COMP( 1987, att630, 0, 0, terminals, terminals, terminals_state, 0, "AT&T", "630 -/************************************************************************************************************** - -Data General D461. -Chips: SCN2681A, X2210P, 2x HM6116P-2, 2x HM6264P-20, HD68B09EP, CRT9007, 1x 8-sw dip. -Crystals: 3.6864, 59.2920 - -***************************************************************************************************************/ - -ROM_START( d461 ) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD( "dgc_100_5776-05.bin", 0x0000, 0x8000, CRC(fdce2132) SHA1(82eac1751c31f99d4490505e16af5e7e7a52b310) ) -ROM_END - -COMP( 1985, d461, 0, 0, terminals, terminals, terminals_state, 0, "Data General", "D461", MACHINE_IS_SKELETON ) - - - /************************************************************************************************************** Hewlett-Packard HP-700/92. diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 8e24c127f14..7feb04e3be2 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -10728,6 +10728,9 @@ skydest // PD0 (c) 1985 Taito Corporation @source:czk80.cpp czk80 // +@source:d400.cpp +d461 // + @source:d6800.cpp d6800 // Dream 6800 @@ -36319,7 +36322,6 @@ t4490 // Terco 4490 Mill CNC Control (c) 1986 @source:terminals.cpp aaa att630 -d461 hp700_92 hp2622a qvt70 diff --git a/src/mame/mess.flt b/src/mame/mess.flt index fd17e9bda7a..eb5b54042ed 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -151,6 +151,7 @@ cxgz80.cpp cxhumax.cpp cybiko.cpp czk80.cpp +d400.cpp d6800.cpp d6809.cpp dai.cpp From 8aede10f2525f185867725d898c281714424bfc3 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 22 Nov 2017 23:32:44 +0100 Subject: [PATCH 32/35] dragon: fixed clockspeed (nw) http://mametesters.org/view.php?id=6772 --- src/emu/drivers/xtal.h | 1 + src/mame/drivers/dragon.cpp | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h index 7a01107ab8c..c08857770c0 100644 --- a/src/emu/drivers/xtal.h +++ b/src/emu/drivers/xtal.h @@ -152,6 +152,7 @@ enum XTAL_14MHz = 14000000, XTAL_14_112MHz = 14112000, /* Timex/Sinclair TS2068 */ XTAL_14_192640MHz = 14192640, /* Reported by Central Data 2650 document, true xtal unchecked on PCB */ + XTAL_14_218MHz = 14218000, /* Dragon */ XTAL_14_3MHz = 14300000, /* Agat-7 */ XTAL_14_314MHz = 14314000, /* Taito TTL Board */ XTAL_14_31818MHz = 14318181, /* Extremely common, used on 100's of PCBs (4x NTSC subcarrier) */ diff --git a/src/mame/drivers/dragon.cpp b/src/mame/drivers/dragon.cpp index a6c56109853..1a8846133ac 100644 --- a/src/mame/drivers/dragon.cpp +++ b/src/mame/drivers/dragon.cpp @@ -175,7 +175,7 @@ SLOT_INTERFACE_END static MACHINE_CONFIG_START( dragon_base ) MCFG_DEVICE_MODIFY(":") - MCFG_DEVICE_CLOCK(XTAL_4_433619MHz) + MCFG_DEVICE_CLOCK(XTAL_14_218MHz/4) // basic machine hardware MCFG_CPU_ADD("maincpu", M6809E, DERIVED_CLOCK(1, 1)) @@ -200,7 +200,7 @@ static MACHINE_CONFIG_START( dragon_base ) MCFG_PIA_IRQA_HANDLER(WRITELINE(coco_state, pia1_firq_a)) MCFG_PIA_IRQB_HANDLER(WRITELINE(coco_state, pia1_firq_b)) - MCFG_SAM6883_ADD(SAM_TAG, XTAL_4_433619MHz, MAINCPU_TAG, AS_PROGRAM) + MCFG_SAM6883_ADD(SAM_TAG, XTAL_14_218MHz/4, MAINCPU_TAG, AS_PROGRAM) MCFG_SAM6883_RES_CALLBACK(READ8(dragon_state, sam_read)) MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_FORMATS(coco_cassette_formats) @@ -280,7 +280,7 @@ static MACHINE_CONFIG_DERIVED( d64plus, dragon64 ) MCFG_PALETTE_ADD_MONOCHROME("palette") // crtc - MCFG_MC6845_ADD("crtc", HD6845, "plus_screen", 14218000 / 8) /* unknown clock, hand tuned to get ~50 fps */ + MCFG_MC6845_ADD("crtc", HD6845, "plus_screen", XTAL_14_218MHz/4/2) MCFG_MC6845_SHOW_BORDER_AREA(false) MCFG_MC6845_CHAR_WIDTH(8) MCFG_MC6845_UPDATE_ROW_CB(d64plus_state, crtc_update_row) From 1af2583e28b186d0a23117422ac666382faceb48 Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 23 Nov 2017 00:24:07 +0100 Subject: [PATCH 33/35] coco: add missing build dependency (nw) http://mametesters.org/view.php?id=6771 --- src/devices/bus/coco/cococart.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/devices/bus/coco/cococart.h b/src/devices/bus/coco/cococart.h index 0c03446699d..299aa6ed778 100644 --- a/src/devices/bus/coco/cococart.h +++ b/src/devices/bus/coco/cococart.h @@ -22,6 +22,7 @@ #include "cpu/tms7000/tms7000.h" #include "machine/mos6551.h" #include "machine/6850acia.h" +#include "machine/mc14411.h" #include "machine/msm6242.h" #include "machine/ds1315.h" #include "machine/wd_fdc.h" From 85cc2f5317afccd0173688fd22c1e1ca17e97d72 Mon Sep 17 00:00:00 2001 From: sjy96525 <1580594783@qq.com> Date: Sat, 18 Nov 2017 14:22:53 +0800 Subject: [PATCH 34/35] Correct Daytona USA Year (Exclude Daytona USA Deluxe '93) Daytona USA says 1994 and released date is March 1994, Daytona USA Deluxe '93 says 1993. --- src/mame/drivers/model2.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index 366ce8e77c4..e532fd3709b 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -6123,13 +6123,13 @@ DRIVER_INIT_MEMBER(model2_state,srallyc) // Model 2 (TGPs, Model 1 sound board) -GAME( 1993, daytona, 0, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonase, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA Special Edition (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytona, 0, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonase, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA Special Edition (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1993, daytona93, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA Deluxe '93", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonas, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (With Saturn Adverts)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonat, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 1)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonata, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 2)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytonam, daytona, daytona, daytona, model2_state, daytonam, ROT0, "Sega", "Daytona USA (Japan, To The MAXX)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonas, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (With Saturn Adverts)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonat, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 1)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonata, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 2)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonam, daytona, daytona, daytona, model2_state, daytonam, ROT0, "Sega", "Daytona USA (Japan, To The MAXX)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, desert, 0, model2o, desert, model2_state, 0, ROT0, "Sega / Martin Marietta", "Desert Tank", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, vcop, 0, model2o, vcop, model2_state, 0, ROT0, "Sega", "Virtua Cop (Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, vcopa, vcop, model2o, vcop, model2_state, 0, ROT0, "Sega", "Virtua Cop (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) From 0f2e73a4baa9e8ef971555c1e5cc0326aff94b0a Mon Sep 17 00:00:00 2001 From: hap Date: Thu, 23 Nov 2017 01:15:36 +0100 Subject: [PATCH 35/35] model2 daytona: mark turbo hacks as hacks. change title for daytona93 (nw) --- src/mame/drivers/model2.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index e532fd3709b..87168015871 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -5600,7 +5600,7 @@ ROM_START( daytonase ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Mo ROM_LOAD("epr-16488a.ic12", 0x000000, 0x010000, CRC(546c5d1a) SHA1(5533301fe7e3b499e6cee12230d2c656c3c667da) ) ROM_END -ROM_START( daytona93 ) /* Daytona USA Deluxe '93 version (There is said to be a Deluxe '94 edition) */ +ROM_START( daytona93 ) /* Daytona USA (Deluxe cabinet, '93 version. There is said to be a Deluxe '94 edition) */ ROM_REGION( 0x200000, "maincpu", 0 ) // i960 program ROM_LOAD32_WORD("epr-16530a.12", 0x000000, 0x020000, CRC(39e962b5) SHA1(b98a1faabb4f1eff707a94c32224c7820f259874) ) ROM_LOAD32_WORD("epr-16531a.13", 0x000002, 0x020000, CRC(693126eb) SHA1(779734ba536db67e14760d52e8d8d7db07816481) ) @@ -6125,11 +6125,11 @@ DRIVER_INIT_MEMBER(model2_state,srallyc) // Model 2 (TGPs, Model 1 sound board) GAME( 1994, daytona, 0, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, daytonase, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA Special Edition (Japan, Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1993, daytona93, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA Deluxe '93", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1993, daytona93, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, daytonas, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (With Saturn Adverts)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1994, daytonat, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 1)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1994, daytonata, daytona, daytona, daytona, model2_state, srallyc, ROT0, "Sega", "Daytona USA (Japan, Turbo hack, set 2)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1994, daytonam, daytona, daytona, daytona, model2_state, daytonam, ROT0, "Sega", "Daytona USA (Japan, To The MAXX)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonat, daytona, daytona, daytona, model2_state, srallyc, ROT0, "hack (Kyle Hodgetts)", "Daytona USA (Japan, Turbo hack, set 1)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1994, daytonata, daytona, daytona, daytona, model2_state, srallyc, ROT0, "hack (Kyle Hodgetts)", "Daytona USA (Japan, Turbo hack, set 2)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) +GAME( 2001, daytonam, daytona, daytona, daytona, model2_state, daytonam, ROT0, "hack (Kyle Hodgetts)", "Daytona USA (Japan, To The MAXX)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, desert, 0, model2o, desert, model2_state, 0, ROT0, "Sega / Martin Marietta", "Desert Tank", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, vcop, 0, model2o, vcop, model2_state, 0, ROT0, "Sega", "Virtua Cop (Revision B)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS ) GAME( 1994, vcopa, vcop, model2o, vcop, model2_state, 0, ROT0, "Sega", "Virtua Cop (Revision A)", MACHINE_NOT_WORKING|MACHINE_IMPERFECT_GRAPHICS )