This commit is contained in:
Robbbert 2017-09-27 23:38:13 +10:00
commit adf48561a1
20 changed files with 772 additions and 227 deletions

View File

@ -4,8 +4,8 @@
--> -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.mamedev.mame" package="org.mamedev.mame"
android:versionCode="189" android:versionCode="190"
android:versionName="0.189" android:versionName="0.190"
android:installLocation="auto"> android:installLocation="auto">
<!-- Android 5.0 --> <!-- Android 5.0 -->

View File

@ -4,20 +4,20 @@
<!-- <!--
Undumped carts: No known undumped carts
* Real Number Basic - Jissuu BASIC - 実数Basic
* GPB-111 - Exciting Jockey - Daishougai Keiba - 大障害競馬 [Cart number 11]
--> -->
<software name="excitem2"> <software name="excitem2">
<description>Excite Mahjong 2</description> <description>Excite Mahjong 2</description>
<info name="serial" value="GPB-110"/>
<year>1983</year> <year>1983</year>
<publisher>Casio</publisher> <publisher>Casio</publisher>
<part name="cart" interface="pv2000_cart"> <part name="cart" interface="pv2000_cart">
<feature name="pcb" value="P115-1A"/>
<dataarea name="rom" size="16384"> <dataarea name="rom" size="16384">
<rom name="excitem2.bin" size="16384" crc="a2698c56" sha1="90113d7c065a6f12126c03da8ee59185bf60efc3" offset="0" /> <rom name="Rom1.bin" size="8192" crc="2671b9d8" sha1="9a5972c35e144904f5267e8ef94798ee38ac6fef" offset="0" /> <!-- 2764, desoldered and dumped -->
<rom name="Rom2.bin" size="8192" crc="bf6945fd" sha1="349a5a4153eda5239d6b9b7801ca6ed67f94db4c" offset="8192" /> <!-- 2764, desoldered and dumped -->
</dataarea> </dataarea>
</part> </part>
</software> </software>
@ -79,11 +79,14 @@ Undumped carts:
<software name="rakugaki"> <software name="rakugaki">
<description>Rakugaki Special</description> <description>Rakugaki Special</description>
<info name="serial" value="GPB-109"/>
<year>1983</year> <year>1983</year>
<publisher>Casio</publisher> <publisher>Casio</publisher>
<part name="cart" interface="pv2000_cart"> <part name="cart" interface="pv2000_cart">
<feature name="pcb" value="P115-1A"/>
<dataarea name="rom" size="16384"> <dataarea name="rom" size="16384">
<rom name="rakugaki.bin" size="16384" crc="a34d1bd1" sha1="54a543d08e865c85c32358edce8a6fcfa3ad9fcc" offset="0" /> <rom name="Rom1.bin" size="8192" crc="08704dda" sha1="038decee4f74f01e37882175cf0aa8f101f2ff7d" offset="0" /> <!-- 2764, desoldered and dumped -->
<rom name="Rom2.bin" size="8192" crc="c1b3e57d" sha1="10df247dc6084ebd3c4e21a09ee5e7be0c5ff85e" offset="8192" /> <!-- 2764, desoldered and dumped -->
</dataarea> </dataarea>
</part> </part>
</software> </software>
@ -120,4 +123,32 @@ Undumped carts:
</dataarea> </dataarea>
</part> </part>
</software> </software>
<software name="exjockey">
<description>Exciting Jockey</description>
<info name="serial" value="GPB-111"/>
<info name="alt_title" value="大障害競馬"/>
<year>1984</year>
<publisher>Casio</publisher>
<part name="cart" interface="pv2000_cart">
<feature name="pcb" value="P109-1A"/>
<dataarea name="rom" size="16384">
<rom name="Exciting Jockey.bin" size="16384" crc="450174c3" sha1="97a5200f801ffd800b2328f0e1a224d5ed6904e0" offset="0" /> <!-- 27128, desoldered and dumped -->
</dataarea>
</part>
</software>
<software name="basic">
<description>Real Number Basic</description>
<info name="alt_title" value="実数Basic"/>
<year>198?</year>
<publisher>Casio</publisher>
<part name="cart" interface="pv2000_cart">
<feature name="pcb" value="P115-1A"/>
<dataarea name="rom" size="16384">
<rom name="Rom1.bin" size="8192" crc="43ac2c5b" sha1="a56989d02db54974a64136a6abe0cd1861b38245" offset="0" /> <!-- 2764, desoldered and dumped -->
<rom name="Rom2.bin" size="8192" crc="4725e98d" sha1="3e55de11c66ae91eb40c586c73c3035fd7bcffac" offset="8192" /> <!-- 2764, desoldered and dumped -->
</dataarea>
</part>
</software>
</softwarelist> </softwarelist>

View File

@ -1546,14 +1546,14 @@ endif
ifeq (posix,$(SHELLTYPE)) ifeq (posix,$(SHELLTYPE))
$(GENDIR)/version.cpp: $(GENDIR)/git_desc | $(GEN_FOLDERS) $(GENDIR)/version.cpp: $(GENDIR)/git_desc | $(GEN_FOLDERS)
@echo '#define BARE_BUILD_VERSION "0.189"' > $@ @echo '#define BARE_BUILD_VERSION "0.190"' > $@
@echo 'extern const char bare_build_version[];' >> $@ @echo 'extern const char bare_build_version[];' >> $@
@echo 'extern const char build_version[];' >> $@ @echo 'extern const char build_version[];' >> $@
@echo 'const char bare_build_version[] = BARE_BUILD_VERSION;' >> $@ @echo 'const char bare_build_version[] = BARE_BUILD_VERSION;' >> $@
@echo 'const char build_version[] = BARE_BUILD_VERSION " ($(NEW_GIT_VERSION))";' >> $@ @echo 'const char build_version[] = BARE_BUILD_VERSION " ($(NEW_GIT_VERSION))";' >> $@
else else
$(GENDIR)/version.cpp: $(GENDIR)/git_desc $(GENDIR)/version.cpp: $(GENDIR)/git_desc
@echo #define BARE_BUILD_VERSION "0.189" > $@ @echo #define BARE_BUILD_VERSION "0.190" > $@
@echo extern const char bare_build_version[]; >> $@ @echo extern const char bare_build_version[]; >> $@
@echo extern const char build_version[]; >> $@ @echo extern const char build_version[]; >> $@
@echo const char bare_build_version[] = BARE_BUILD_VERSION; >> $@ @echo const char bare_build_version[] = BARE_BUILD_VERSION; >> $@

View File

@ -1898,6 +1898,7 @@ files {
MAME_DIR .. "src/mame/machine/ms7004.h", MAME_DIR .. "src/mame/machine/ms7004.h",
MAME_DIR .. "src/mame/drivers/mk85.cpp", MAME_DIR .. "src/mame/drivers/mk85.cpp",
MAME_DIR .. "src/mame/drivers/mk90.cpp", MAME_DIR .. "src/mame/drivers/mk90.cpp",
MAME_DIR .. "src/mame/drivers/ms6102.cpp",
} }
createMESSProjects(_target, _subtarget, "elektor") createMESSProjects(_target, _subtarget, "elektor")

View File

@ -18,7 +18,7 @@
* | +-----+ oo 9600 +--+ +--+ +--+ | * | +-----+ oo 9600 +--+ +--+ +--+ |
* | +-------------+ |MC| | * | +-------------+ |MC| |
* | +-----+ +-----+ +-----+ | EF68B50P | |14| | * | +-----+ +-----+ +-----+ | EF68B50P | |14| |
* | | 2764| | 2764| | | | ACIA | |89| | * | | 2764| | 2764| | 2732| | ACIA | |89| |
* | | | | | | | +-------------+ +--+ | * | | | | | | | +-------------+ +--+ |
* | |CA | |CA | |PMOS | | * | |CA | |CA | |PMOS | |
* | | 4426| | 4426| | 4426| +-------------------+ | * | | 4426| | 4426| | 4426| +-------------------+ |
@ -42,26 +42,22 @@
#include "emu.h" #include "emu.h"
#include "cococart.h" #include "cococart.h"
#include "machine/6850acia.h" #include "machine/6850acia.h"
#include "bus/rs232/rs232.h"
#include "machine/mc14411.h"
#include "machine/6821pia.h" #include "machine/6821pia.h"
//#define LOG_GENERAL (1U << 0)
#define LOG_SETUP (1U << 1)
#define LOG_PIA (1U << 2)
#define LOG_ACIA (1U << 3)
#define LOG_GENERAL 0x01 //#define VERBOSE (LOG_ACIA|LOG_GENERAL) // (LOG_PIA | LOG_GENERAL | LOG_SETUP)
#define LOG_SETUP 0x02 //#define LOG_OUTPUT_STREAM std::cout
#define LOG_PRINTF 0x04 #include "logmacro.h"
#define LOG_PIA 0x08
#define VERBOSE 0 //(LOG_PIA | LOG_PRINTF | LOG_SETUP | LOG_GENERAL) #define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__)
#define LOGPIA(...) LOGMASKED(LOG_PIA, __VA_ARGS__)
#define LOGMASK(mask, ...) do { if (VERBOSE & mask) logerror(__VA_ARGS__); } while (0) #define LOGACIA(...) LOGMASKED(LOG_ACIA, __VA_ARGS__)
#define LOGLEVEL(mask, level, ...) do { if ((VERBOSE & mask) >= level) logerror(__VA_ARGS__); } while (0)
#define LOG(...) LOGMASK(LOG_GENERAL, __VA_ARGS__)
#define LOGSETUP(...) LOGMASK(LOG_SETUP, __VA_ARGS__)
#define LOGPIA(...) LOGMASK(LOG_PIA, __VA_ARGS__)
#if VERBOSE & LOG_PRINTF
#define logerror printf
#endif
#ifdef _MSC_VER #ifdef _MSC_VER
#define FUNCNAME __func__ #define FUNCNAME __func__
@ -73,10 +69,15 @@
CONSTANTS CONSTANTS
***************************************************************************/ ***************************************************************************/
#define UART_TAG "acia" #define UART_TAG "acia"
#define PIA_TAG "pia" #define SERIAL_TAG "ser2" // Labled "Ser.I/O2 RC 232C" on the back of the case
#define CARTSLOT_TAG "t4426" #define BRG_TAG "brg"
#define CART_AUTOSTART_TAG "cart_autostart" #define SERIAL_BRF "serial_brf"
#define SERIAL_BAUD "serial_baud"
#define PIA_TAG "pia"
#define CARTSLOT_TAG "t4426"
#define CARTBANK_TAG "t4426_banks"
#define CART_AUTOSTART_TAG "cart_autostart"
//************************************************************************** //**************************************************************************
// TYPE DEFINITIONS // TYPE DEFINITIONS
@ -84,8 +85,6 @@
namespace namespace
{ {
// ======================> coco_t4426_device
class coco_t4426_device : class coco_t4426_device :
public device_t, public device_t,
public device_cococart_interface public device_cococart_interface
@ -102,6 +101,17 @@ namespace
virtual uint8_t* get_cart_base() override; virtual uint8_t* get_cart_base() override;
DECLARE_WRITE8_MEMBER(pia_A_w); DECLARE_WRITE8_MEMBER(pia_A_w);
// Clocks
void write_acia_clocks(int id, int state);
DECLARE_WRITE_LINE_MEMBER (write_f1_clock){ write_acia_clocks(mc14411_device::TIMER_F1, state); }
DECLARE_WRITE_LINE_MEMBER (write_f3_clock){ write_acia_clocks(mc14411_device::TIMER_F3, state); }
DECLARE_WRITE_LINE_MEMBER (write_f5_clock){ write_acia_clocks(mc14411_device::TIMER_F5, state); }
DECLARE_WRITE_LINE_MEMBER (write_f7_clock){ write_acia_clocks(mc14411_device::TIMER_F7, state); }
DECLARE_WRITE_LINE_MEMBER (write_f8_clock){ write_acia_clocks(mc14411_device::TIMER_F8, state); }
DECLARE_WRITE_LINE_MEMBER (write_f9_clock){ write_acia_clocks(mc14411_device::TIMER_F9, state); }
DECLARE_WRITE_LINE_MEMBER (write_f11_clock){ write_acia_clocks(mc14411_device::TIMER_F11, state); }
DECLARE_WRITE_LINE_MEMBER (write_f13_clock){ write_acia_clocks(mc14411_device::TIMER_F13, state); }
DECLARE_WRITE_LINE_MEMBER (write_f15_clock){ write_acia_clocks(mc14411_device::TIMER_F15, state); }
protected: protected:
coco_t4426_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); coco_t4426_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@ -121,6 +131,11 @@ namespace
// internal state // internal state
required_device<acia6850_device> m_uart; required_device<acia6850_device> m_uart;
required_device<pia6821_device> m_pia; required_device<pia6821_device> m_pia;
required_device<mc14411_device> m_brg;
required_ioport m_serial_baud;
void set_bank();
}; };
}; };
@ -130,33 +145,50 @@ namespace
***************************************************************************/ ***************************************************************************/
MACHINE_CONFIG_MEMBER(coco_t4426_device::device_add_mconfig) MACHINE_CONFIG_MEMBER(coco_t4426_device::device_add_mconfig)
MCFG_DEVICE_ADD(UART_TAG, ACIA6850, 0) // TODO: Figure out address mapping for ACIA
MCFG_DEVICE_ADD(PIA_TAG, PIA6821, 0) MCFG_DEVICE_ADD(PIA_TAG, PIA6821, 0)
MCFG_PIA_WRITEPA_HANDLER(WRITE8(coco_t4426_device, pia_A_w)) MCFG_PIA_WRITEPA_HANDLER(WRITE8(coco_t4426_device, pia_A_w))
MCFG_DEVICE_ADD(UART_TAG, ACIA6850, 0)
MCFG_ACIA6850_TXD_HANDLER (DEVWRITELINE (SERIAL_TAG, rs232_port_device, write_txd))
MCFG_ACIA6850_RTS_HANDLER (DEVWRITELINE (SERIAL_TAG, rs232_port_device, write_rts))
MCFG_RS232_PORT_ADD (SERIAL_TAG, default_rs232_devices, nullptr)
MCFG_RS232_RXD_HANDLER (DEVWRITELINE (UART_TAG, acia6850_device, write_rxd))
MCFG_RS232_CTS_HANDLER (DEVWRITELINE (UART_TAG, acia6850_device, write_cts))
/* Bit Rate Generator */
MCFG_MC14411_ADD (BRG_TAG, XTAL_1_8432MHz)
MCFG_MC14411_F1_CB(WRITELINE (coco_t4426_device, write_f1_clock))
MCFG_MC14411_F3_CB(WRITELINE (coco_t4426_device, write_f3_clock))
MCFG_MC14411_F5_CB(WRITELINE (coco_t4426_device, write_f5_clock))
MCFG_MC14411_F7_CB(WRITELINE (coco_t4426_device, write_f7_clock))
MCFG_MC14411_F8_CB(WRITELINE (coco_t4426_device, write_f8_clock))
MCFG_MC14411_F9_CB(WRITELINE (coco_t4426_device, write_f9_clock))
MCFG_MC14411_F11_CB(WRITELINE (coco_t4426_device, write_f11_clock))
MCFG_MC14411_F13_CB(WRITELINE (coco_t4426_device, write_f13_clock))
MCFG_MC14411_F15_CB(WRITELINE (coco_t4426_device, write_f15_clock))
MACHINE_CONFIG_END MACHINE_CONFIG_END
ROM_START( coco_t4426 ) ROM_START( coco_t4426 )
ROM_REGION(0x1a000, CARTSLOT_TAG, ROMREGION_ERASE00) // Part of this region is filled by set_bank
ROM_REGION(0x4000, CARTSLOT_TAG, ROMREGION_ERASE00)
// 8 banked ROM:s TODO: Add the banking and the other ROM:s
ROM_LOAD("tercoED4426-0-8549-5.3.bin", 0x00000, 0x2000, CRC(45665428) SHA1(ff49a79275772c4c4ab1ae29db662c9b10a744a7))
ROM_LOAD("tercoED4426-1-8549-5.3.bin", 0x03000, 0x2000, CRC(44baba33) SHA1(01cee1b208c158e598e7ecd2189b5e0ffa7f3ab9))
ROM_LOAD("tercoPD4426-2-8632-6.4.bin", 0x06000, 0x2000, CRC(258e443a) SHA1(9d8901f3e70ae4f8526dde1b5208b22f066f801f))
ROM_LOAD("tercoPD4426-3-8638-6.4.bin", 0x09000, 0x2000, CRC(640d1de4) SHA1(5ae7427cb5729fd3920361855d954ea1f97f6ae5))
ROM_LOAD("tercoCA4426-4-8549-3.4.bin", 0x0c000, 0x2000, CRC(df18397b) SHA1(2f9de210c039619c649be223c37a4eff873fa600))
ROM_LOAD("tercoCA4426-5-8549-3.4.bin", 0x0f000, 0x2000, CRC(3fcdf92e) SHA1(ec1589f8d62701ca3faf2a85a57ab2e1f61d2137))
ROM_LOAD("tercoCA4426-6-8549-3.4.bin", 0x13000, 0x2000, CRC(27652ccf) SHA1(529a6f736666ae6660483e547d076725606b1c1d))
ROM_LOAD("tercoCA4426-7-8549-3.4.bin", 0x16000, 0x2000, CRC(f6640569) SHA1(03f70dcc5f7ab60cd908427d45ebd85b6f464b93))
// Main cartridge ROM // Main cartridge ROM
ROM_LOAD("tercoPMOS4426-8549-4.31.bin", 0x2000, 0x1000, CRC(bc65c45c) SHA1(e50cfd1d61e29fe05eb795d8bf6303e7b91ed8e5)) ROM_LOAD("tercoPMOS4426-8549-4.31.bin", 0x2000, 0x1000, CRC(bc65c45c) SHA1(e50cfd1d61e29fe05eb795d8bf6303e7b91ed8e5))
// Interleaved copies for the fixed ROM for banking to work (nw yet though) ROM_RELOAD(0x03000,0x1000) // Mirrored
ROM_RELOAD(0x05000,0x1000)
ROM_RELOAD(0x08000,0x1000) // this region is loaded from separate ROM images
ROM_RELOAD(0x0b000,0x1000) ROM_REGION(0x1a000, CARTBANK_TAG, ROMREGION_ERASE00)
ROM_RELOAD(0x0e000,0x1000)
ROM_RELOAD(0x12000,0x1000) // 8 banked ROM:s
ROM_RELOAD(0x15000,0x1000) ROM_LOAD("tercoED4426-0-8549-5.3.bin", 0x0000, 0x2000, CRC(45665428) SHA1(ff49a79275772c4c4ab1ae29db662c9b10a744a7))
ROM_RELOAD(0x18000,0x1000) ROM_LOAD("tercoED4426-1-8549-5.3.bin", 0x2000, 0x2000, CRC(44baba33) SHA1(01cee1b208c158e598e7ecd2189b5e0ffa7f3ab9))
ROM_LOAD("tercoPD4426-2-8632-6.4.bin", 0x4000, 0x2000, CRC(258e443a) SHA1(9d8901f3e70ae4f8526dde1b5208b22f066f801f))
ROM_LOAD("tercoPD4426-3-8638-6.4.bin", 0x6000, 0x2000, CRC(640d1de4) SHA1(5ae7427cb5729fd3920361855d954ea1f97f6ae5))
ROM_LOAD("tercoCA4426-4-8549-3.4.bin", 0x8000, 0x2000, CRC(df18397b) SHA1(2f9de210c039619c649be223c37a4eff873fa600))
ROM_LOAD("tercoCA4426-5-8549-3.4.bin", 0xa000, 0x2000, CRC(3fcdf92e) SHA1(ec1589f8d62701ca3faf2a85a57ab2e1f61d2137))
ROM_LOAD("tercoCA4426-6-8549-3.4.bin", 0xc000, 0x2000, CRC(27652ccf) SHA1(529a6f736666ae6660483e547d076725606b1c1d))
ROM_LOAD("tercoCA4426-7-8549-3.4.bin", 0xe000, 0x2000, CRC(f6640569) SHA1(03f70dcc5f7ab60cd908427d45ebd85b6f464b93))
ROM_END ROM_END
//------------------------------------------------- //-------------------------------------------------
@ -168,6 +200,21 @@ static INPUT_PORTS_START( coco_cart_autostart )
PORT_CONFNAME( 0x01, 0x01, "Cart Auto-Start" ) PORT_CONFNAME( 0x01, 0x01, "Cart Auto-Start" )
PORT_CONFSETTING( 0x00, DEF_STR( Off )) PORT_CONFSETTING( 0x00, DEF_STR( Off ))
PORT_CONFSETTING( 0x01, DEF_STR( On )) PORT_CONFSETTING( 0x01, DEF_STR( On ))
PORT_START(SERIAL_BAUD)
PORT_CONFNAME(0x0F , 0x00 , "Ser. I/O2 RC 232C - Baud Rate") // Typo on real hardware!
PORT_CONFSETTING(mc14411_device::TIMER_F1, "9600") // RSA=RSB=1: X1
PORT_CONFSETTING(mc14411_device::TIMER_F2, "7200")
PORT_CONFSETTING(mc14411_device::TIMER_F3, "4800")
PORT_CONFSETTING(mc14411_device::TIMER_F4, "3600")
PORT_CONFSETTING(mc14411_device::TIMER_F5, "2400")
PORT_CONFSETTING(mc14411_device::TIMER_F6, "1800")
PORT_CONFSETTING(mc14411_device::TIMER_F7, "1200")
PORT_CONFSETTING(mc14411_device::TIMER_F8, "600")
PORT_CONFSETTING(mc14411_device::TIMER_F9, "300")
PORT_CONFSETTING(mc14411_device::TIMER_F10, "200")
PORT_CONFSETTING(mc14411_device::TIMER_F11, "150")
PORT_CONFSETTING(mc14411_device::TIMER_F13, "110")
INPUT_PORTS_END INPUT_PORTS_END
//************************************************************************** //**************************************************************************
@ -192,6 +239,8 @@ coco_t4426_device::coco_t4426_device(const machine_config &mconfig, device_type
, m_autostart(*this, CART_AUTOSTART_TAG) , m_autostart(*this, CART_AUTOSTART_TAG)
, m_uart(*this, UART_TAG) , m_uart(*this, UART_TAG)
, m_pia(*this, PIA_TAG) , m_pia(*this, PIA_TAG)
, m_brg(*this, BRG_TAG)
, m_serial_baud(*this, SERIAL_BAUD)
{ {
} }
@ -240,38 +289,94 @@ void coco_t4426_device::device_reset()
LOG("%s()\n", FUNCNAME ); LOG("%s()\n", FUNCNAME );
auto cart_line = line_value::Q; auto cart_line = line_value::Q;
set_line_value(line::CART, cart_line); set_line_value(line::CART, cart_line);
set_bank();
// Set up the BRG divider statically to X1
m_brg->rsa_w( ASSERT_LINE );
m_brg->rsb_w( ASSERT_LINE );
// Disable all configured timers, only enabling the used ones
m_brg->timer_disable_all();
m_brg->timer_enable((mc14411_device::timer_id) m_serial_baud->read(), true);
}
/*----------------------------------------------------
* Serial port clock sources driven by the selected
* output of the MC14411
----------------------------------------------------*/
void coco_t4426_device::write_acia_clocks(int id, int state)
{
if (id == m_serial_baud->read())
{
m_uart->write_txc(state);
m_uart->write_rxc(state);
}
} }
/*------------------------------------------------- /*-------------------------------------------------
scs_read scs_read custom devices
The 4426 cartridge PIA is located at ff44-ff47 PIA is located at ff40-ff47
ACIA is located at ff48-ff4F with A1 = 1
-------------------------------------------------*/ -------------------------------------------------*/
READ8_MEMBER(coco_t4426_device::scs_read) READ8_MEMBER(coco_t4426_device::scs_read)
{ {
uint8_t result = 0x00; uint8_t result = 0x00;
LOG("%s", FUNCNAME); LOG("%s Offs:%d\n", FUNCNAME, offset);
if ((offset >= 0x04) && (offset <= 0x07)) if ((offset >= 0x00) && (offset <= 0x07))
result = m_pia->read(space, offset - 0x04); {
LOGPIA("- PIA\n");
result = m_pia->read(space, offset & 3);
LOGPIA("- Offs:%04x Data:%02x\n", offset - 0x04, result);
}
else if ((offset >= 0x08) && (offset <= 0x0f) && (offset & 2))
{
LOGACIA("- ACIA\n");
if (offset & 1)
result = m_uart->status_r(space, offset & 1);
else
result = m_uart->data_r(space, offset & 1);
LOGACIA("- Offs:%04x Data:%02x\n", offset - 0x04, result);
}
else
{
LOG(" Unknown Device! Offs:%04x\n", offset);
}
LOG(" - Offs:%04x Data:%02x\n", offset, result);
return result; return result;
} }
/*------------------------------------------------- /*-------------------------------------------------
scs_write scs_write - custom devices
The 4426 cartridge PIA is located at ff44-ff47 PIA is located at ff40-ff47
ACIA is located at ff48-ff4F with A1 = 1
-------------------------------------------------*/ -------------------------------------------------*/
WRITE8_MEMBER(coco_t4426_device::scs_write) WRITE8_MEMBER(coco_t4426_device::scs_write)
{ {
LOG("%s(%02x)\n", FUNCNAME, data); LOG("%s Offs:%d Data:%02x\n", FUNCNAME, offset, data);
LOGSETUP(" * Offs:%02x <- %02x\n", offset, data); LOGSETUP(" * Offs:%02x <- %02x\n", offset, data);
if ((offset >= 0x04) && (offset <= 0x07)) if ((offset >= 0x00) && (offset <= 0x07))
m_pia->write(space, offset - 0x04, data); {
LOG("- PIA\n");
m_pia->write(space, offset & 3, data);
}
else if ((offset >= 0x08) && (offset <= 0x0f) && (offset & 2))
{
LOGACIA("- ACIA");
if (offset & 1)
m_uart->control_w(space, offset & 1, data);
else
m_uart->data_w(space, offset & 1, data);
LOGACIA(" - Offs:%04x Data:%02x\n", offset & 1, data);
}
else
{
LOG(" Unknown device\n");
}
} }
/*---------------------------------------------------- /*----------------------------------------------------
@ -295,7 +400,26 @@ WRITE8_MEMBER( coco_t4426_device::pia_A_w )
{ {
LOGPIA("%s(%02x)\n", FUNCNAME, data); LOGPIA("%s(%02x)\n", FUNCNAME, data);
m_select = data; m_select = data;
cart_base_changed(); set_bank();
}
void coco_t4426_device::set_bank()
{
uint8_t *cartbase = memregion(CARTSLOT_TAG)->base();
uint8_t *bankbase = memregion(CARTBANK_TAG)->base();
switch (m_select)
{
case 0:
case ROM0:memcpy(cartbase, bankbase + 0x0000, 0x2000); break;
case ROM1:memcpy(cartbase, bankbase + 0x2000, 0x2000); break;
case ROM2:memcpy(cartbase, bankbase + 0x4000, 0x2000); break;
case ROM3:memcpy(cartbase, bankbase + 0x6000, 0x2000); break;
case ROM4:memcpy(cartbase, bankbase + 0x8000, 0x2000); break;
case ROM5:memcpy(cartbase, bankbase + 0xa000, 0x2000); break;
case ROM6:memcpy(cartbase, bankbase + 0xc000, 0x2000); break;
case ROM7:memcpy(cartbase, bankbase + 0xe000, 0x2000); break;
}
} }
/*------------------------------------------------- /*-------------------------------------------------
@ -305,28 +429,5 @@ WRITE8_MEMBER( coco_t4426_device::pia_A_w )
uint8_t* coco_t4426_device::get_cart_base() uint8_t* coco_t4426_device::get_cart_base()
{ {
LOG("%s - m_select %02x -> %02x\n", FUNCNAME, m_select, ~m_select & 0xff ); LOG("%s - m_select %02x -> %02x\n", FUNCNAME, m_select, ~m_select & 0xff );
uint8_t *base = memregion(CARTSLOT_TAG)->base(); return memregion(CARTSLOT_TAG)->base();
switch (m_select)
{
case 0:
case ROM0: base = (uint8_t *) (base + 0x00000); break;
case ROM1: base = (uint8_t *) (base + 0x03000); break;
case ROM2: base = (uint8_t *) (base + 0x06000); break;
case ROM3: base = (uint8_t *) (base + 0x09000); break;
case ROM4: base = (uint8_t *) (base + 0x0c000); break;
case ROM5: base = (uint8_t *) (base + 0x0f000); break;
case ROM6: base = (uint8_t *) (base + 0x13000); break;
case ROM7: base = (uint8_t *) (base + 0x16000); break;
}
#if 0 // Print the beginning of the selected ROM bank, seems to be correct but is not mapped in correctly via coco12.cpp m_sam->read yet
printf("\n");
for (int i = 0; i < 48; i++) printf("%02x ", *((uint8_t *)(base + i)));
printf("\n");
for (int i = 0; i < 48; i++) printf("'%c'", *((uint8_t *)(base + i)));
printf("\n");
#endif
return base;
} }

View File

@ -685,16 +685,16 @@ void i8089_channel_device::examine_ccw(uint8_t ccw)
m_r[PSW].w = (m_r[PSW].w & 0x5f) | (ccw & 0xa0); m_r[PSW].w = (m_r[PSW].w & 0x5f) | (ccw & 0xa0);
// acknowledge interrupt // acknowledge interrupt
if (BIT(ccw, 4)) if (BIT(ccw, 3))
{ {
m_write_sintr(0); m_write_sintr(0);
m_r[PSW].w &= ~(1 << 5); m_r[PSW].w &= ~(1 << 5);
} }
// interrupt enable // interrupt enable
if (BIT(ccw, 5)) if (BIT(ccw, 4))
{ {
if (BIT(ccw, 4)) if (BIT(ccw, 3))
m_r[PSW].w &= ~(1 << 4); m_r[PSW].w &= ~(1 << 4);
else else
m_r[PSW].w |= 1 << 4; m_r[PSW].w |= 1 << 4;

View File

@ -17,7 +17,8 @@
#define LOG_SETUP 0x02 #define LOG_SETUP 0x02
#define LOG_CA1 0x08 #define LOG_CA1 0x08
//#define VERBOSE (LOG_SETUP | LOG_GENERAL) //#define VERBOSE (LOG_SETUP )
//#define LOG_OUTPUT_STREAM std::cout
#include "logmacro.h" #include "logmacro.h"
#define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__) #define LOGSETUP(...) LOGMASKED(LOG_SETUP, __VA_ARGS__)
@ -416,7 +417,7 @@ uint8_t pia6821_device::port_a_r()
} }
} }
LOG("PIA port A read = %02X\n", ret); LOG("%s PIA port A read = %02X\n", tag(), ret);
return ret; return ret;
} }
@ -430,7 +431,7 @@ uint8_t pia6821_device::ddr_a_r()
{ {
uint8_t ret = m_ddr_a; uint8_t ret = m_ddr_a;
LOG("PIA DDR A read = %02X\n", ret); LOG("%s PIA DDR A read = %02X\n", tag(), ret);
return ret; return ret;
} }
@ -458,7 +459,7 @@ uint8_t pia6821_device::port_b_r()
m_irq_b2 = false; m_irq_b2 = false;
update_interrupts(); update_interrupts();
LOG("PIA port B read = %02X\n", ret); LOG("%s PIA port B read = %02X\n", tag(), ret);
return ret; return ret;
} }
@ -472,7 +473,7 @@ uint8_t pia6821_device::ddr_b_r()
{ {
uint8_t ret = m_ddr_b; uint8_t ret = m_ddr_b;
LOG("PIA DDR B read = %02X\n", ret); LOG("%s PIA DDR B read = %02X\n", tag(), ret);
return ret; return ret;
} }
@ -521,7 +522,7 @@ uint8_t pia6821_device::control_a_r()
ret |= PIA_IRQ2; ret |= PIA_IRQ2;
} }
LOG("PIA control A read = %02X\n", ret); LOG("%s PIA control A read = %02X\n", tag(), ret);
return ret; return ret;
} }
@ -566,7 +567,7 @@ uint8_t pia6821_device::control_b_r()
ret |= PIA_IRQ2; ret |= PIA_IRQ2;
} }
LOG("PIA control B read = %02X\n", ret); LOG("%s PIA control B read = %02X\n", tag(), ret);
return ret; return ret;
} }
@ -628,7 +629,7 @@ void pia6821_device::send_to_out_a_func(const char* message)
// input pins are pulled high // input pins are pulled high
uint8_t data = get_out_a_value(); uint8_t data = get_out_a_value();
LOG("PIA %s = %02X\n", message, data); LOG("%s PIA %s = %02X\n", tag(), message, data);
if(!m_out_a_handler.isnull()) if(!m_out_a_handler.isnull())
{ {
@ -655,7 +656,7 @@ void pia6821_device::send_to_out_b_func(const char* message)
// input pins are high-impedance - we just send them as zeros for backwards compatibility // input pins are high-impedance - we just send them as zeros for backwards compatibility
uint8_t data = get_out_b_value(); uint8_t data = get_out_b_value();
LOG("PIA %s = %02X\n", message, data); LOG("%s PIA %s = %02X\n", tag(), message, data);
if(!m_out_b_handler.isnull()) if(!m_out_b_handler.isnull())
{ {
@ -694,15 +695,15 @@ void pia6821_device::ddr_a_w(uint8_t data)
{ {
if(data == 0x00) if(data == 0x00)
{ {
LOGSETUP("PIA DDR A write = %02X (input mode)\n", data); LOGSETUP("%s PIA DDR A write = %02X (input mode)\n", tag(), data);
} }
else if(data == 0xff) else if(data == 0xff)
{ {
LOGSETUP("PIA DDR A write = %02X (output mode)\n", data); LOGSETUP("%s PIA DDR A write = %02X (output mode)\n", tag(), data);
} }
else else
{ {
LOGSETUP("PIA DDR A write = %02X (mixed mode)\n", data); LOGSETUP("%s PIA DDR A write = %02X (mixed mode)\n", tag(), data);
} }
if(m_ddr_a != data) if(m_ddr_a != data)
@ -749,15 +750,15 @@ void pia6821_device::ddr_b_w(uint8_t data)
{ {
if (data == 0x00) if (data == 0x00)
{ {
LOGSETUP("PIA DDR B write = %02X (input mode)\n", data); LOGSETUP("%s PIA DDR B write = %02X (input mode)\n", tag(), data);
} }
else if (data == 0xff) else if (data == 0xff)
{ {
LOGSETUP("PIA DDR B write = %02X (output mode)\n", data); LOGSETUP("%s PIA DDR B write = %02X (output mode)\n", tag(), data);
} }
else else
{ {
LOGSETUP("PIA DDR B write = %02X (mixed mode)\n", data); LOGSETUP("%s PIA DDR B write = %02X (mixed mode)\n", tag(), data);
} }
if(m_ddr_b != data) if(m_ddr_b != data)
@ -779,7 +780,7 @@ void pia6821_device::control_a_w(uint8_t data)
// bit 7 and 6 are read only // bit 7 and 6 are read only
data &= 0x3f; data &= 0x3f;
LOGSETUP("PIA control A write = %02X\n", data); LOGSETUP("%s PIA control A write = %02X\n", tag(), data);
// update the control register // update the control register
m_ctl_a = data; m_ctl_a = data;
@ -819,7 +820,7 @@ void pia6821_device::control_b_w(uint8_t data)
// bit 7 and 6 are read only // bit 7 and 6 are read only
data &= 0x3f; data &= 0x3f;
LOGSETUP("PIA control B write = %02X\n", data); LOGSETUP("%s PIA control B write = %02X\n", tag(), data);
// update the control register // update the control register
m_ctl_b = data; m_ctl_b = data;
@ -892,7 +893,7 @@ void pia6821_device::set_a_input(uint8_t data, uint8_t z_mask)
{ {
assert_always(m_in_a_handler.isnull(), "pia6821_porta_w() called when in_a_func implemented"); assert_always(m_in_a_handler.isnull(), "pia6821_porta_w() called when in_a_func implemented");
LOG("Set PIA input port A = %02X\n", data); LOG("%s Set PIA input port A = %02X\n", tag(), data);
m_in_a = data; m_in_a = data;
m_port_a_z_mask = z_mask; m_port_a_z_mask = z_mask;
@ -928,12 +929,12 @@ uint8_t pia6821_device::a_output()
WRITE_LINE_MEMBER( pia6821_device::ca1_w ) WRITE_LINE_MEMBER( pia6821_device::ca1_w )
{ {
LOGCA1("Set PIA input CA1 = %d\n", state); LOGCA1("%s Set PIA input CA1 = %d\n", tag(), state);
// the new state has caused a transition // the new state has caused a transition
if((m_in_ca1 != state) && ((state && c1_low_to_high(m_ctl_a)) || (!state && c1_high_to_low(m_ctl_a)))) if((m_in_ca1 != state) && ((state && c1_low_to_high(m_ctl_a)) || (!state && c1_high_to_low(m_ctl_a))))
{ {
LOGCA1("CA1 triggering\n"); LOGCA1("%s CA1 triggering\n", tag());
// mark the IRQ // mark the IRQ
m_irq_a1 = true; m_irq_a1 = true;
@ -960,12 +961,12 @@ WRITE_LINE_MEMBER( pia6821_device::ca1_w )
WRITE_LINE_MEMBER( pia6821_device::ca2_w ) WRITE_LINE_MEMBER( pia6821_device::ca2_w )
{ {
LOG("Set PIA input CA2 = %d\n", state); LOG("%s Set PIA input CA2 = %d\n", tag(), state);
// if input mode and the new state has caused a transition // if input mode and the new state has caused a transition
if(c2_input(m_ctl_a) && (m_in_ca2 != state) && ((state && c2_low_to_high(m_ctl_a)) || (!state && c2_high_to_low(m_ctl_a)))) if(c2_input(m_ctl_a) && (m_in_ca2 != state) && ((state && c2_low_to_high(m_ctl_a)) || (!state && c2_high_to_low(m_ctl_a))))
{ {
LOG("CA2 triggering\n"); LOG("%s CA2 triggering\n", tag());
// mark the IRQ // mark the IRQ
m_irq_a2 = true; m_irq_a2 = true;
@ -1015,7 +1016,7 @@ void pia6821_device::portb_w(uint8_t data)
{ {
assert_always(m_in_b_handler.isnull(), "pia_set_input_b() called when in_b_func implemented"); assert_always(m_in_b_handler.isnull(), "pia_set_input_b() called when in_b_func implemented");
LOG("Set PIA input port B = %02X\n", data); LOG("%s Set PIA input port B = %02X\n", tag(), data);
m_in_b = data; m_in_b = data;
m_in_b_pushed = true; m_in_b_pushed = true;
@ -1040,12 +1041,12 @@ uint8_t pia6821_device::b_output()
WRITE_LINE_MEMBER( pia6821_device::cb1_w ) WRITE_LINE_MEMBER( pia6821_device::cb1_w )
{ {
LOG("Set PIA input CB1 = %d\n", state); LOG("%s Set PIA input CB1 = %d\n", tag(), state);
// the new state has caused a transition // the new state has caused a transition
if((m_in_cb1 != state) && ((state && c1_low_to_high(m_ctl_b)) || (!state && c1_high_to_low(m_ctl_b)))) if((m_in_cb1 != state) && ((state && c1_low_to_high(m_ctl_b)) || (!state && c1_high_to_low(m_ctl_b))))
{ {
LOG("CB1 triggering\n"); LOG("%s CB1 triggering\n", tag());
// mark the IRQ // mark the IRQ
m_irq_b1 = 1; m_irq_b1 = 1;
@ -1071,14 +1072,14 @@ WRITE_LINE_MEMBER( pia6821_device::cb1_w )
WRITE_LINE_MEMBER( pia6821_device::cb2_w ) WRITE_LINE_MEMBER( pia6821_device::cb2_w )
{ {
LOG("Set PIA input CB2 = %d\n", state); LOG("%s Set PIA input CB2 = %d\n", tag(), state);
// if input mode and the new state has caused a transition // if input mode and the new state has caused a transition
if (c2_input(m_ctl_b) && if (c2_input(m_ctl_b) &&
(m_in_cb2 != state) && (m_in_cb2 != state) &&
((state && c2_low_to_high(m_ctl_b)) || (!state && c2_high_to_low(m_ctl_b)))) ((state && c2_low_to_high(m_ctl_b)) || (!state && c2_high_to_low(m_ctl_b))))
{ {
LOG("CB2 triggering\n"); LOG("%s CB2 triggering\n", tag());
// mark the IRQ // mark the IRQ
m_irq_b2 = 1; m_irq_b2 = 1;

View File

@ -37,7 +37,7 @@
#define LOG_SETUP (1U << 1) #define LOG_SETUP (1U << 1)
//#define VERBOSE (LOG_GENERAL|LOG_SETUP) //#define VERBOSE (LOG_GENERAL|LOG_SETUP)
//#define LOG_OUTPUT_FUNC printf //#define LOG_OUTPUT_STREAM std::cout
#include "logmacro.h" #include "logmacro.h"
@ -56,7 +56,7 @@
***************************************************************************/ ***************************************************************************/
const int mc14411_device::s_counter_divider[16] = { const int mc14411_device::s_counter_divider[16] = {
////////// X64 /////// X16 /////// X8 //////// X1 //////// ////////// X64 /////// X16 /////// X8 //////// X1 ////////
3, // F1: 614.4 kHz 153.6 kHz 76800 Hz 9600 Hz 3, // F1: 614.4 kHz 153.6 kHz 76800 Hz 9600 Hz
4, // F2: 460.8 kHz 115.2 kHz 57600 Hz 7200 Hz 4, // F2: 460.8 kHz 115.2 kHz 57600 Hz 7200 Hz
6, // F3: 307.2 kHz 76800 Hz 36400 Hz 4800 Hz 6, // F3: 307.2 kHz 76800 Hz 36400 Hz 4800 Hz

View File

@ -161,6 +161,7 @@ enum
XTAL_15_92MHz = 15920000, /* HP Integral PC */ XTAL_15_92MHz = 15920000, /* HP Integral PC */
XTAL_16MHz = 16000000, /* Extremely common, used on 100's of PCBs */ XTAL_16MHz = 16000000, /* Extremely common, used on 100's of PCBs */
XTAL_16_384MHz = 16384000, XTAL_16_384MHz = 16384000,
XTAL_16_4MHz = 16400000, /* MS 6102 */
XTAL_16_5888MHz = 16588800, /* SM 7238 */ XTAL_16_5888MHz = 16588800, /* SM 7238 */
XTAL_16_67MHz = 16670000, XTAL_16_67MHz = 16670000,
XTAL_16_777216MHz = 16777216, /* Nintendo Game Boy Advance */ XTAL_16_777216MHz = 16777216, /* Nintendo Game Boy Advance */

View File

@ -10,10 +10,11 @@
Supported games: Supported games:
4 En Raya (set 1), 1990, IDSA. 4 En Raya (set 1), 1990, IDSA.
4 En Raya (set 2), 1990, IDSA. 4 En Raya (set 2), 1990, IDSA.
unknown Pac-Man gambling game, 1990, Unknown. unknown 'Pac-Man' gambling game, 1990, Unknown.
unknown 'Space Invaders' gambling game, 1990, Unknown (made in France) unknown 'Space Invaders' gambling game (set 1), 1990, Unknown (made in France).
unknown 'Space Invaders' gambling game (set 2), 199?, Unknown.
TODO: TODO:
- Video and IRQ timings; - Video and IRQ timings;
@ -542,6 +543,9 @@ ROM_START( 4enrayaa )
ROM_END ROM_END
/*
Unknown 'Pac-Man' gambling game.
*/
ROM_START(unkpacg) ROM_START(unkpacg)
ROM_REGION(0x10000, "maincpu", 0) ROM_REGION(0x10000, "maincpu", 0)
ROM_LOAD("1.u14", 0x0000, 0x2000, CRC(848c4143) SHA1(3cff26181c58e5f52f1ac81df7d5d43e644585a2)) ROM_LOAD("1.u14", 0x0000, 0x2000, CRC(848c4143) SHA1(3cff26181c58e5f52f1ac81df7d5d43e644585a2))
@ -553,8 +557,11 @@ ROM_START(unkpacg)
ROM_LOAD( "5.u18", 0x0000, 0x2000, CRC(44f272d2) SHA1(b39cbc1f290d9fb2453396906e4da4a682c41ef4) ) ROM_LOAD( "5.u18", 0x0000, 0x2000, CRC(44f272d2) SHA1(b39cbc1f290d9fb2453396906e4da4a682c41ef4) )
ROM_END ROM_END
/* all roms are 0x8000 but only the last 0x2000 of each is used */ /*
ROM_START( unkfr ) Unknown 'Space Invaders' gambling game.
All roms are 0x8000 but only the last 0x2000 of each is used.
*/
ROM_START( unksig )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "i.bin", 0x0000, 0x2000, CRC(902efc27) SHA1(5992cdc647acd622c73adefac1aa66e77b5ccc4f) ) ROM_LOAD( "i.bin", 0x0000, 0x2000, CRC(902efc27) SHA1(5992cdc647acd622c73adefac1aa66e77b5ccc4f) )
ROM_CONTINUE( 0x0000, 0x2000) ROM_CONTINUE( 0x0000, 0x2000)
@ -567,17 +574,56 @@ ROM_START( unkfr )
ROM_REGION( 0x6000, "gfx1", 0 ) ROM_REGION( 0x6000, "gfx1", 0 )
ROM_LOAD( "r.bin", 0x0000, 0x2000, CRC(f8a358fe) SHA1(5c4051de156014a5c2400f4934e2136b38bfed8c) ) ROM_LOAD( "r.bin", 0x0000, 0x2000, CRC(f8a358fe) SHA1(5c4051de156014a5c2400f4934e2136b38bfed8c) )
ROM_CONTINUE(0x0000,0x2000) ROM_CONTINUE( 0x0000, 0x2000)
ROM_CONTINUE(0x0000,0x2000) ROM_CONTINUE( 0x0000, 0x2000)
ROM_CONTINUE(0x0000,0x2000) // only data here matters ROM_CONTINUE( 0x0000, 0x2000) // only data here matters
ROM_LOAD( "b.bin", 0x2000, 0x2000, CRC(56ac5874) SHA1(7ae63f930b07cb1b4989c8328fcc3627d8ff68f8) ) ROM_LOAD( "b.bin", 0x2000, 0x2000, CRC(56ac5874) SHA1(7ae63f930b07cb1b4989c8328fcc3627d8ff68f8) )
ROM_CONTINUE(0x2000,0x2000) ROM_CONTINUE( 0x2000, 0x2000)
ROM_CONTINUE(0x2000,0x2000) ROM_CONTINUE( 0x2000, 0x2000)
ROM_CONTINUE(0x2000,0x2000) // only data here matters ROM_CONTINUE( 0x2000, 0x2000) // only data here matters
ROM_LOAD( "v.bin", 0x4000, 0x2000, CRC(4c5a7e43) SHA1(17e52ed73f9e8822b53bebc31c9320f5589ef70a) ) ROM_LOAD( "v.bin", 0x4000, 0x2000, CRC(4c5a7e43) SHA1(17e52ed73f9e8822b53bebc31c9320f5589ef70a) )
ROM_CONTINUE(0x4000,0x2000) ROM_CONTINUE( 0x4000, 0x2000)
ROM_CONTINUE(0x4000,0x2000) ROM_CONTINUE( 0x4000, 0x2000)
ROM_CONTINUE(0x4000,0x2000) // only data here matters ROM_CONTINUE( 0x4000, 0x2000) // only data here matters
ROM_END
/*
Unknown 'Space Invaders' gambling game
All roms are 0x10000 but with a lot of addressing issues
1.bin BADADDR ---xxxxxxxxxxxxx
2.bin BADADDR ---xxxxxxxxxxxxx
b.bin BADADDR x-xxxxxxxxxxxxxx
r.bin BADADDR x-xxxxxxxxxxxxxx
v.bin BADADDR x-xxxxxxxxxxxxxx
The game has both (space invaders & pac-man) graphics sets.
Maybe a leftover?...
*/
ROM_START( unksiga )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "1.bin", 0x0000, 0x2000, CRC(089a4a63) SHA1(d519f6289e72299e48ed1790fa4919cae14e2a0f) ) // 0x2000 of data repeated along the dump
ROM_IGNORE( 0xe000) /* Identical 0x2000 segments */
ROM_LOAD( "2.bin", 0x8000, 0x2000, CRC(970632fd) SHA1(2aa69fda1dce201856b237ecbedfdcde470a4bb3) ) // 0x2000 of data repeated along the dump
ROM_IGNORE( 0xe000) /* Identical 0x2000 segments */
ROM_REGION( 0xc000, "gfx1", 0 )
/* tileset 0000-03ff = Space Invaders GFX.
tileset 0400-07ff = Pac-Man GFX.
*/
ROM_LOAD( "b.bin", 0x0000, 0x4000, CRC(dd257fb6) SHA1(b543225615f3cbef34dbecde04c7e937eede0988) )
ROM_CONTINUE( 0x0000, 0x4000)
ROM_CONTINUE( 0x0000, 0x4000) // data
ROM_IGNORE( 0x4000) // dupe
ROM_LOAD( "r.bin", 0x4000, 0x4000, CRC(38e9feba) SHA1(76811f05dabbb608e3863eeea0c53725c7cff618) )
ROM_CONTINUE( 0x4000, 0x4000)
ROM_CONTINUE( 0x4000, 0x4000) // data
ROM_IGNORE( 0x4000) // dupe
ROM_LOAD( "v.bin", 0x8000, 0x4000, CRC(cc597c7b) SHA1(5830fa9e8f9823eb4a910d6f80c3de15f7269619) )
ROM_CONTINUE( 0x8000, 0x4000)
ROM_CONTINUE( 0x8000, 0x4000) // data
ROM_IGNORE( 0x4000) // dupe
ROM_END ROM_END
@ -598,8 +644,9 @@ DRIVER_INIT_MEMBER(_4enraya_state, unkpacg)
* Game Drivers * * Game Drivers *
***********************************/ ***********************************/
/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */ /* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
GAME( 1990, 4enraya, 0, 4enraya, 4enraya, _4enraya_state, 0, ROT0, "IDSA", "4 En Raya (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, 4enraya, 0, 4enraya, 4enraya, _4enraya_state, 0, ROT0, "IDSA", "4 En Raya (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1990, 4enrayaa, 4enraya, 4enraya, 4enraya, _4enraya_state, 0, ROT0, "IDSA", "4 En Raya (set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, 4enrayaa, 4enraya, 4enraya, 4enraya, _4enraya_state, 0, ROT0, "IDSA", "4 En Raya (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 199?, unkpacg, 0, unkpacg, unkpacg, _4enraya_state, unkpacg, ROT0, "<unknown>", "unknown Pac-Man gambling game", MACHINE_SUPPORTS_SAVE ) GAME( 199?, unkpacg, 0, unkpacg, unkpacg, _4enraya_state, unkpacg, ROT0, "<unknown>", "unknown 'Pac-Man' gambling game", MACHINE_SUPPORTS_SAVE )
GAME( 199?, unkfr, 0, unkpacg, unkfr, _4enraya_state, unkpacg, ROT0, "<unknown>", "unknown 'Space Invaders' gambling game", MACHINE_SUPPORTS_SAVE ) GAME( 199?, unksig, 0, unkpacg, unkfr, _4enraya_state, unkpacg, ROT0, "<unknown>", "unknown 'Space Invaders' gambling game (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 199?, unksiga, unksig, unkpacg, unkfr, _4enraya_state, unkpacg, ROT0, "<unknown>", "unknown 'Space Invaders' gambling game (set 2)", MACHINE_SUPPORTS_SAVE )

View File

@ -55,10 +55,12 @@ public:
DECLARE_WRITE8_MEMBER(cattn_w); DECLARE_WRITE8_MEMBER(cattn_w);
DECLARE_READ8_MEMBER(romport_r); DECLARE_READ8_MEMBER(romport_r);
DECLARE_WRITE8_MEMBER(romport_w); DECLARE_WRITE8_MEMBER(romport_w);
DECLARE_WRITE8_MEMBER(clrsys_w);
DECLARE_WRITE16_MEMBER(mode_w); DECLARE_WRITE16_MEMBER(mode_w);
DECLARE_WRITE_LINE_MEMBER(cpuif_w); DECLARE_WRITE_LINE_MEMBER(cpuif_w);
DECLARE_WRITE_LINE_MEMBER(fddrq_w); DECLARE_WRITE_LINE_MEMBER(fddrq_w);
DECLARE_WRITE8_MEMBER(ics_attn_w); DECLARE_WRITE8_MEMBER(ics_attn_w);
IRQ_CALLBACK_MEMBER(inta);
protected: protected:
virtual void machine_start() override; virtual void machine_start() override;
virtual void machine_reset() override; virtual void machine_reset() override;
@ -155,7 +157,11 @@ READ16_MEMBER(altos8600_state::mmuflags_r)
WRITE16_MEMBER(altos8600_state::mmuflags_w) WRITE16_MEMBER(altos8600_state::mmuflags_w)
{ {
data &= ~0x17; data &= ~0x17;
COMBINE_DATA(&m_mmuflags[offset & 0xff]); if(mem_mask == 0xff)
data |= 0xff00;
else if(mem_mask == 0xff00)
return;
m_mmuflags[offset & 0xff] = data;
} }
WRITE8_MEMBER(altos8600_state::cattn_w) WRITE8_MEMBER(altos8600_state::cattn_w)
@ -197,7 +203,11 @@ WRITE8_MEMBER(altos8600_state::romport_w)
m_fdc->set_floppy(nullptr); m_fdc->set_floppy(nullptr);
if(m_nmistat && m_nmiinh && !BIT(data, 4)) if(m_nmistat && m_nmiinh && !BIT(data, 4))
{
m_mode &= ~1;
m_user = false;
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
else if(BIT(data, 4) && m_nmistat) else if(BIT(data, 4) && m_nmistat)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
m_nmiinh = BIT(data, 4) ? true : false; m_nmiinh = BIT(data, 4) ? true : false;
@ -215,6 +225,11 @@ WRITE8_MEMBER(altos8600_state::romport_w)
} }
} }
WRITE8_MEMBER(altos8600_state::clrsys_w)
{
m_pic1->ir0_w(CLEAR_LINE);
}
WRITE8_MEMBER(altos8600_state::ics_attn_w) WRITE8_MEMBER(altos8600_state::ics_attn_w)
{ {
if(!offset) if(!offset)
@ -233,7 +248,6 @@ WRITE16_MEMBER(altos8600_state::mode_w)
READ8_MEMBER(altos8600_state::get_slave_ack) READ8_MEMBER(altos8600_state::get_slave_ack)
{ {
m_user = false;
if(offset == 2) if(offset == 2)
return m_pic2->acknowledge(); return m_pic2->acknowledge();
else if(offset == 3) else if(offset == 3)
@ -245,9 +259,13 @@ void altos8600_state::seterr(offs_t offset, u16 mem_mask, u16 err_mask)
{ {
if(machine().side_effect_disabled()) if(machine().side_effect_disabled())
return; return;
logerror("Fault at %06x type %04x\n", offset << 1, err_mask); logerror("Fault at %05x type %04x\n", offset << 1, err_mask);
if(!m_nmiinh) if(!m_nmiinh)
{
m_mode &= ~1;
m_user = false;
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
}
m_nmistat = true; m_nmistat = true;
m_mmuerr &= ~err_mask; m_mmuerr &= ~err_mask;
m_mmueaddr[0] = (offset << 1) | (!(mem_mask & 0xff) ? 1 : 0); m_mmueaddr[0] = (offset << 1) | (!(mem_mask & 0xff) ? 1 : 0);
@ -332,9 +350,9 @@ WRITE16_MEMBER(altos8600_state::xtraram_w)
READ16_MEMBER(altos8600_state::cpuio_r) READ16_MEMBER(altos8600_state::cpuio_r)
{ {
if(m_user) if(m_user && !machine().side_effect_disabled())
{ {
seterr(offset, mem_mask, 0x800); m_pic1->ir0_w(ASSERT_LINE);
return 0; return 0;
} }
return m_dmac->space(AS_IO).read_word_unaligned(offset << 1, mem_mask); return m_dmac->space(AS_IO).read_word_unaligned(offset << 1, mem_mask);
@ -342,9 +360,9 @@ READ16_MEMBER(altos8600_state::cpuio_r)
WRITE16_MEMBER(altos8600_state::cpuio_w) WRITE16_MEMBER(altos8600_state::cpuio_w)
{ {
if(m_user) if(m_user && !machine().side_effect_disabled())
{ {
seterr(offset, mem_mask, 0x800); m_pic1->ir0_w(ASSERT_LINE);
return; return;
} }
m_dmac->space(AS_IO).write_word_unaligned(offset << 1, data, mem_mask); m_dmac->space(AS_IO).write_word_unaligned(offset << 1, data, mem_mask);
@ -386,6 +404,13 @@ WRITE16_MEMBER(altos8600_state::nmi_w)
seterr(offset, mem_mask, 0x100); seterr(offset, mem_mask, 0x100);
} }
IRQ_CALLBACK_MEMBER(altos8600_state::inta)
{
m_user = false;
m_mode &= ~1;
return m_pic1->acknowledge();
}
static ADDRESS_MAP_START(cpu_mem, AS_PROGRAM, 16, altos8600_state) static ADDRESS_MAP_START(cpu_mem, AS_PROGRAM, 16, altos8600_state)
AM_RANGE(0x00000, 0xfffff) AM_READWRITE(cpuram_r, cpuram_w) AM_RANGE(0x00000, 0xfffff) AM_READWRITE(cpuram_r, cpuram_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -423,6 +448,7 @@ static ADDRESS_MAP_START(dmac_io, AS_IO, 16, altos8600_state)
AM_RANGE(0x0048, 0x004f) AM_DEVREADWRITE8("pit", pit8253_device, read, write, 0xff00) AM_RANGE(0x0048, 0x004f) AM_DEVREADWRITE8("pit", pit8253_device, read, write, 0xff00)
AM_RANGE(0x0050, 0x0057) AM_READWRITE8(romport_r, romport_w, 0xffff) AM_RANGE(0x0050, 0x0057) AM_READWRITE8(romport_r, romport_w, 0xffff)
AM_RANGE(0x0058, 0x005f) AM_DEVREADWRITE8("pic8259_1", pic8259_device, read, write, 0x00ff) AM_RANGE(0x0058, 0x005f) AM_DEVREADWRITE8("pic8259_1", pic8259_device, read, write, 0x00ff)
AM_RANGE(0x0058, 0x005f) AM_WRITE8(clrsys_w, 0xff00)
AM_RANGE(0x0060, 0x0067) AM_DEVREADWRITE8("pic8259_2", pic8259_device, read, write, 0x00ff) AM_RANGE(0x0060, 0x0067) AM_DEVREADWRITE8("pic8259_2", pic8259_device, read, write, 0x00ff)
AM_RANGE(0x0068, 0x006f) AM_DEVREADWRITE8("pic8259_3", pic8259_device, read, write, 0x00ff) AM_RANGE(0x0068, 0x006f) AM_DEVREADWRITE8("pic8259_3", pic8259_device, read, write, 0x00ff)
AM_RANGE(0x0070, 0x0077) AM_NOP AM_RANGE(0x0070, 0x0077) AM_NOP
@ -444,7 +470,7 @@ static MACHINE_CONFIG_START(altos8600)
MCFG_I8086_STACK_MAP(stack_mem) MCFG_I8086_STACK_MAP(stack_mem)
MCFG_I8086_CODE_MAP(code_mem) MCFG_I8086_CODE_MAP(code_mem)
MCFG_I8086_EXTRA_MAP(extra_mem) MCFG_I8086_EXTRA_MAP(extra_mem)
MCFG_CPU_IRQ_ACKNOWLEDGE_DEVICE("pic8259_1", pic8259_device, inta_cb) MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(altos8600_state, inta)
MCFG_I8086_IF_HANDLER(WRITELINE(altos8600_state, cpuif_w)) MCFG_I8086_IF_HANDLER(WRITELINE(altos8600_state, cpuif_w))
MCFG_CPU_ADD("dmac", I8089, XTAL_5MHz) MCFG_CPU_ADD("dmac", I8089, XTAL_5MHz)
@ -494,12 +520,12 @@ static MACHINE_CONFIG_START(altos8600)
MCFG_DEVICE_ADD("pit", PIT8253, 0) MCFG_DEVICE_ADD("pit", PIT8253, 0)
MCFG_PIT8253_CLK0(1228800) MCFG_PIT8253_CLK0(1228800)
MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("uart8274", i8274_new_device, rxca_w)) MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("uart8274", i8274_new_device, rxca_w))
MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart8274", i8274_new_device, txca_w)) MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart8274", i8274_new_device, txca_w))
MCFG_PIT8253_CLK1(1228800) MCFG_PIT8253_CLK1(1228800)
MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("uart8274", i8274_new_device, rxtxcb_w)) MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("uart8274", i8274_new_device, rxtxcb_w))
MCFG_PIT8253_CLK2(1228800) MCFG_PIT8253_CLK2(1228800)
MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic8259_1", pic8259_device, ir1_w)) MCFG_PIT8253_OUT2_HANDLER(DEVWRITELINE("pic8259_1", pic8259_device, ir1_w))
MCFG_FD1797_ADD("fd1797", 2000000) MCFG_FD1797_ADD("fd1797", 2000000)
MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("pic8259_2", pic8259_device, ir1_w)) MCFG_WD_FDC_INTRQ_CALLBACK(DEVWRITELINE("pic8259_2", pic8259_device, ir1_w))

View File

@ -496,4 +496,4 @@ COMP( 1985?, coco2b, coco, 0, coco2b, coco, coco12_state, 0,
COMP( 1984, cp400, coco, 0, cp400, coco, coco12_state, 0, "Prologica", "CP400", 0 ) COMP( 1984, cp400, coco, 0, cp400, coco, coco12_state, 0, "Prologica", "CP400", 0 )
COMP( 1984, lzcolor64, coco, 0, coco, coco, coco12_state, 0, "Digiponto", "LZ Color64", 0 ) COMP( 1984, lzcolor64, coco, 0, coco, coco, coco12_state, 0, "Digiponto", "LZ Color64", 0 )
COMP( 1984, mx1600, coco, 0, coco, coco, coco12_state, 0, "Dynacom", "MX-1600", 0 ) COMP( 1984, mx1600, coco, 0, coco, coco, coco12_state, 0, "Dynacom", "MX-1600", 0 )
COMP( 1986, t4426, coco, 0, t4426, coco, coco12_state, 0, "Terco AB", "Terco 4426 CNC Programming station", MACHINE_NOT_WORKING ) COMP( 1986, t4426, coco, 0, t4426, coco, coco12_state, 0, "Terco AB", "Terco 4426 CNC Programming station", MACHINE_IS_INCOMPLETE )

View File

@ -9,6 +9,9 @@
#include "emu.h" #include "emu.h"
#include "cpu/tms9900/tms9980a.h" #include "cpu/tms9900/tms9980a.h"
#include "cpu/m6800/m6800.h" #include "cpu/m6800/m6800.h"
#include "machine/6522via.h"
//#include "machine/74259.h"
//#include "sound/ay8910.h"
class jvh_state : public driver_device class jvh_state : public driver_device
{ {
@ -91,7 +94,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( jvh_sub_map, AS_PROGRAM, 8, jvh_state ) static ADDRESS_MAP_START( jvh_sub_map, AS_PROGRAM, 8, jvh_state )
AM_RANGE(0x0000, 0x007f) AM_RAM AM_RANGE(0x0000, 0x007f) AM_RAM
//AM_RANGE(0x0080, 0x008f) via6522_r,w AM_RANGE(0x0080, 0x008f) AM_DEVREADWRITE("via", via6522_device, read, write)
AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x2000) AM_ROM AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x2000) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -109,15 +112,23 @@ DRIVER_INIT_MEMBER(jvh_state,jvh)
static MACHINE_CONFIG_START( jvh ) static MACHINE_CONFIG_START( jvh )
// CPU TMS9980A; no line connections // CPU TMS9980A; no line connections
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 1000000, jvh_map, escape_io) MCFG_TMS99xx_ADD("maincpu", TMS9980A, 1000000, jvh_map, escape_io)
MCFG_CPU_ADD("cpu2", M6800, 1000000)
MCFG_CPU_ADD("soundcpu", M6802, XTAL_4MHz)
MCFG_CPU_PROGRAM_MAP(jvh_sub_map) MCFG_CPU_PROGRAM_MAP(jvh_sub_map)
MCFG_DEVICE_ADD("via", VIA6522, XTAL_4MHz / 4) // MC6802 E clock
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("soundcpu", M6802_IRQ_LINE))
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_START( jvh2 ) static MACHINE_CONFIG_START( jvh2 )
// CPU TMS9980At; no line connections // CPU TMS9980At; no line connections
MCFG_TMS99xx_ADD("maincpu", TMS9980A, 1000000, jvh_map, movmastr_io) MCFG_TMS99xx_ADD("maincpu", TMS9980A, 1000000, jvh_map, movmastr_io)
MCFG_CPU_ADD("cpu2", M6800, 1000000)
MCFG_CPU_ADD("soundcpu", M6802, XTAL_4MHz)
MCFG_CPU_PROGRAM_MAP(jvh_sub_map) MCFG_CPU_PROGRAM_MAP(jvh_sub_map)
MCFG_DEVICE_ADD("via", VIA6522, XTAL_4MHz / 4)
MCFG_VIA6522_IRQ_HANDLER(INPUTLINE("soundcpu", M6802_IRQ_LINE))
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -130,7 +141,7 @@ ROM_START(escape)
ROM_LOAD("cpu_ic1.bin", 0x0000, 0x2000, CRC(fadb8f9a) SHA1(b7e7ea8e33847c14a3414f5e367e304f12c0bc00)) ROM_LOAD("cpu_ic1.bin", 0x0000, 0x2000, CRC(fadb8f9a) SHA1(b7e7ea8e33847c14a3414f5e367e304f12c0bc00))
ROM_LOAD("cpu_ic7.bin", 0x2000, 0x2000, CRC(2f9402b4) SHA1(3d3bae7e4e5ad40e3c8019d55392defdffd21cc4)) ROM_LOAD("cpu_ic7.bin", 0x2000, 0x2000, CRC(2f9402b4) SHA1(3d3bae7e4e5ad40e3c8019d55392defdffd21cc4))
ROM_REGION(0x10000, "cpu2", 0) ROM_REGION(0x10000, "soundcpu", 0)
ROM_LOAD("snd.bin", 0xc000, 0x2000, CRC(2477bbe2) SHA1(f636952822153f43e9d09f8211edde1057249203)) ROM_LOAD("snd.bin", 0xc000, 0x2000, CRC(2477bbe2) SHA1(f636952822153f43e9d09f8211edde1057249203))
ROM_END ROM_END
@ -142,7 +153,7 @@ ROM_START(movmastr)
ROM_LOAD("mm_ic1.764", 0x0000, 0x2000, CRC(fb59920d) SHA1(05536c4c036a8d73516766e14f4449665b2ec180)) ROM_LOAD("mm_ic1.764", 0x0000, 0x2000, CRC(fb59920d) SHA1(05536c4c036a8d73516766e14f4449665b2ec180))
ROM_LOAD("mm_ic7.764", 0x2000, 0x2000, CRC(9b47af41) SHA1(ae795c22aa437d6c71312d93de8a87f43ee500fb)) ROM_LOAD("mm_ic7.764", 0x2000, 0x2000, CRC(9b47af41) SHA1(ae795c22aa437d6c71312d93de8a87f43ee500fb))
ROM_REGION(0x10000, "cpu2", 0) ROM_REGION(0x10000, "soundcpu", 0)
ROM_LOAD("snd.bin", 0xc000, 0x2000, NO_DUMP) ROM_LOAD("snd.bin", 0xc000, 0x2000, NO_DUMP)
ROM_END ROM_END

292
src/mame/drivers/ms6102.cpp Normal file
View File

@ -0,0 +1,292 @@
// license:BSD-3-Clause
// copyright-holders:Sergey Svishchev
/***************************************************************************
Elektronika MS6102.02 terminal
https://goo.gl/photos/xJManS26QTxG1T7M7
Schematics
http://sfrolov.livejournal.com/110770.html
Photos
To do:
- why DMA stops after 2nd char on each row?
- what does second 8275 do?
- what is the layout of chargen ROM?
- keyboard (MS7002)
Chips:
- DD5 - KR580WM80A (8080 clone) - CPU
- DD7 - KR580WT57 (8257 clone) - DMAC
- DD9 - KR1601RR1 (ER2401 clone) - NVRAM
- DD21 - KR581WA1A (TR6402 clone) - UART
- DD55, DD56 - KR580WG75 (8275 clone) - CRTC
- DD59 - KR556RT5 - alternate chargen ROM
- DD64 - K556RT4 - chargen layout table ROM
- DD70 - K555RE4 - default chargen ROM
- DD75 - KR580WI53 (8253 clone) - timer
- DD76 - KR580WW51A (8251 clone) - UART
- DD80 - K589IK14 (8214 clone) - interrupt control unit
****************************************************************************/
#include "emu.h"
#include "bus/rs232/rs232.h"
#include "cpu/i8085/i8085.h"
#include "machine/ay31015.h"
#include "machine/clock.h"
#include "machine/i8214.h"
#include "machine/i8251.h"
#include "machine/i8257.h"
#include "machine/keyboard.h"
#include "machine/nvram.h"
#include "machine/pit8253.h"
#include "video/i8275.h"
#include "screen.h"
#define LOG_GENERAL (1U << 0)
//#define VERBOSE (LOG_GENERAL)
//#define LOG_OUTPUT_FUNC printf
#include "logmacro.h"
class ms6102_state : public driver_device
{
public:
ms6102_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_p_videoram(*this, "videoram")
, m_maincpu(*this, "maincpu")
, m_nvram(*this, "nvram")
, m_pic(*this, "i8214")
, m_dma8257(*this, "dma8257")
, m_i8251(*this, "i8251")
, m_rs232(*this, "rs232")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_p_chargen(*this, "chargen")
, m_p_charmap(*this, "charmap")
{ }
virtual void machine_reset() override;
virtual void machine_start() override;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
template <unsigned N> DECLARE_WRITE_LINE_MEMBER(irq) { m_pic->r_w(N, state?0:1); }
I8275_DRAW_CHARACTER_MEMBER(display_pixels);
DECLARE_WRITE_LINE_MEMBER(hrq_w);
DECLARE_WRITE8_MEMBER(pic_w);
IRQ_CALLBACK_MEMBER(ms6102_int_ack);
DECLARE_READ8_MEMBER(memory_read_byte);
DECLARE_READ8_MEMBER(misc_r);
DECLARE_READ8_MEMBER(kbd_get);
void kbd_put(u8 data);
private:
bool m_kbd_ready;
uint8_t m_kbd_data;
required_shared_ptr<uint8_t> m_p_videoram;
required_device<i8080_cpu_device> m_maincpu;
required_device<nvram_device> m_nvram;
required_device<i8214_device> m_pic;
required_device<i8257_device> m_dma8257;
required_device<i8251_device> m_i8251;
required_device<rs232_port_device> m_rs232;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
required_region_ptr<u8> m_p_chargen;
required_region_ptr<u8> m_p_charmap;
};
static ADDRESS_MAP_START(ms6102_mem, AS_PROGRAM, 8, ms6102_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE (0x0000, 0x2fff) AM_ROM
AM_RANGE (0x3800, 0x3bff) AM_RAM AM_SHARE("nvram")
AM_RANGE (0xc000, 0xffff) AM_RAM AM_SHARE("videoram")
ADDRESS_MAP_END
static ADDRESS_MAP_START(ms6102_io, AS_IO, 8, ms6102_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE (0x00, 0x00) AM_DEVREADWRITE("i8251", i8251_device, data_r, data_w)
AM_RANGE (0x01, 0x01) AM_DEVREADWRITE("i8251", i8251_device, status_r, control_w)
AM_RANGE (0x10, 0x18) AM_DEVREADWRITE("dma8257", i8257_device, read, write)
AM_RANGE (0x20, 0x23) AM_DEVREADWRITE("pit8253", pit8253_device, read, write)
AM_RANGE (0x30, 0x3f) AM_READ(kbd_get)
AM_RANGE (0x40, 0x41) AM_DEVREADWRITE("i8275", i8275_device, read, write)
AM_RANGE (0x50, 0x5f) AM_NOP // video disable?
AM_RANGE (0x60, 0x6f) AM_WRITE(pic_w)
AM_RANGE (0x70, 0x7f) AM_READ(misc_r)
ADDRESS_MAP_END
static const gfx_layout ms6102_charlayout =
{
7, 8,
RGN_FRAC(1,1),
1,
{ 0 },
{ STEP8(1,1) },
{ 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 0*8, 1*8, },
8*8
};
static GFXDECODE_START(ms6102)
GFXDECODE_ENTRY("chargen", 0x0000, ms6102_charlayout, 0, 1)
GFXDECODE_END
WRITE_LINE_MEMBER(ms6102_state::hrq_w)
{
/* HACK - this should be connected to the HOLD line of 8080 */
m_maincpu->set_input_line(INPUT_LINE_HALT, state);
/* HACK - this should be connected to the HLDA line of 8080 */
m_dma8257->hlda_w(state);
}
READ8_MEMBER(ms6102_state::memory_read_byte)
{
return m_maincpu->space(AS_PROGRAM).read_byte(offset);
}
I8275_DRAW_CHARACTER_MEMBER(ms6102_state::display_pixels)
{
int i;
const rgb_t *palette = m_palette->palette()->entry_list_raw();
u8 dd64 = m_p_charmap[((linecount >> 1) & 7) + ((charcode >> 2) & 0x18) + ((lineattr & 2) << 4)] ^ 0xff;
u8 gfx = m_p_chargen[(linecount & 3) + ((dd64 & 1) << 2) + ((charcode & 0x1f) << 3) + ((dd64 & 0xe) << 7)];
if (lten)
{
gfx = 0xff;
}
for (i = 0; i < 8; i++)
{
bitmap.pix32(y, x + i) = palette[(gfx >> (7 - i)) & 1 ? (hlgt ? 2 : 1) : 0];
}
}
READ8_MEMBER(ms6102_state::misc_r)
{
return m_kbd_ready << 6;
}
READ8_MEMBER(ms6102_state::kbd_get)
{
return m_kbd_data;
}
void ms6102_state::kbd_put(u8 data)
{
m_kbd_ready = true;
m_kbd_data = data;
m_pic->r_w(1, 0);
}
WRITE8_MEMBER(ms6102_state::pic_w)
{
m_pic->b_w(data & 7);
m_pic->sgs_w(BIT(data, 3));
}
IRQ_CALLBACK_MEMBER(ms6102_state::ms6102_int_ack)
{
return 0xc7 | (m_pic->a_r() << 3);
}
void ms6102_state::machine_reset()
{
m_kbd_ready = false;
}
void ms6102_state::machine_start()
{
m_pic->etlg_w(1);
}
static MACHINE_CONFIG_START( ms6102 )
MCFG_CPU_ADD("maincpu", I8080, XTAL_18_432MHz / 9)
MCFG_CPU_PROGRAM_MAP(ms6102_mem)
MCFG_CPU_IO_MAP(ms6102_io)
MCFG_I8085A_INTE(DEVWRITELINE("i8214", i8214_device, inte_w))
MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(ms6102_state, ms6102_int_ack)
MCFG_NVRAM_ADD_0FILL("nvram")
MCFG_DEVICE_ADD("i8214", I8214, XTAL_18_432MHz / 9)
MCFG_I8214_INT_CALLBACK(INPUTLINE("maincpu", I8085_INTR_LINE))
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_UPDATE_DEVICE("i8275", i8275_device, screen_update)
MCFG_SCREEN_REFRESH_RATE(50)
MCFG_SCREEN_SIZE(784, 375)
MCFG_SCREEN_VISIBLE_AREA(100, 100+80*8-1, 7, 7+24*15-1)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", ms6102)
MCFG_PALETTE_ADD_MONOCHROME_HIGHLIGHT("palette")
MCFG_DEVICE_ADD("dma8257", I8257, XTAL_18_432MHz / 9)
MCFG_I8257_OUT_HRQ_CB(WRITELINE(ms6102_state, hrq_w))
MCFG_I8257_IN_MEMR_CB(READ8(ms6102_state, memory_read_byte))
MCFG_I8257_OUT_IOW_2_CB(DEVWRITE8("i8275", i8275_device, dack_w))
MCFG_DEVICE_ADD("i8275", I8275, XTAL_16_4MHz / 8) // XXX
MCFG_I8275_CHARACTER_WIDTH(8)
MCFG_I8275_DRAW_CHARACTER_CALLBACK_OWNER(ms6102_state, display_pixels)
MCFG_I8275_DRQ_CALLBACK(DEVWRITELINE("dma8257", i8257_device, dreq2_w))
MCFG_I8275_IRQ_CALLBACK(WRITELINE(ms6102_state, irq<5>))
// keyboard
MCFG_DEVICE_ADD("589wa1", AY31015, 0)
MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0)
MCFG_GENERIC_KEYBOARD_CB(PUT(ms6102_state, kbd_put))
// serial connection to host
MCFG_DEVICE_ADD("i8251", I8251, 0)
MCFG_I8251_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
MCFG_I8251_RXRDY_HANDLER(WRITELINE(ms6102_state, irq<3>))
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "null_modem")
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("i8251", i8251_device, write_rxd))
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
MCFG_PIT8253_CLK0(XTAL_16_4MHz / 9)
MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("i8251", i8251_device, write_txc))
MCFG_PIT8253_CLK1(XTAL_16_4MHz / 9)
MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("i8251", i8251_device, write_rxc))
MACHINE_CONFIG_END
ROM_START( ms6102 )
ROM_REGION(0x3000, "maincpu", ROMREGION_ERASE00)
ROM_LOAD("MC6102_02_KS573RF2_DD26", 0x0000, 0x0800, CRC(f96ba806) SHA1(60d155b781e97e86d31dc2194ad367030470eeb6))
ROM_LOAD("MC6102_02_KS573RF2_DD30", 0x0800, 0x0800, CRC(1d69ba62) SHA1(bf7d19400fe606239ce8a057850cf4c63ff4cdb2))
ROM_LOAD("MC6102_02_KS573RF2_0034", 0x1000, 0x0800, CRC(4bce121a) SHA1(e97c635c2fab70a71a31db3b53284209b5881f2c))
ROM_LOAD("MC6102_02_KS573RF2_0037", 0x1800, 0x0800, CRC(1b22543f) SHA1(fc6cc54baf3abadca30dfaf39a50cae7fbf601b2))
ROM_LOAD("MC6102_02_KS573RF2_0045", 0x2000, 0x0800, CRC(fd741cfe) SHA1(153abb57ca4833286811082ff50c7b36136274dc))
ROM_LOAD("MC6102_02_KS573RF2_DD49", 0x2800, 0x0800, CRC(748f6cee) SHA1(a35e6495ea108824f2f1f9907f5e651174e9cf15))
ROM_REGION(0x0800, "chargen", ROMREGION_ERASE00)
ROM_LOAD("MC6102_02_K555RE4_chargen", 0x0000, 0x0800, CRC(b0e3546b) SHA1(25aca264cc64f368ffcefdfd356120a314a44947))
ROM_REGION(0x0100, "charmap", ROMREGION_ERASE00)
ROM_LOAD("MC6102_02_K556RT4_D64", 0x0000, 0x0100, CRC(a59fdaa7) SHA1(0851a8b12e838e8f7e5ce840a0262facce303442))
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
COMP( 1984, ms6102, 0, 0, ms6102, 0, ms6102_state, 0, "Elektronika", "MS 6102.02", MACHINE_IS_SKELETON)

View File

@ -50,6 +50,7 @@
#include "imagedev/cassette.h" #include "imagedev/cassette.h"
#include "machine/6821pia.h" #include "machine/6821pia.h"
#include "machine/6850acia.h" #include "machine/6850acia.h"
#include "machine/mc14411.h"
#include "machine/clock.h" #include "machine/clock.h"
#include "machine/keyboard.h" #include "machine/keyboard.h"
#include "sound/wave.h" #include "sound/wave.h"
@ -69,9 +70,11 @@ public:
, m_p_videoram(*this, "vram") , m_p_videoram(*this, "vram")
, m_p_chargen(*this, "chargen") , m_p_chargen(*this, "chargen")
, m_pia(*this, "pia") , m_pia(*this, "pia")
, m_brg(*this, "brg")
, m_acia1(*this, "acia1") , m_acia1(*this, "acia1")
, m_acia2(*this, "acia2") , m_acia2(*this, "acia2")
, m_cass(*this, "cassette") , m_cass(*this, "cassette")
, m_serial(*this, "SERIAL")
{ } { }
DECLARE_WRITE_LINE_MEMBER(ca2_w); DECLARE_WRITE_LINE_MEMBER(ca2_w);
@ -79,11 +82,28 @@ public:
void kbd_put(u8 data); void kbd_put(u8 data);
DECLARE_WRITE_LINE_MEMBER(acia1_txdata_w); DECLARE_WRITE_LINE_MEMBER(acia1_txdata_w);
DECLARE_WRITE_LINE_MEMBER(acia1_clock_w); DECLARE_WRITE_LINE_MEMBER(acia1_clock_w);
DECLARE_WRITE_LINE_MEMBER(acia2_clock_w);
TIMER_DEVICE_CALLBACK_MEMBER(timer_c); TIMER_DEVICE_CALLBACK_MEMBER(timer_c);
TIMER_DEVICE_CALLBACK_MEMBER(timer_p); TIMER_DEVICE_CALLBACK_MEMBER(timer_p);
uint32_t screen_update_proteus3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_proteus3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
// Clocks
void write_acia_clocks(int id, int state);
DECLARE_WRITE_LINE_MEMBER (write_f1_clock){ write_acia_clocks(mc14411_device::TIMER_F1, state); }
DECLARE_WRITE_LINE_MEMBER (write_f2_clock){ write_acia_clocks(mc14411_device::TIMER_F2, state); }
DECLARE_WRITE_LINE_MEMBER (write_f3_clock){ write_acia_clocks(mc14411_device::TIMER_F3, state); }
DECLARE_WRITE_LINE_MEMBER (write_f4_clock){ write_acia_clocks(mc14411_device::TIMER_F4, state); }
DECLARE_WRITE_LINE_MEMBER (write_f5_clock){ write_acia_clocks(mc14411_device::TIMER_F5, state); }
DECLARE_WRITE_LINE_MEMBER (write_f6_clock){ write_acia_clocks(mc14411_device::TIMER_F6, state); }
DECLARE_WRITE_LINE_MEMBER (write_f7_clock){ write_acia_clocks(mc14411_device::TIMER_F7, state); }
DECLARE_WRITE_LINE_MEMBER (write_f8_clock){ write_acia_clocks(mc14411_device::TIMER_F8, state); }
DECLARE_WRITE_LINE_MEMBER (write_f9_clock){ write_acia_clocks(mc14411_device::TIMER_F9, state); }
DECLARE_WRITE_LINE_MEMBER (write_f10_clock){ write_acia_clocks(mc14411_device::TIMER_F10, state); }
DECLARE_WRITE_LINE_MEMBER (write_f11_clock){ write_acia_clocks(mc14411_device::TIMER_F11, state); }
DECLARE_WRITE_LINE_MEMBER (write_f12_clock){ write_acia_clocks(mc14411_device::TIMER_F12, state); }
DECLARE_WRITE_LINE_MEMBER (write_f13_clock){ write_acia_clocks(mc14411_device::TIMER_F13, state); }
DECLARE_WRITE_LINE_MEMBER (write_f14_clock){ write_acia_clocks(mc14411_device::TIMER_F14, state); }
DECLARE_WRITE_LINE_MEMBER (write_f15_clock){ write_acia_clocks(mc14411_device::TIMER_F15, state); }
private: private:
uint8_t m_video_data; uint8_t m_video_data;
uint8_t m_flashcnt; uint8_t m_flashcnt;
@ -97,9 +117,13 @@ private:
required_region_ptr<u8> m_p_videoram; required_region_ptr<u8> m_p_videoram;
required_region_ptr<u8> m_p_chargen; required_region_ptr<u8> m_p_chargen;
required_device<pia6821_device> m_pia; required_device<pia6821_device> m_pia;
required_device<mc14411_device> m_brg;
required_device<acia6850_device> m_acia1; // cassette uart required_device<acia6850_device> m_acia1; // cassette uart
required_device<acia6850_device> m_acia2; // tty keyboard uart required_device<acia6850_device> m_acia2; // tty keyboard uart
required_device<cassette_image_device> m_cass; required_device<cassette_image_device> m_cass;
// hardware configuration and things that need rewiring
required_ioport m_serial;
}; };
@ -126,6 +150,24 @@ ADDRESS_MAP_END
******************************************************************************/ ******************************************************************************/
static INPUT_PORTS_START(proteus3) static INPUT_PORTS_START(proteus3)
PORT_START("SERIAL")
PORT_CONFNAME(0x0F , 0x00 , "Serial Baud Rate") // F1-F16 pins on MC14411 in X16
PORT_CONFSETTING(mc14411_device::TIMER_F1, "153600")
PORT_CONFSETTING(mc14411_device::TIMER_F2, "115200")
PORT_CONFSETTING(mc14411_device::TIMER_F3, "76800")
PORT_CONFSETTING(mc14411_device::TIMER_F4, "57600")
PORT_CONFSETTING(mc14411_device::TIMER_F5, "38400")
PORT_CONFSETTING(mc14411_device::TIMER_F6, "28800")
PORT_CONFSETTING(mc14411_device::TIMER_F7, "19200")
PORT_CONFSETTING(mc14411_device::TIMER_F8, "9600")
PORT_CONFSETTING(mc14411_device::TIMER_F9, "4800")
PORT_CONFSETTING(mc14411_device::TIMER_F10, "3200")
PORT_CONFSETTING(mc14411_device::TIMER_F11, "2400")
PORT_CONFSETTING(mc14411_device::TIMER_F12, "2153.3")
PORT_CONFSETTING(mc14411_device::TIMER_F13, "1758.8")
PORT_CONFSETTING(mc14411_device::TIMER_F14, "1200")
PORT_CONFSETTING(mc14411_device::TIMER_F15, "921.6")
PORT_CONFSETTING(mc14411_device::TIMER_F16, "1.8432")
INPUT_PORTS_END INPUT_PORTS_END
void proteus3_state::kbd_put(u8 data) void proteus3_state::kbd_put(u8 data)
@ -137,10 +179,17 @@ void proteus3_state::kbd_put(u8 data)
m_pia->cb1_w(0); m_pia->cb1_w(0);
} }
WRITE_LINE_MEMBER( proteus3_state::acia2_clock_w ) void proteus3_state::write_acia_clocks(int id, int state)
{ {
m_acia2->write_txc(state); if (id == m_serial->read()) // Configurable serial port
m_acia2->write_rxc(state); {
m_acia2->write_txc(state);
m_acia2->write_rxc(state);
}
if (id == mc14411_device::TIMER_F8) // Fixed bitrate for the cassette interface
{
acia1_clock_w(state);
}
} }
/****************************************************************************** /******************************************************************************
@ -310,6 +359,15 @@ void proteus3_state::machine_reset()
m_cass_state = 1; m_cass_state = 1;
m_cassold = 1; m_cassold = 1;
m_acia1->write_rxd(1); m_acia1->write_rxd(1);
// Set up the BRG divider. RSA is a jumper setting and RSB is always set High
m_brg->rsa_w( CLEAR_LINE );
m_brg->rsb_w( ASSERT_LINE );
// Disable all configured timers, only enabling the used ones
m_brg->timer_disable_all();
m_brg->timer_enable((mc14411_device::timer_id) m_serial->read(), true); // Serial port
m_brg->timer_enable( mc14411_device::TIMER_F8, true); // Cassette interface
} }
@ -344,8 +402,6 @@ static MACHINE_CONFIG_START( proteus3 )
/* cassette */ /* cassette */
MCFG_DEVICE_ADD ("acia1", ACIA6850, 0) MCFG_DEVICE_ADD ("acia1", ACIA6850, 0)
MCFG_ACIA6850_TXD_HANDLER(WRITELINE(proteus3_state, acia1_txdata_w)) MCFG_ACIA6850_TXD_HANDLER(WRITELINE(proteus3_state, acia1_txdata_w))
MCFG_DEVICE_ADD("acia1_clock", CLOCK, 9600) // this controls cassette baud rate
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(proteus3_state, acia1_clock_w))
MCFG_CASSETTE_ADD("cassette") MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED) MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_PLAY | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
@ -361,8 +417,24 @@ static MACHINE_CONFIG_START( proteus3 )
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "keyboard") MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "keyboard")
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia2", acia6850_device, write_rxd)) MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia2", acia6850_device, write_rxd))
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia2", acia6850_device, write_cts)) MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia2", acia6850_device, write_cts))
MCFG_DEVICE_ADD("acia2_clock", CLOCK, 153600/8)
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(proteus3_state, acia2_clock_w)) /* Bit Rate Generator */
MCFG_MC14411_ADD ("brg", XTAL_1_8432MHz) // crystal needs verification but is the likely one
MCFG_MC14411_F1_CB(WRITELINE (proteus3_state, write_f1_clock))
MCFG_MC14411_F2_CB(WRITELINE (proteus3_state, write_f2_clock))
MCFG_MC14411_F3_CB(WRITELINE (proteus3_state, write_f3_clock))
MCFG_MC14411_F4_CB(WRITELINE (proteus3_state, write_f4_clock))
MCFG_MC14411_F5_CB(WRITELINE (proteus3_state, write_f5_clock))
MCFG_MC14411_F6_CB(WRITELINE (proteus3_state, write_f6_clock))
MCFG_MC14411_F7_CB(WRITELINE (proteus3_state, write_f7_clock))
MCFG_MC14411_F8_CB(WRITELINE (proteus3_state, write_f8_clock))
MCFG_MC14411_F9_CB(WRITELINE (proteus3_state, write_f9_clock))
MCFG_MC14411_F10_CB(WRITELINE (proteus3_state, write_f10_clock))
MCFG_MC14411_F11_CB(WRITELINE (proteus3_state, write_f11_clock))
MCFG_MC14411_F12_CB(WRITELINE (proteus3_state, write_f12_clock))
MCFG_MC14411_F13_CB(WRITELINE (proteus3_state, write_f13_clock))
MCFG_MC14411_F14_CB(WRITELINE (proteus3_state, write_f14_clock))
MCFG_MC14411_F15_CB(WRITELINE (proteus3_state, write_f15_clock))
MACHINE_CONFIG_END MACHINE_CONFIG_END

View File

@ -25,32 +25,36 @@ TODO:
#include "emu.h" #include "emu.h"
#include "includes/vector06.h" #include "includes/vector06.h"
#include "formats/vector06_dsk.h" #include "formats/vector06_dsk.h"
#include "machine/i8255.h"
#include "machine/pit8253.h"
#include "sound/wave.h"
#include "screen.h" #include "screen.h"
#include "softlist.h" #include "softlist.h"
#include "speaker.h" #include "speaker.h"
/* Address maps */ /* Address maps */
static ADDRESS_MAP_START(vector06_mem, AS_PROGRAM, 8, vector06_state) static ADDRESS_MAP_START(vector06_mem, AS_PROGRAM, 8, vector06_state)
AM_RANGE( 0x0000, 0x7fff ) AM_READ_BANK("bank2") AM_RANGE(0x0000, 0x7fff) AM_READ_BANK("bank2")
AM_RANGE( 0xa000, 0xdfff ) AM_READWRITE_BANK("bank3") AM_RANGE(0xa000, 0xdfff) AM_READWRITE_BANK("bank3")
AM_RANGE( 0x0000, 0xffff ) AM_READWRITE_BANK("bank1") AM_RANGE(0x0000, 0xffff) AM_READWRITE_BANK("bank1")
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START(vector06_io, AS_IO, 8, vector06_state) static ADDRESS_MAP_START(vector06_io, AS_IO, 8, vector06_state)
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
AM_RANGE( 0x00, 0x03) AM_READWRITE(vector06_8255_1_r, vector06_8255_1_w ) AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_MOD("ppi8255", i8255_device, read, write, xor<3>)
AM_RANGE( 0x04, 0x07) AM_READWRITE(vector06_8255_2_r, vector06_8255_2_w ) AM_RANGE(0x04, 0x07) AM_DEVREADWRITE_MOD("ppi8255_2", i8255_device, read, write, xor<3>)
AM_RANGE( 0x08, 0x0B) AM_READWRITE(pit8253_r, pit8253_w) AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE_MOD("pit8253", pit8253_device, read, write, xor<3>)
AM_RANGE( 0x0C, 0x0C) AM_WRITE(vector06_color_set) AM_RANGE(0x0c, 0x0c) AM_WRITE(vector06_color_set)
AM_RANGE( 0x10, 0x10) AM_WRITE(vector06_ramdisk_w) AM_RANGE(0x10, 0x10) AM_WRITE(vector06_ramdisk_w)
AM_RANGE( 0x14, 0x15) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_address_w) AM_RANGE(0x14, 0x15) AM_DEVREADWRITE("aysnd", ay8910_device, data_r, data_address_w)
AM_RANGE( 0x18, 0x18) AM_DEVREADWRITE("wd1793", kr1818vg93_device, data_r, data_w) AM_RANGE(0x18, 0x18) AM_DEVREADWRITE("wd1793", kr1818vg93_device, data_r, data_w)
AM_RANGE( 0x19, 0x19) AM_DEVREADWRITE("wd1793", kr1818vg93_device, sector_r, sector_w) AM_RANGE(0x19, 0x19) AM_DEVREADWRITE("wd1793", kr1818vg93_device, sector_r, sector_w)
AM_RANGE( 0x1a, 0x1a) AM_DEVREADWRITE("wd1793", kr1818vg93_device, track_r, track_w) AM_RANGE(0x1a, 0x1a) AM_DEVREADWRITE("wd1793", kr1818vg93_device, track_r, track_w)
AM_RANGE( 0x1b, 0x1b) AM_DEVREADWRITE("wd1793", kr1818vg93_device, status_r, cmd_w) AM_RANGE(0x1b, 0x1b) AM_DEVREADWRITE("wd1793", kr1818vg93_device, status_r, cmd_w)
AM_RANGE( 0x1C, 0x1C) AM_WRITE(vector06_disc_w) AM_RANGE(0x1c, 0x1c) AM_WRITE(vector06_disc_w)
ADDRESS_MAP_END ADDRESS_MAP_END
/* Input ports */ /* Input ports */
@ -156,7 +160,6 @@ SLOT_INTERFACE_END
static MACHINE_CONFIG_START( vector06 ) static MACHINE_CONFIG_START( vector06 )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", I8080, 3000000) // actual speed is wrong due to unemulated latency MCFG_CPU_ADD("maincpu", I8080, 3000000) // actual speed is wrong due to unemulated latency
// MCFG_CPU_ADD("maincpu", Z80, 3000000)
MCFG_CPU_PROGRAM_MAP(vector06_mem) MCFG_CPU_PROGRAM_MAP(vector06_mem)
MCFG_CPU_IO_MAP(vector06_io) MCFG_CPU_IO_MAP(vector06_io)
MCFG_I8085A_STATUS(WRITE8(vector06_state, vector06_status_callback)) MCFG_I8085A_STATUS(WRITE8(vector06_state, vector06_status_callback))

View File

@ -13,19 +13,15 @@
#include "bus/generic/slot.h" #include "bus/generic/slot.h"
#include "cpu/i8085/i8085.h" #include "cpu/i8085/i8085.h"
#include "cpu/z80/z80.h"
#include "imagedev/cassette.h" #include "imagedev/cassette.h"
#include "imagedev/flopdrv.h" #include "imagedev/flopdrv.h"
#include "machine/i8255.h"
#include "machine/pit8253.h"
#include "machine/ram.h" #include "machine/ram.h"
#include "machine/wd_fdc.h" #include "machine/wd_fdc.h"
#include "sound/ay8910.h" #include "sound/ay8910.h"
#include "sound/spkrdev.h" #include "sound/spkrdev.h"
#include "sound/wave.h"
class vector06_state : public driver_device class vector06_state : public driver_device
@ -40,9 +36,6 @@ public:
m_fdc(*this, "wd1793"), m_fdc(*this, "wd1793"),
m_floppy0(*this, "wd1793:0"), m_floppy0(*this, "wd1793:0"),
m_floppy1(*this, "wd1793:1"), m_floppy1(*this, "wd1793:1"),
m_ppi(*this, "ppi8255"),
m_ppi2(*this, "ppi8255_2"),
m_pit8253(*this, "pit8253"),
m_ay(*this, "aysnd"), m_ay(*this, "aysnd"),
m_ram(*this, RAM_TAG), m_ram(*this, RAM_TAG),
m_palette(*this, "palette"), m_palette(*this, "palette"),
@ -65,15 +58,9 @@ public:
DECLARE_WRITE8_MEMBER(vector06_romdisk_portb_w); DECLARE_WRITE8_MEMBER(vector06_romdisk_portb_w);
DECLARE_WRITE8_MEMBER(vector06_romdisk_porta_w); DECLARE_WRITE8_MEMBER(vector06_romdisk_porta_w);
DECLARE_WRITE8_MEMBER(vector06_romdisk_portc_w); DECLARE_WRITE8_MEMBER(vector06_romdisk_portc_w);
DECLARE_READ8_MEMBER(vector06_8255_1_r);
DECLARE_WRITE8_MEMBER(vector06_8255_1_w);
DECLARE_READ8_MEMBER(vector06_8255_2_r);
DECLARE_WRITE8_MEMBER(vector06_8255_2_w);
DECLARE_WRITE8_MEMBER(vector06_disc_w); DECLARE_WRITE8_MEMBER(vector06_disc_w);
DECLARE_WRITE8_MEMBER(vector06_status_callback); DECLARE_WRITE8_MEMBER(vector06_status_callback);
DECLARE_WRITE8_MEMBER(vector06_ramdisk_w); DECLARE_WRITE8_MEMBER(vector06_ramdisk_w);
DECLARE_WRITE8_MEMBER(pit8253_w);
DECLARE_READ8_MEMBER(pit8253_r);
DECLARE_WRITE_LINE_MEMBER(speaker_w); DECLARE_WRITE_LINE_MEMBER(speaker_w);
void vector06_set_video_mode(int width); void vector06_set_video_mode(int width);
virtual void machine_start() override; virtual void machine_start() override;
@ -93,9 +80,6 @@ private:
required_device<kr1818vg93_device> m_fdc; required_device<kr1818vg93_device> m_fdc;
required_device<floppy_connector> m_floppy0; required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1; required_device<floppy_connector> m_floppy1;
required_device<i8255_device> m_ppi;
required_device<i8255_device> m_ppi2;
required_device<pit8253_device> m_pit8253;
required_device<ay8910_device> m_ay; required_device<ay8910_device> m_ay;
required_device<ram_device> m_ram; required_device<ram_device> m_ram;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;

View File

@ -94,26 +94,6 @@ WRITE8_MEMBER( vector06_state::vector06_romdisk_portc_w )
m_romdisk_msb = data; m_romdisk_msb = data;
} }
READ8_MEMBER( vector06_state::vector06_8255_1_r )
{
return m_ppi->read(space, offset^3);
}
WRITE8_MEMBER( vector06_state::vector06_8255_1_w )
{
m_ppi->write(space, offset^3, data);
}
READ8_MEMBER( vector06_state::vector06_8255_2_r )
{
return m_ppi2->read(space, offset^3);
}
WRITE8_MEMBER( vector06_state::vector06_8255_2_w )
{
m_ppi2->write(space, offset^3, data);
}
INTERRUPT_GEN_MEMBER(vector06_state::vector06_interrupt) INTERRUPT_GEN_MEMBER(vector06_state::vector06_interrupt)
{ {
device.execute().set_input_line(0, HOLD_LINE); device.execute().set_input_line(0, HOLD_LINE);
@ -206,16 +186,6 @@ WRITE_LINE_MEMBER(vector06_state::speaker_w)
m_speaker->level_w(state); m_speaker->level_w(state);
} }
WRITE8_MEMBER(vector06_state::pit8253_w)
{
m_pit8253->write(space, offset ^ 3, data);
}
READ8_MEMBER(vector06_state::pit8253_r)
{
return m_pit8253->read(space, offset ^ 3);
}
void vector06_state::machine_start() void vector06_state::machine_start()
{ {
m_reset_check_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vector06_state::reset_check_callback), this)); m_reset_check_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(vector06_state::reset_check_callback), this));

View File

@ -96,7 +96,8 @@ sgi_ip6 // IP6: 4D/PI, R2000, 20MHz
4enraya // (c) 1990 IDSA 4enraya // (c) 1990 IDSA
4enrayaa // 4enrayaa //
unkpacg // (c) 19?? ??? unkpacg // (c) 19?? ???
unkfr // 1998? unksig // 1998?
unksiga // 1998?
@source:4roses.cpp @source:4roses.cpp
4roses // (c) 1999 Unknown 4roses // (c) 1999 Unknown
@ -27644,6 +27645,9 @@ mrjong // (c) 1983 Kiwako
@source:ms0515.cpp @source:ms0515.cpp
ms0515 // ms0515 //
@source:ms6102.cpp
ms6102 //
@source:ms32.cpp @source:ms32.cpp
47pie2 // (c) 1994 47pie2 // (c) 1994
47pie2o // (c) 1994 47pie2o // (c) 1994

View File

@ -393,6 +393,7 @@ mpf1.cpp
mps1230.cpp mps1230.cpp
mpz80.cpp mpz80.cpp
ms0515.cpp ms0515.cpp
ms6102.cpp
ms9540.cpp ms9540.cpp
msbc1.cpp msbc1.cpp
mstation.cpp mstation.cpp