mirror of
https://github.com/holub/mame
synced 2025-10-06 17:08:28 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
adf48561a1
@ -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 -->
|
||||||
|
@ -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>
|
||||||
|
4
makefile
4
makefile
@ -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; >> $@
|
||||||
|
@ -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")
|
||||||
|
@ -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;
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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 */
|
||||||
|
@ -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 )
|
||||||
|
@ -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))
|
||||||
|
@ -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 )
|
||||||
|
@ -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
292
src/mame/drivers/ms6102.cpp
Normal 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)
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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))
|
||||||
|
@ -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;
|
||||||
|
@ -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));
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user