mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
srcclean (nw)
This commit is contained in:
parent
770356315a
commit
6cb38b0771
160
hash/ibm5170.xml
160
hash/ibm5170.xml
@ -3760,86 +3760,86 @@ Missing files come here
|
||||
<year>1989</year>
|
||||
<publisher>Borland</publisher>
|
||||
<info name="version" value="3.01" />
|
||||
<part name="flop01" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk01.img" size="368640" crc="d1412b21" sha1="4fc367a229031dd3134100eece7bfb9b3b8dbd2d" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop02" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk02.img" size="368640" crc="56e083c3" sha1="aea7a20f9e22ab78d9377e3dce1ac5fdee83fbed" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop03" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk03.img" size="368640" crc="0bfcd167" sha1="b29c61e067d450090f611bf0f7ae58881124e984" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop04" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk04.img" size="368640" crc="cbed452b" sha1="0e6bf5519349297d377704bcd1e9568b12ad706d" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop05" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk05.img" size="368640" crc="43bf368f" sha1="0e59b71c067ad578a73ed8b9a9ad8fb52766efbd" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop06" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk06.img" size="368640" crc="d5314389" sha1="46ba14cb52f0c7f04753023eff77ccc8f40c3911" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop07" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk07.img" size="368640" crc="27f29554" sha1="150436b12138ef74b154b5080658ed97a7849cb0" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop08" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk08.img" size="368640" crc="19549090" sha1="6c16e114571422ce71c8ad8ef9f07c518724b506" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop09" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk09.img" size="368640" crc="29cf72df" sha1="a019ddbb81baa4afbed94cea10f8cb63f64b1937" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop10" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk10.img" size="368640" crc="385d1f10" sha1="0850e25d4d418822cccb1c6aefd3131bffe814ff" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop11" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk11.img" size="368640" crc="cee1c377" sha1="f9eea75e284c59f71f9adad6fa4da3287c451fec" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop12" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk12.img" size="368640" crc="7aa5fe5f" sha1="95238693de43a1f6a8062a0b09d920f6c39ea18b" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop13" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk13.img" size="368640" crc="159151e7" sha1="71082a91f55aebe8d0efa21cb8afedc3482131e9" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop14" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk14.img" size="368640" crc="6df1d631" sha1="ba39fba55d21da98c294df456980724bbb83cc7a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop15" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk15.img" size="368640" crc="710bc39f" sha1="985a1ff252c17fe91aba5f40994dda853389c5d1" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop16" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk16.img" size="368640" crc="8941eb6a" sha1="ebe7bad7a92505664ec3a61aad4065dd6e72ca7a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop01" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk01.img" size="368640" crc="d1412b21" sha1="4fc367a229031dd3134100eece7bfb9b3b8dbd2d" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop02" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk02.img" size="368640" crc="56e083c3" sha1="aea7a20f9e22ab78d9377e3dce1ac5fdee83fbed" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop03" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk03.img" size="368640" crc="0bfcd167" sha1="b29c61e067d450090f611bf0f7ae58881124e984" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop04" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk04.img" size="368640" crc="cbed452b" sha1="0e6bf5519349297d377704bcd1e9568b12ad706d" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop05" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk05.img" size="368640" crc="43bf368f" sha1="0e59b71c067ad578a73ed8b9a9ad8fb52766efbd" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop06" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk06.img" size="368640" crc="d5314389" sha1="46ba14cb52f0c7f04753023eff77ccc8f40c3911" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop07" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk07.img" size="368640" crc="27f29554" sha1="150436b12138ef74b154b5080658ed97a7849cb0" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop08" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk08.img" size="368640" crc="19549090" sha1="6c16e114571422ce71c8ad8ef9f07c518724b506" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop09" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk09.img" size="368640" crc="29cf72df" sha1="a019ddbb81baa4afbed94cea10f8cb63f64b1937" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop10" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk10.img" size="368640" crc="385d1f10" sha1="0850e25d4d418822cccb1c6aefd3131bffe814ff" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop11" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk11.img" size="368640" crc="cee1c377" sha1="f9eea75e284c59f71f9adad6fa4da3287c451fec" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop12" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk12.img" size="368640" crc="7aa5fe5f" sha1="95238693de43a1f6a8062a0b09d920f6c39ea18b" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop13" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk13.img" size="368640" crc="159151e7" sha1="71082a91f55aebe8d0efa21cb8afedc3482131e9" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop14" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk14.img" size="368640" crc="6df1d631" sha1="ba39fba55d21da98c294df456980724bbb83cc7a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop15" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk15.img" size="368640" crc="710bc39f" sha1="985a1ff252c17fe91aba5f40994dda853389c5d1" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop16" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="368640">
|
||||
<rom name="borland_paradox_3.01_German_disk16.img" size="368640" crc="8941eb6a" sha1="ebe7bad7a92505664ec3a61aad4065dd6e72ca7a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="bpdx40g">
|
||||
|
@ -10,13 +10,13 @@
|
||||
#define __HP_HIL_DEVICES_H__
|
||||
|
||||
|
||||
#define STR_KBD_HP_46020A "hp_46020a" // ITF Keyboard
|
||||
#define STR_KBD_HP_46021A "hp_46021a" // ITF Keyboard
|
||||
#define STR_KBD_HP_46030A "hp_46030a" // Vectra Keyboard
|
||||
#define STR_KBD_HP_INTEGRAL "hp_ipc_kbd" // Integral Keyboard
|
||||
#define STR_KBD_HP_46020A "hp_46020a" // ITF Keyboard
|
||||
#define STR_KBD_HP_46021A "hp_46021a" // ITF Keyboard
|
||||
#define STR_KBD_HP_46030A "hp_46030a" // Vectra Keyboard
|
||||
#define STR_KBD_HP_INTEGRAL "hp_ipc_kbd" // Integral Keyboard
|
||||
|
||||
#define STR_MOUSE_HP_46060A "hp_46060a" // 2-button mouse
|
||||
#define STR_MOUSE_HP_46060B "hp_46060b" // 3-button mouse
|
||||
#define STR_MOUSE_HP_46060A "hp_46060a" // 2-button mouse
|
||||
#define STR_MOUSE_HP_46060B "hp_46060b" // 3-button mouse
|
||||
|
||||
|
||||
SLOT_INTERFACE_EXTERN(hp_hil_devices);
|
||||
|
@ -288,7 +288,7 @@ void hle_device_base::device_timer(emu_timer &timer, device_timer_id id, int par
|
||||
void hle_device_base::hil_write(uint16_t data)
|
||||
{
|
||||
int frames = 0;
|
||||
// printf("rx from mlc %04X (%s %02X)\n", data, BIT(data, 11) ? "command" : "data", data & 255);
|
||||
// printf("rx from mlc %04X (%s %02X)\n", data, BIT(data, 11) ? "command" : "data", data & 255);
|
||||
|
||||
if (BIT(data, 11)) switch (data & 255)
|
||||
{
|
||||
@ -314,7 +314,7 @@ void hle_device_base::hil_write(uint16_t data)
|
||||
case HPHIL_POL:
|
||||
if (!m_fifo.empty())
|
||||
{
|
||||
m_hp_hil_mlc->hil_write(m_device_id16 | 0x40); // Keycode Set 1, no coordinate data
|
||||
m_hp_hil_mlc->hil_write(m_device_id16 | 0x40); // Keycode Set 1, no coordinate data
|
||||
frames = 1;
|
||||
while (!m_fifo.empty())
|
||||
{
|
||||
@ -348,18 +348,18 @@ void hle_device_base::hil_write(uint16_t data)
|
||||
|
||||
if (!m_passthru)
|
||||
m_hp_hil_mlc->hil_write(data);
|
||||
// else
|
||||
// m_next->hil_write(data);
|
||||
// else
|
||||
// m_next->hil_write(data);
|
||||
}
|
||||
|
||||
void hle_device_base::transmit_byte(uint8_t byte)
|
||||
{
|
||||
if (!m_fifo.full()) {
|
||||
// printf("queuing %02X\n", byte);
|
||||
// printf("queuing %02X\n", byte);
|
||||
m_fifo.enqueue(byte);
|
||||
}
|
||||
// else
|
||||
// printf("queuing fail (fifo full)\n");
|
||||
// else
|
||||
// printf("queuing fail (fifo full)\n");
|
||||
}
|
||||
|
||||
/*--------------------------------------------------
|
||||
|
@ -119,7 +119,7 @@ WRITE8_MEMBER(hp_hil_mlc_device::write)
|
||||
{
|
||||
case 0:
|
||||
DBG_LOG(1,"Transmit", ("%scommand 0x%02x to device %d\n", !m_loop?"loopback ":"", data, m_w1 & 7));
|
||||
if (m_loop & 2) // no devices on 2nd link loop
|
||||
if (m_loop & 2) // no devices on 2nd link loop
|
||||
return;
|
||||
if (m_loop == 0)
|
||||
{
|
||||
@ -160,7 +160,7 @@ WRITE8_MEMBER(hp_hil_mlc_device::write)
|
||||
m_w3 = data;
|
||||
break;
|
||||
|
||||
case 32: // loopback switch: bit 0 = loop0, bit 1 = loop1
|
||||
case 32: // loopback switch: bit 0 = loop0, bit 1 = loop1
|
||||
m_loop = data;
|
||||
break;
|
||||
}
|
||||
|
@ -14,51 +14,51 @@
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
#define HPMLC_R1_OB 0x10
|
||||
#define HPMLC_R1_OB 0x10
|
||||
|
||||
#define HPMLC_W1_C 0x0800
|
||||
#define HPMLC_W1_C 0x0800
|
||||
|
||||
#define HPMLC_R2_PERR 0x01
|
||||
#define HPMLC_R2_FERR 0x02
|
||||
#define HPMLC_R2_FOF 0x04
|
||||
#define HPMLC_R2_PERR 0x01
|
||||
#define HPMLC_R2_FERR 0x02
|
||||
#define HPMLC_R2_FOF 0x04
|
||||
|
||||
#define HPMLC_W2_TEST 0x01
|
||||
#define HPMLC_W2_IPF 0x04
|
||||
#define HPMLC_W2_TEST 0x01
|
||||
#define HPMLC_W2_IPF 0x04
|
||||
|
||||
#define HPMLC_R3_INT 0x01
|
||||
#define HPMLC_R3_NMI 0x02
|
||||
#define HPMLC_R3_LERR 0x04
|
||||
#define HPMLC_R3_INT 0x01
|
||||
#define HPMLC_R3_NMI 0x02
|
||||
#define HPMLC_R3_LERR 0x04
|
||||
|
||||
#define HPMLC_W3_APE 0x02
|
||||
#define HPMLC_W3_APE 0x02
|
||||
|
||||
// commands
|
||||
#define HPHIL_IFC 0x00 // Interface Clear
|
||||
#define HPHIL_EPT 0x01 // Enter Pass-Thru Mode
|
||||
#define HPHIL_ELB 0x02 // Enter Loop-Back Mode
|
||||
#define HPHIL_IDD 0x03 // Identify and Describe
|
||||
#define HPHIL_DSR 0x04 // Device Soft Reset
|
||||
#define HPHIL_PST 0x05 // Perform Self Test
|
||||
#define HPHIL_RRG 0x06 // Read Register
|
||||
#define HPHIL_WRG 0x07 // Write Register
|
||||
#define HPHIL_ACF 0x08 // Auto Configure [08..0f]
|
||||
#define HPHIL_POL 0x10 // Poll [10..1f]
|
||||
#define HPHIL_RPL 0x20 // RePoll [20..2f]
|
||||
#define HPHIL_RNM 0x30 // Report Name
|
||||
#define HPHIL_RST 0x31 // Report Status
|
||||
#define HPHIL_EXD 0x32 // Extended Describe
|
||||
#define HPHIL_RSC 0x33 // Report Security Code
|
||||
#define HPHIL_DKA 0x3D // Disable Keyswitch AutoRepeat
|
||||
#define HPHIL_EK1 0x3E // Enable Keyswitch AutoRepeat 30cps
|
||||
#define HPHIL_EK2 0x3F // Enable Keyswitch AutoRepeat 60cps
|
||||
#define HPHIL_PR1 0x40 // Prompt 1..7 [40..46]
|
||||
#define HPHIL_PRM 0x47 // Prompt (General Purpose)
|
||||
#define HPHIL_AK1 0x48 // Acknowledge 1..7 [40..46]
|
||||
#define HPHIL_ACK 0x4F // Acknowledge (General Purpose)
|
||||
#define HPHIL_RIO 0xFA // Register I/O Error
|
||||
#define HPHIL_SHR 0xFB // System Hard Reset
|
||||
#define HPHIL_TER 0xFC // Transmission Error
|
||||
#define HPHIL_CAE 0xFD // Configuration Address Error
|
||||
#define HPHIL_DHR 0xFE // Device Hard Reset
|
||||
#define HPHIL_IFC 0x00 // Interface Clear
|
||||
#define HPHIL_EPT 0x01 // Enter Pass-Thru Mode
|
||||
#define HPHIL_ELB 0x02 // Enter Loop-Back Mode
|
||||
#define HPHIL_IDD 0x03 // Identify and Describe
|
||||
#define HPHIL_DSR 0x04 // Device Soft Reset
|
||||
#define HPHIL_PST 0x05 // Perform Self Test
|
||||
#define HPHIL_RRG 0x06 // Read Register
|
||||
#define HPHIL_WRG 0x07 // Write Register
|
||||
#define HPHIL_ACF 0x08 // Auto Configure [08..0f]
|
||||
#define HPHIL_POL 0x10 // Poll [10..1f]
|
||||
#define HPHIL_RPL 0x20 // RePoll [20..2f]
|
||||
#define HPHIL_RNM 0x30 // Report Name
|
||||
#define HPHIL_RST 0x31 // Report Status
|
||||
#define HPHIL_EXD 0x32 // Extended Describe
|
||||
#define HPHIL_RSC 0x33 // Report Security Code
|
||||
#define HPHIL_DKA 0x3D // Disable Keyswitch AutoRepeat
|
||||
#define HPHIL_EK1 0x3E // Enable Keyswitch AutoRepeat 30cps
|
||||
#define HPHIL_EK2 0x3F // Enable Keyswitch AutoRepeat 60cps
|
||||
#define HPHIL_PR1 0x40 // Prompt 1..7 [40..46]
|
||||
#define HPHIL_PRM 0x47 // Prompt (General Purpose)
|
||||
#define HPHIL_AK1 0x48 // Acknowledge 1..7 [40..46]
|
||||
#define HPHIL_ACK 0x4F // Acknowledge (General Purpose)
|
||||
#define HPHIL_RIO 0xFA // Register I/O Error
|
||||
#define HPHIL_SHR 0xFB // System Hard Reset
|
||||
#define HPHIL_TER 0xFC // Transmission Error
|
||||
#define HPHIL_CAE 0xFD // Configuration Address Error
|
||||
#define HPHIL_DHR 0xFE // Device Hard Reset
|
||||
|
||||
/*
|
||||
* init sequnce (p. 4-13)
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Electronika MC 1502 FDC device
|
||||
Electronika MC 1502 FDC device
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Electronika MC 1502 FDC device
|
||||
Electronika MC 1502 FDC device
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
MC-1502 ROM cartridge device
|
||||
MC-1502 ROM cartridge device
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
MC-1502 ROM cartridge device
|
||||
MC-1502 ROM cartridge device
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Poisk-1 FDC device (model B504)
|
||||
Poisk-1 FDC device (model B504)
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Poisk-1 FDC device (model B504)
|
||||
Poisk-1 FDC device (model B504)
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Poisk-1 HDC device (model B942)
|
||||
Poisk-1 HDC device (model B942)
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Poisk-1 HDC device (model B942)
|
||||
Poisk-1 HDC device (model B942)
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Poisk-1 ROM cartridge device
|
||||
Poisk-1 ROM cartridge device
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Poisk-1 ROM cartridge device
|
||||
Poisk-1 ROM cartridge device
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Poisk-1 sound card. DAC, ADC, MIDI in/out and 6 music channels.
|
||||
Poisk-1 sound card. DAC, ADC, MIDI in/out and 6 music channels.
|
||||
|
||||
Memory-mapped, uses IRQ3 and IRQ7, no DMA.
|
||||
Memory-mapped, uses IRQ3 and IRQ7, no DMA.
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
@ -141,7 +141,7 @@ READ8_MEMBER(p1_sound_device::adc_r)
|
||||
|
||||
WRITE8_MEMBER(p1_sound_device::dac_w)
|
||||
{
|
||||
// logerror("DAC write: %02x <- %02x\n", offset>>1, data);
|
||||
// logerror("DAC write: %02x <- %02x\n", offset>>1, data);
|
||||
m_dac_data[offset >> 1] = data;
|
||||
m_isa->irq7_w(CLEAR_LINE);
|
||||
}
|
||||
|
@ -2,10 +2,10 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/**********************************************************************
|
||||
|
||||
Poisk-1 sound card
|
||||
Poisk-1 sound card
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -840,68 +840,68 @@ void mips3_device::static_generate_memory_accessor(int mode, int size, int iswri
|
||||
UML_LABEL(block, addrok); // addrok:
|
||||
}
|
||||
|
||||
/* TX4925 on-board peripherals pass-through */
|
||||
if (m_flavor == MIPS3_TYPE_TX4925)
|
||||
{
|
||||
int addrok;
|
||||
UML_AND(block, I3, I0, 0xffff0000); // and i3, i0, 0xffff0000
|
||||
UML_CMP(block, I3, 0xff1f0000); // cmp i3, 0xff1f0000
|
||||
UML_JMPc(block, COND_NZ, addrok = label++);
|
||||
/* TX4925 on-board peripherals pass-through */
|
||||
if (m_flavor == MIPS3_TYPE_TX4925)
|
||||
{
|
||||
int addrok;
|
||||
UML_AND(block, I3, I0, 0xffff0000); // and i3, i0, 0xffff0000
|
||||
UML_CMP(block, I3, 0xff1f0000); // cmp i3, 0xff1f0000
|
||||
UML_JMPc(block, COND_NZ, addrok = label++);
|
||||
|
||||
switch (size)
|
||||
{
|
||||
case 1:
|
||||
if (iswrite)
|
||||
UML_WRITE(block, I0, I1, SIZE_BYTE, SPACE_PROGRAM); // write i0,i1,program_byte
|
||||
else
|
||||
UML_READ(block, I0, I0, SIZE_BYTE, SPACE_PROGRAM); // read i0,i0,program_byte
|
||||
break;
|
||||
switch (size)
|
||||
{
|
||||
case 1:
|
||||
if (iswrite)
|
||||
UML_WRITE(block, I0, I1, SIZE_BYTE, SPACE_PROGRAM); // write i0,i1,program_byte
|
||||
else
|
||||
UML_READ(block, I0, I0, SIZE_BYTE, SPACE_PROGRAM); // read i0,i0,program_byte
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (iswrite)
|
||||
UML_WRITE(block, I0, I1, SIZE_WORD, SPACE_PROGRAM); // write i0,i1,program_word
|
||||
else
|
||||
UML_READ(block, I0, I0, SIZE_WORD, SPACE_PROGRAM); // read i0,i0,program_word
|
||||
break;
|
||||
case 2:
|
||||
if (iswrite)
|
||||
UML_WRITE(block, I0, I1, SIZE_WORD, SPACE_PROGRAM); // write i0,i1,program_word
|
||||
else
|
||||
UML_READ(block, I0, I0, SIZE_WORD, SPACE_PROGRAM); // read i0,i0,program_word
|
||||
break;
|
||||
|
||||
case 4:
|
||||
if (iswrite)
|
||||
{
|
||||
if (!ismasked)
|
||||
UML_WRITE(block, I0, I1, SIZE_DWORD, SPACE_PROGRAM); // write i0,i1,program_dword
|
||||
else
|
||||
UML_WRITEM(block, I0, I1, I2, SIZE_DWORD, SPACE_PROGRAM); // writem i0,i1,i2,program_dword
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!ismasked)
|
||||
UML_READ(block, I0, I0, SIZE_DWORD, SPACE_PROGRAM); // read i0,i0,program_dword
|
||||
else
|
||||
UML_READM(block, I0, I0, I2, SIZE_DWORD, SPACE_PROGRAM); // readm i0,i0,i2,program_dword
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (iswrite)
|
||||
{
|
||||
if (!ismasked)
|
||||
UML_WRITE(block, I0, I1, SIZE_DWORD, SPACE_PROGRAM); // write i0,i1,program_dword
|
||||
else
|
||||
UML_WRITEM(block, I0, I1, I2, SIZE_DWORD, SPACE_PROGRAM); // writem i0,i1,i2,program_dword
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!ismasked)
|
||||
UML_READ(block, I0, I0, SIZE_DWORD, SPACE_PROGRAM); // read i0,i0,program_dword
|
||||
else
|
||||
UML_READM(block, I0, I0, I2, SIZE_DWORD, SPACE_PROGRAM); // readm i0,i0,i2,program_dword
|
||||
}
|
||||
break;
|
||||
|
||||
case 8:
|
||||
if (iswrite)
|
||||
{
|
||||
if (!ismasked)
|
||||
UML_DWRITE(block, I0, I1, SIZE_QWORD, SPACE_PROGRAM); // dwrite i0,i1,program_qword
|
||||
else
|
||||
UML_DWRITEM(block, I0, I1, I2, SIZE_QWORD, SPACE_PROGRAM); // dwritem i0,i1,i2,program_qword
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!ismasked)
|
||||
UML_DREAD(block, I0, I0, SIZE_QWORD, SPACE_PROGRAM); // dread i0,i0,program_qword
|
||||
else
|
||||
UML_DREADM(block, I0, I0, I2, SIZE_QWORD, SPACE_PROGRAM); // dreadm i0,i0,i2,program_qword
|
||||
}
|
||||
break;
|
||||
}
|
||||
UML_RET(block);
|
||||
case 8:
|
||||
if (iswrite)
|
||||
{
|
||||
if (!ismasked)
|
||||
UML_DWRITE(block, I0, I1, SIZE_QWORD, SPACE_PROGRAM); // dwrite i0,i1,program_qword
|
||||
else
|
||||
UML_DWRITEM(block, I0, I1, I2, SIZE_QWORD, SPACE_PROGRAM); // dwritem i0,i1,i2,program_qword
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!ismasked)
|
||||
UML_DREAD(block, I0, I0, SIZE_QWORD, SPACE_PROGRAM); // dread i0,i0,program_qword
|
||||
else
|
||||
UML_DREADM(block, I0, I0, I2, SIZE_QWORD, SPACE_PROGRAM); // dreadm i0,i0,i2,program_qword
|
||||
}
|
||||
break;
|
||||
}
|
||||
UML_RET(block);
|
||||
|
||||
UML_LABEL(block, addrok);
|
||||
}
|
||||
UML_LABEL(block, addrok);
|
||||
}
|
||||
|
||||
/* general case: assume paging and perform a translation */
|
||||
UML_SHR(block, I3, I0, 12); // shr i3,i0,12
|
||||
@ -1165,8 +1165,8 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state *
|
||||
UML_LOAD(block, I0, base, 0, SIZE_DWORD, SCALE_x4); // load i0,base,0,dword
|
||||
|
||||
if (seqhead->delay.first() != nullptr
|
||||
&& !(seqhead->delay.first()->flags & OPFLAG_VIRTUAL_NOOP)
|
||||
&& seqhead->physpc != seqhead->delay.first()->physpc)
|
||||
&& !(seqhead->delay.first()->flags & OPFLAG_VIRTUAL_NOOP)
|
||||
&& seqhead->physpc != seqhead->delay.first()->physpc)
|
||||
{
|
||||
base = m_direct->read_ptr(seqhead->delay.first()->physpc);
|
||||
assert(base != nullptr);
|
||||
@ -1208,8 +1208,8 @@ void mips3_device::generate_checksum_block(drcuml_block *block, compiler_state *
|
||||
sum += curdesc->opptr.l[0];
|
||||
|
||||
if (curdesc->delay.first() != nullptr
|
||||
&& !(curdesc->delay.first()->flags & OPFLAG_VIRTUAL_NOOP)
|
||||
&& (curdesc == seqlast || (curdesc->next() != nullptr && curdesc->next()->physpc != curdesc->delay.first()->physpc)))
|
||||
&& !(curdesc->delay.first()->flags & OPFLAG_VIRTUAL_NOOP)
|
||||
&& (curdesc == seqlast || (curdesc->next() != nullptr && curdesc->next()->physpc != curdesc->delay.first()->physpc)))
|
||||
{
|
||||
base = m_direct->read_ptr(curdesc->delay.first()->physpc);
|
||||
assert(base != nullptr);
|
||||
|
@ -1130,17 +1130,17 @@ bool pia6821_device::cb2_output_z()
|
||||
// control byte wrappers
|
||||
//-------------------------------------------------
|
||||
|
||||
bool pia6821_device::irq1_enabled(uint8_t c) { return bool((c >> 0) & 0x01); }
|
||||
bool pia6821_device::c1_low_to_high(uint8_t c) { return bool((c >> 1) & 0x01); }
|
||||
bool pia6821_device::c1_high_to_low(uint8_t c) { return !bool((c >> 1) & 0x01); }
|
||||
bool pia6821_device::output_selected(uint8_t c) { return bool((c >> 2) & 0x01); }
|
||||
bool pia6821_device::irq2_enabled(uint8_t c) { return bool((c >> 3) & 0x01); }
|
||||
bool pia6821_device::strobe_e_reset(uint8_t c) { return bool((c >> 3) & 0x01); }
|
||||
bool pia6821_device::strobe_c1_reset(uint8_t c) { return !bool((c >> 3) & 0x01); }
|
||||
bool pia6821_device::c2_set(uint8_t c) { return bool((c >> 3) & 0x01); }
|
||||
bool pia6821_device::c2_low_to_high(uint8_t c) { return bool((c >> 4) & 0x01); }
|
||||
bool pia6821_device::c2_high_to_low(uint8_t c) { return !bool((c >> 4) & 0x01); }
|
||||
bool pia6821_device::c2_set_mode(uint8_t c) { return bool((c >> 4) & 0x01); }
|
||||
bool pia6821_device::c2_strobe_mode(uint8_t c) { return !bool((c >> 4) & 0x01); }
|
||||
bool pia6821_device::c2_output(uint8_t c) { return bool((c >> 5) & 0x01); }
|
||||
bool pia6821_device::c2_input(uint8_t c) { return !bool((c >> 5) & 0x01); }
|
||||
bool pia6821_device::irq1_enabled(uint8_t c) { return bool((c >> 0) & 0x01); }
|
||||
bool pia6821_device::c1_low_to_high(uint8_t c) { return bool((c >> 1) & 0x01); }
|
||||
bool pia6821_device::c1_high_to_low(uint8_t c) { return !bool((c >> 1) & 0x01); }
|
||||
bool pia6821_device::output_selected(uint8_t c) { return bool((c >> 2) & 0x01); }
|
||||
bool pia6821_device::irq2_enabled(uint8_t c) { return bool((c >> 3) & 0x01); }
|
||||
bool pia6821_device::strobe_e_reset(uint8_t c) { return bool((c >> 3) & 0x01); }
|
||||
bool pia6821_device::strobe_c1_reset(uint8_t c) { return !bool((c >> 3) & 0x01); }
|
||||
bool pia6821_device::c2_set(uint8_t c) { return bool((c >> 3) & 0x01); }
|
||||
bool pia6821_device::c2_low_to_high(uint8_t c) { return bool((c >> 4) & 0x01); }
|
||||
bool pia6821_device::c2_high_to_low(uint8_t c) { return !bool((c >> 4) & 0x01); }
|
||||
bool pia6821_device::c2_set_mode(uint8_t c) { return bool((c >> 4) & 0x01); }
|
||||
bool pia6821_device::c2_strobe_mode(uint8_t c) { return !bool((c >> 4) & 0x01); }
|
||||
bool pia6821_device::c2_output(uint8_t c) { return bool((c >> 5) & 0x01); }
|
||||
bool pia6821_device::c2_input(uint8_t c) { return !bool((c >> 5) & 0x01); }
|
||||
|
@ -2,12 +2,12 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/***************************************************************************
|
||||
|
||||
15IE-00-013 Terminal
|
||||
15IE-00-013 Terminal
|
||||
|
||||
A serial (RS232 or current loop) green-screen terminal, mostly VT52
|
||||
compatible (no Hold Screen mode and no graphics character set).
|
||||
A serial (RS232 or current loop) green-screen terminal, mostly VT52
|
||||
compatible (no Hold Screen mode and no graphics character set).
|
||||
|
||||
Alternate character set (selected by SO/SI chars) is Cyrillic.
|
||||
Alternate character set (selected by SO/SI chars) is Cyrillic.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
@ -416,32 +416,32 @@ void ie15_device::device_reset()
|
||||
}
|
||||
|
||||
/*
|
||||
Usable raster is 800 x 275 pixels (80 x 25 characters). 24 lines are
|
||||
available to the user and 25th (topmost) line is the status line.
|
||||
Status line, if enabled, displays current serial port speed, 16 setup
|
||||
bits, and clock. There is no NVRAM, so setup bits are always 0 after
|
||||
reset and clock starts counting at 0 XXX.
|
||||
Usable raster is 800 x 275 pixels (80 x 25 characters). 24 lines are
|
||||
available to the user and 25th (topmost) line is the status line.
|
||||
Status line, if enabled, displays current serial port speed, 16 setup
|
||||
bits, and clock. There is no NVRAM, so setup bits are always 0 after
|
||||
reset and clock starts counting at 0 XXX.
|
||||
|
||||
No character attributes are available, but in 'display controls' mode
|
||||
control characters stored in memory are shown as blinking chars.
|
||||
No character attributes are available, but in 'display controls' mode
|
||||
control characters stored in memory are shown as blinking chars.
|
||||
|
||||
Character cell is 10 x 11; character generator provides 7 x 8 of that.
|
||||
3 extra horizontal pixels are always blank. Blinking cursor may be
|
||||
displayed on 3 extra scan lines.
|
||||
Character cell is 10 x 11; character generator provides 7 x 8 of that.
|
||||
3 extra horizontal pixels are always blank. Blinking cursor may be
|
||||
displayed on 3 extra scan lines.
|
||||
|
||||
On each scan line, video board draws 80 characters from any location
|
||||
in video memory; this is used by firmware to provide instant scroll
|
||||
and cursor, which is a character with code 0x7F stored in off-screen
|
||||
memory.
|
||||
On each scan line, video board draws 80 characters from any location
|
||||
in video memory; this is used by firmware to provide instant scroll
|
||||
and cursor, which is a character with code 0x7F stored in off-screen
|
||||
memory.
|
||||
|
||||
Video board output is controlled by
|
||||
- control flag 0 "disable video": 0 == disable
|
||||
- control flag 1 "cursor": 0 == if this scan line is one of extra 3,
|
||||
enable video every 5 frames.
|
||||
- control flag 3 "status line": 0 == current scan line is part of status line
|
||||
- keyboard mode 'RED' ('display controls'): if character code is
|
||||
less than 0x20 and RED is set, enable video every 5 frames; if RED is
|
||||
unset, disable video.
|
||||
Video board output is controlled by
|
||||
- control flag 0 "disable video": 0 == disable
|
||||
- control flag 1 "cursor": 0 == if this scan line is one of extra 3,
|
||||
enable video every 5 frames.
|
||||
- control flag 3 "status line": 0 == current scan line is part of status line
|
||||
- keyboard mode 'RED' ('display controls'): if character code is
|
||||
less than 0x20 and RED is set, enable video every 5 frames; if RED is
|
||||
unset, disable video.
|
||||
*/
|
||||
|
||||
void ie15_device::draw_scanline(uint32_t *p, uint16_t offset, uint8_t scanline)
|
||||
@ -506,9 +506,9 @@ void ie15_device::update_leds()
|
||||
}
|
||||
|
||||
/*
|
||||
VBlank is active for 3 topmost on-screen rows and 1 at the bottom; however, control flag 3
|
||||
VBlank is active for 3 topmost on-screen rows and 1 at the bottom; however, control flag 3
|
||||
overrides VBlank,
|
||||
allowing status line to be switched on and off.
|
||||
allowing status line to be switched on and off.
|
||||
*/
|
||||
void ie15_device::scanline_callback()
|
||||
{
|
||||
|
@ -5,27 +5,27 @@
|
||||
MM5740 Keyboard Encoder emulation
|
||||
|
||||
**********************************************************************
|
||||
_____ _____
|
||||
B3 1 |* \_/ | 40 B4
|
||||
Vll 2 | | 39 B9
|
||||
Clock 3 | | 38 B2
|
||||
X9 4 | | 37 B1
|
||||
X8 5 | | 36 B8
|
||||
X7 6 | | 35 B7
|
||||
X6 7 | | 34 B6
|
||||
X5 8 | | 33 B5
|
||||
X4 9 | | 32 Vss
|
||||
X3 10 | MM5740 | 31 Y9
|
||||
X2 11 | | 30 Y8
|
||||
X1 12 | | 29 Y7
|
||||
_____ _____
|
||||
B3 1 |* \_/ | 40 B4
|
||||
Vll 2 | | 39 B9
|
||||
Clock 3 | | 38 B2
|
||||
X9 4 | | 37 B1
|
||||
X8 5 | | 36 B8
|
||||
X7 6 | | 35 B7
|
||||
X6 7 | | 34 B6
|
||||
X5 8 | | 33 B5
|
||||
X4 9 | | 32 Vss
|
||||
X3 10 | MM5740 | 31 Y9
|
||||
X2 11 | | 30 Y8
|
||||
X1 12 | | 29 Y7
|
||||
Data Strobe Output 13 | | 28 Y6
|
||||
Data Strobe Control 14 | | 27 Y5
|
||||
Output Enable 15 | | 26 Y4
|
||||
Repeat 16 | | 25 Y3
|
||||
Output Enable 15 | | 26 Y4
|
||||
Repeat 16 | | 25 Y3
|
||||
Key Bounce Mask 17 | | 24 Y2
|
||||
Vgg 18 | | 23 Y1
|
||||
Control 19 | | 22 Y0
|
||||
Shift Lock I/O 20 |_____________| 21 Shift
|
||||
Vgg 18 | | 23 Y1
|
||||
Control 19 | | 22 Y0
|
||||
Shift Lock I/O 20 |_____________| 21 Shift
|
||||
|
||||
Name Pin No. Function
|
||||
----------------------------------------------------------------------
|
||||
@ -33,7 +33,7 @@ Name Pin No. Function
|
||||
X1-X9 4-12 Output - Drives the key switch matrix.
|
||||
|
||||
Y1-Y10 22-31 Inputs - connect to the X drive lines with
|
||||
the key switch matrix.
|
||||
the key switch matrix.
|
||||
|
||||
B1-B9 1,33-40 Tri-stated data outputs.
|
||||
|
||||
@ -44,10 +44,10 @@ Data Strobe Control 14 Input to control data strobe output pulse width
|
||||
Output Enable 15 Input to control the chip's TRI-STATE output
|
||||
|
||||
Repeat 16 Each cycle of this signal will issue
|
||||
a new data strobe for the pressed key.
|
||||
a new data strobe for the pressed key.
|
||||
|
||||
Key-Bounce Mask 17 Use capacitor on this chip to provide
|
||||
key debouncing
|
||||
key debouncing
|
||||
|
||||
Shift 21 Shift key pressed
|
||||
|
||||
@ -67,10 +67,10 @@ Vgg 18 -12V
|
||||
**********************************************************************/
|
||||
|
||||
/* TODO:
|
||||
Support Key-bounce mask
|
||||
Support Repeat function
|
||||
Support shift lock
|
||||
Support additional internal ROMs
|
||||
Support Key-bounce mask
|
||||
Support Repeat function
|
||||
Support shift lock
|
||||
Support additional internal ROMs
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
@ -147,7 +147,7 @@ z80sio_device::z80sio_device(const machine_config &mconfig, device_type type, co
|
||||
m_out_txdrqa_cb(*this),
|
||||
m_out_rxdrqb_cb(*this),
|
||||
m_out_txdrqb_cb(*this),
|
||||
m_variant(variant),
|
||||
m_variant(variant),
|
||||
m_cputag("maincpu")
|
||||
{
|
||||
for (auto & elem : m_int_state)
|
||||
@ -273,10 +273,10 @@ int z80sio_device::z80daisy_irq_state()
|
||||
//-------------------------------------------------
|
||||
int z80sio_device::z80daisy_irq_ack()
|
||||
{
|
||||
// default irq vector is -1 for 68000 but 0 for z80 for example...
|
||||
int ret = owner()->subdevice<cpu_device>(m_cputag)->default_irq_vector();
|
||||
// default irq vector is -1 for 68000 but 0 for z80 for example...
|
||||
int ret = owner()->subdevice<cpu_device>(m_cputag)->default_irq_vector();
|
||||
|
||||
LOGINT("%s %s \n",tag(), FUNCNAME);
|
||||
LOGINT("%s %s \n",tag(), FUNCNAME);
|
||||
// loop over all interrupt sources
|
||||
for (auto & elem : m_int_state)
|
||||
{
|
||||
@ -286,16 +286,16 @@ int z80sio_device::z80daisy_irq_ack()
|
||||
elem = Z80_DAISY_IEO; // Set IUS bit (called IEO in z80 daisy lingo)
|
||||
m_chanA->m_rr0 &= ~z80sio_channel::RR0_INTERRUPT_PENDING;
|
||||
LOGINT(" - Found an INT request, ");
|
||||
LOGINT("returning RR2: %02x\n", m_chanB->m_rr2 );
|
||||
LOGINT("returning RR2: %02x\n", m_chanB->m_rr2 );
|
||||
check_interrupts();
|
||||
return m_chanB->m_rr2;
|
||||
return m_chanB->m_rr2;
|
||||
}
|
||||
}
|
||||
ret = m_chanB->m_rr2;
|
||||
ret = m_chanB->m_rr2;
|
||||
LOGINT(" - failed to find an interrupt to ack, returning default IRQ vector: %02x\n", ret );
|
||||
logerror("z80sio_irq_ack: failed to find an interrupt to ack!\n");
|
||||
|
||||
return ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@ -307,10 +307,10 @@ void z80sio_device::z80daisy_irq_reti()
|
||||
LOGINT("%s %s \n",tag(), FUNCNAME);
|
||||
|
||||
if((m_variant == TYPE_I8274) || (m_variant == TYPE_UPD7201))
|
||||
{
|
||||
LOGINT(" - I8274 and UPD7201 lacks RETI detection, no action taken\n");
|
||||
return;
|
||||
}
|
||||
{
|
||||
LOGINT(" - I8274 and UPD7201 lacks RETI detection, no action taken\n");
|
||||
return;
|
||||
}
|
||||
|
||||
// loop over all interrupt sources
|
||||
for (auto & elem : m_int_state)
|
||||
@ -356,42 +356,42 @@ void z80sio_device::reset_interrupts()
|
||||
|
||||
int z80sio_device::get_interrupt_prio(int index, int type)
|
||||
{
|
||||
int prio_level = -1;
|
||||
int priority = -1;
|
||||
int prio_level = -1;
|
||||
int priority = -1;
|
||||
|
||||
if ((m_variant == TYPE_I8274) || (m_variant == TYPE_UPD7201))
|
||||
if ((m_variant == TYPE_I8274) || (m_variant == TYPE_UPD7201))
|
||||
{
|
||||
/* These CPU variants use Bit 2 of WR2 of Channnel A to determine the priority Hi to Lo:
|
||||
0: RxA TxA RxB TxB ExtA ExtB
|
||||
1: RxA RxB TxA TxB ExtA ExtB */
|
||||
switch(type)
|
||||
{
|
||||
case z80sio_channel::INT_RECEIVE:
|
||||
case z80sio_channel::INT_SPECIAL: prio_level = z80sio_channel::INT_RCV_SPC_PRI_LVL; break; // 0
|
||||
case z80sio_channel::INT_TRANSMIT: prio_level = z80sio_channel::INT_TRANSMIT_PRI_LVL; break; // 1
|
||||
case z80sio_channel::INT_EXTERNAL: prio_level = z80sio_channel::INT_EXTERNAL_PRI_LVL; break; // 2
|
||||
default:
|
||||
logerror("Bad interrupt source being prioritized!");
|
||||
return -1;
|
||||
}
|
||||
// Assume that the PRIORITY bit is set
|
||||
priority = (prio_level * 2) + index;
|
||||
/* These CPU variants use Bit 2 of WR2 of Channnel A to determine the priority Hi to Lo:
|
||||
0: RxA TxA RxB TxB ExtA ExtB
|
||||
1: RxA RxB TxA TxB ExtA ExtB */
|
||||
switch(type)
|
||||
{
|
||||
case z80sio_channel::INT_RECEIVE:
|
||||
case z80sio_channel::INT_SPECIAL: prio_level = z80sio_channel::INT_RCV_SPC_PRI_LVL; break; // 0
|
||||
case z80sio_channel::INT_TRANSMIT: prio_level = z80sio_channel::INT_TRANSMIT_PRI_LVL; break; // 1
|
||||
case z80sio_channel::INT_EXTERNAL: prio_level = z80sio_channel::INT_EXTERNAL_PRI_LVL; break; // 2
|
||||
default:
|
||||
logerror("Bad interrupt source being prioritized!");
|
||||
return -1;
|
||||
}
|
||||
// Assume that the PRIORITY bit is set
|
||||
priority = (prio_level * 2) + index;
|
||||
|
||||
// Check if it actually was cleared
|
||||
// Check if it actually was cleared
|
||||
if ( (m_chanA->m_wr2 & z80sio_channel::WR2_PRIORITY) == 0)
|
||||
{
|
||||
// Adjust priority if needed, only affects TxA and RxB
|
||||
// Adjust priority if needed, only affects TxA and RxB
|
||||
if (index == CHANNEL_A && type == z80sio_channel::INT_TRANSMIT )
|
||||
priority--;
|
||||
priority--;
|
||||
else if (index == CHANNEL_B && type == z80sio_channel::INT_RECEIVE )
|
||||
priority++;
|
||||
priority++;
|
||||
}
|
||||
}
|
||||
else // Plain old z80sio
|
||||
{
|
||||
}
|
||||
else // Plain old z80sio
|
||||
{
|
||||
priority = (index << 2) | type;
|
||||
}
|
||||
return priority;
|
||||
}
|
||||
return priority;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -403,7 +403,7 @@ int z80sio_device::get_interrupt_prio(int index, int type)
|
||||
*/
|
||||
uint8_t z80sio_device::modify_vector(int index, int type)
|
||||
{
|
||||
uint8_t vector = m_chanB->m_wr2;
|
||||
uint8_t vector = m_chanB->m_wr2;
|
||||
if((m_variant == TYPE_I8274) || (m_variant == TYPE_UPD7201))
|
||||
{
|
||||
if (m_chanB->m_wr1 & z80sio_channel::WR1_STATUS_VECTOR)
|
||||
@ -427,7 +427,7 @@ uint8_t z80sio_device::modify_vector(int index, int type)
|
||||
vector = (m_chanB->m_wr2 & 0xf1) | (!index << 3) | (type << 1);
|
||||
}
|
||||
}
|
||||
return vector;
|
||||
return vector;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -436,11 +436,11 @@ uint8_t z80sio_device::modify_vector(int index, int type)
|
||||
void z80sio_device::trigger_interrupt(int index, int type)
|
||||
{
|
||||
uint8_t priority = get_interrupt_prio(index, type);
|
||||
uint8_t vector = modify_vector(index, type);
|
||||
uint8_t vector = modify_vector(index, type);
|
||||
|
||||
LOGINT("%s %s Chan:%c Type:%s\n", tag(), FUNCNAME, 'A' + index, std::array<char const *, 4>
|
||||
{{"INT_TRANSMIT", "INT_EXTERNAL", "INT_RECEIVE", "INT_SPECIAL"}}[type]);
|
||||
LOGINT(" - Priority:%02x Vector:%02x\n", priority, vector);
|
||||
{{"INT_TRANSMIT", "INT_EXTERNAL", "INT_RECEIVE", "INT_SPECIAL"}}[type]);
|
||||
LOGINT(" - Priority:%02x Vector:%02x\n", priority, vector);
|
||||
|
||||
// update vector register
|
||||
m_chanB->m_rr2 = vector;
|
||||
@ -464,9 +464,9 @@ int z80sio_device::m1_r()
|
||||
{
|
||||
LOGINT("%s %s \n",FUNCNAME, tag());
|
||||
if((m_variant == TYPE_I8274) || (m_variant == TYPE_UPD7201))
|
||||
return 0;
|
||||
else
|
||||
return z80daisy_irq_ack();
|
||||
return 0;
|
||||
else
|
||||
return z80daisy_irq_ack();
|
||||
}
|
||||
|
||||
|
||||
@ -916,36 +916,36 @@ uint8_t z80sio_channel::do_sioreg_rr2()
|
||||
// channel B only, channel A returns 0
|
||||
if (m_index == z80sio_device::CHANNEL_A) return 0;
|
||||
|
||||
LOGINT(" - Channel B so we might need to update the vector modification\n");
|
||||
LOGINT(" - Channel B so we might need to update the vector modification\n");
|
||||
// Assume the unmodified vector
|
||||
m_rr2 = m_uart->m_chanB->m_wr2;
|
||||
|
||||
if((m_variant == z80sio_device::TYPE_I8274) || (m_variant == z80sio_device::TYPE_UPD7201))
|
||||
{
|
||||
int i = 0;
|
||||
LOGINT(" - 8274 or 7201 requires special care\n");
|
||||
if((m_variant == z80sio_device::TYPE_I8274) || (m_variant == z80sio_device::TYPE_UPD7201))
|
||||
{
|
||||
int i = 0;
|
||||
LOGINT(" - 8274 or 7201 requires special care\n");
|
||||
|
||||
// loop over all interrupt sources
|
||||
for (auto & elem : m_uart->m_int_state)
|
||||
{
|
||||
// find the first channel with an interrupt requested
|
||||
if (elem & Z80_DAISY_INT)
|
||||
{
|
||||
LOGINT(" - Checking an INT source %d\n", i);
|
||||
m_rr2 = m_uart->modify_vector((m_uart->m_int_source[i] >> 8) & 1, m_uart->m_int_source[i] & 3);
|
||||
LOGINT(" - Found an INT request to ack while reading RR2\n");
|
||||
elem = Z80_DAISY_IEO; // Set IUS bit (called IEO in z80 daisy lingo)
|
||||
m_uart->check_interrupts();
|
||||
break;
|
||||
}
|
||||
// loop over all interrupt sources
|
||||
for (auto & elem : m_uart->m_int_state)
|
||||
{
|
||||
// find the first channel with an interrupt requested
|
||||
if (elem & Z80_DAISY_INT)
|
||||
{
|
||||
LOGINT(" - Checking an INT source %d\n", i);
|
||||
m_rr2 = m_uart->modify_vector((m_uart->m_int_source[i] >> 8) & 1, m_uart->m_int_source[i] & 3);
|
||||
LOGINT(" - Found an INT request to ack while reading RR2\n");
|
||||
elem = Z80_DAISY_IEO; // Set IUS bit (called IEO in z80 daisy lingo)
|
||||
m_uart->check_interrupts();
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
// If no pending interrupt were found set variable bits to ones.
|
||||
if (i >= 6)
|
||||
{
|
||||
m_rr2 |= 0x1F;
|
||||
m_uart->m_chanA->m_rr0 &= ~z80sio_channel::RR0_INTERRUPT_PENDING;
|
||||
}
|
||||
// If no pending interrupt were found set variable bits to ones.
|
||||
if (i >= 6)
|
||||
{
|
||||
m_rr2 |= 0x1F;
|
||||
m_uart->m_chanA->m_rr0 &= ~z80sio_channel::RR0_INTERRUPT_PENDING;
|
||||
}
|
||||
}
|
||||
return m_rr2;
|
||||
}
|
||||
@ -1031,8 +1031,8 @@ void z80sio_channel::do_sioreg_wr0(uint8_t data)
|
||||
if (m_sync) m_rr0 |= RR0_SYNC_HUNT;
|
||||
if (m_cts) m_rr0 |= RR0_CTS;
|
||||
|
||||
// Clear any pending External interrupt
|
||||
m_uart->m_int_state[m_index == z80sio_device::CHANNEL_A ? 4 : 5] = 0;
|
||||
// Clear any pending External interrupt
|
||||
m_uart->m_int_state[m_index == z80sio_device::CHANNEL_A ? 4 : 5] = 0;
|
||||
|
||||
LOGINT("%s %s Ch:%c : Reset External/Status Interrupt\n", FUNCNAME, tag(), 'A' + m_index);
|
||||
break;
|
||||
@ -1049,16 +1049,16 @@ void z80sio_channel::do_sioreg_wr0(uint8_t data)
|
||||
case WR0_RESET_TX_INT:
|
||||
// reset transmitter interrupt pending
|
||||
{
|
||||
uint8_t priority = 3; // Assume TxB
|
||||
// Check if it is TxA
|
||||
if (m_index == z80sio_device::CHANNEL_A)
|
||||
{
|
||||
// Check if priority bit is cleared
|
||||
priority = (m_uart->m_chanA->m_wr2 & z80sio_channel::WR2_PRIORITY) == 0 ? 1 : 2;
|
||||
}
|
||||
m_uart->m_int_state[priority] = 0;
|
||||
LOGINT("%s %s Ch:%c : Reset TX Interrupt, priority:%d\n", FUNCNAME, tag(), 'A' + m_index, priority);
|
||||
}
|
||||
uint8_t priority = 3; // Assume TxB
|
||||
// Check if it is TxA
|
||||
if (m_index == z80sio_device::CHANNEL_A)
|
||||
{
|
||||
// Check if priority bit is cleared
|
||||
priority = (m_uart->m_chanA->m_wr2 & z80sio_channel::WR2_PRIORITY) == 0 ? 1 : 2;
|
||||
}
|
||||
m_uart->m_int_state[priority] = 0;
|
||||
LOGINT("%s %s Ch:%c : Reset TX Interrupt, priority:%d\n", FUNCNAME, tag(), 'A' + m_index, priority);
|
||||
}
|
||||
m_uart->check_interrupts();
|
||||
LOGCMD("%s %s Ch:%c : Reset Transmitter Interrupt Pending\n", FUNCNAME, tag(), 'A' + m_index);
|
||||
break;
|
||||
@ -1069,23 +1069,23 @@ void z80sio_channel::do_sioreg_wr0(uint8_t data)
|
||||
break;
|
||||
case WR0_RETURN_FROM_INT:
|
||||
LOGINT("%s %s Ch:%c : Return from interrupt\n", FUNCNAME, tag(), 'A' + m_index);
|
||||
{
|
||||
int found = 0;
|
||||
// loop over all interrupt sources
|
||||
for (auto & elem : m_uart->m_int_state)
|
||||
{
|
||||
// find the first channel with an interrupt requested
|
||||
if (elem & (Z80_DAISY_IEO))
|
||||
{
|
||||
// clear the IEO state and update the IRQs
|
||||
elem &= ~(Z80_DAISY_IEO);
|
||||
m_uart->check_interrupts();
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LOGINT(" - %s\n", found == 0 ? "failed to find an interrupt to clear IEO on!" : "cleared IEO");
|
||||
}
|
||||
{
|
||||
int found = 0;
|
||||
// loop over all interrupt sources
|
||||
for (auto & elem : m_uart->m_int_state)
|
||||
{
|
||||
// find the first channel with an interrupt requested
|
||||
if (elem & (Z80_DAISY_IEO))
|
||||
{
|
||||
// clear the IEO state and update the IRQs
|
||||
elem &= ~(Z80_DAISY_IEO);
|
||||
m_uart->check_interrupts();
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LOGINT(" - %s\n", found == 0 ? "failed to find an interrupt to clear IEO on!" : "cleared IEO");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
LOG("Z80SIO \"%s\" Channel %c : Unsupported WR0 command %02x mask %02x\n", m_owner->tag(), 'A' + m_index, data, WR0_REGISTER_MASK);
|
||||
|
@ -193,11 +193,11 @@ public:
|
||||
int m_txc;
|
||||
|
||||
// Register state
|
||||
// read registers enum
|
||||
// read registers enum
|
||||
uint8_t m_rr0; // REG_RR0_STATUS
|
||||
uint8_t m_rr1; // REG_RR1_SPEC_RCV_COND
|
||||
uint8_t m_rr2; // REG_RR2_INTERRUPT_VECT
|
||||
// write registers enum
|
||||
// write registers enum
|
||||
uint8_t m_wr0; // REG_WR0_COMMAND_REGPT
|
||||
uint8_t m_wr1; // REG_WR1_INT_DMA_ENABLE
|
||||
uint8_t m_wr2; // REG_WR2_INT_VECTOR
|
||||
@ -220,9 +220,9 @@ protected:
|
||||
|
||||
enum
|
||||
{
|
||||
INT_RCV_SPC_PRI_LVL = 0,
|
||||
INT_TRANSMIT_PRI_LVL = 1,
|
||||
INT_EXTERNAL_PRI_LVL = 2
|
||||
INT_RCV_SPC_PRI_LVL = 0,
|
||||
INT_TRANSMIT_PRI_LVL = 1,
|
||||
INT_EXTERNAL_PRI_LVL = 2
|
||||
};
|
||||
|
||||
// Read registers
|
||||
@ -278,20 +278,20 @@ protected:
|
||||
|
||||
enum
|
||||
{
|
||||
WR0_REGISTER_MASK = 0x07,
|
||||
WR0_COMMAND_MASK = 0x38,
|
||||
WR0_NULL = 0x00,
|
||||
WR0_SEND_ABORT = 0x08,
|
||||
WR0_RESET_EXT_STATUS = 0x10,
|
||||
WR0_CHANNEL_RESET = 0x18,
|
||||
WR0_ENABLE_INT_NEXT_RX = 0x20,
|
||||
WR0_RESET_TX_INT = 0x28,
|
||||
WR0_ERROR_RESET = 0x30,
|
||||
WR0_RETURN_FROM_INT = 0x38,
|
||||
WR0_REGISTER_MASK = 0x07,
|
||||
WR0_COMMAND_MASK = 0x38,
|
||||
WR0_NULL = 0x00,
|
||||
WR0_SEND_ABORT = 0x08,
|
||||
WR0_RESET_EXT_STATUS = 0x10,
|
||||
WR0_CHANNEL_RESET = 0x18,
|
||||
WR0_ENABLE_INT_NEXT_RX = 0x20,
|
||||
WR0_RESET_TX_INT = 0x28,
|
||||
WR0_ERROR_RESET = 0x30,
|
||||
WR0_RETURN_FROM_INT = 0x38,
|
||||
WR0_CRC_RESET_CODE_MASK = 0xc0,
|
||||
WR0_CRC_RESET_NULL = 0x00,
|
||||
WR0_CRC_RESET_RX = 0x40,
|
||||
WR0_CRC_RESET_TX = 0x80,
|
||||
WR0_CRC_RESET_NULL = 0x00,
|
||||
WR0_CRC_RESET_RX = 0x40,
|
||||
WR0_CRC_RESET_TX = 0x80,
|
||||
WR0_CRC_RESET_TX_UNDERRUN = 0xc0
|
||||
};
|
||||
|
||||
@ -448,10 +448,10 @@ public:
|
||||
static void static_set_cputag(device_t &device, const char *tag)
|
||||
{
|
||||
z80sio_device &dev = downcast<z80sio_device &>(device);
|
||||
dev.m_cputag = tag;
|
||||
}
|
||||
dev.m_cputag = tag;
|
||||
}
|
||||
|
||||
static void configure_channels(device_t &device, int rxa, int txa, int rxb, int txb)
|
||||
static void configure_channels(device_t &device, int rxa, int txa, int rxb, int txb)
|
||||
{
|
||||
z80sio_device &dev = downcast<z80sio_device &>(device);
|
||||
dev.m_rxca = rxa;
|
||||
@ -506,12 +506,12 @@ protected:
|
||||
// internal interrupt management
|
||||
void check_interrupts();
|
||||
void reset_interrupts();
|
||||
int get_interrupt_prio(int index, int type);
|
||||
uint8_t modify_vector(int index, int type);
|
||||
int get_interrupt_prio(int index, int type);
|
||||
uint8_t modify_vector(int index, int type);
|
||||
void trigger_interrupt(int index, int state);
|
||||
int get_channel_index(z80sio_channel *ch) { return (ch == m_chanA) ? 0 : 1; }
|
||||
|
||||
// CPU types that has slightly different behaviour
|
||||
// CPU types that has slightly different behaviour
|
||||
enum
|
||||
{
|
||||
TYPE_Z80SIO = 0x001,
|
||||
|
@ -3,32 +3,32 @@
|
||||
/*
|
||||
HP 1LL3-0005 GPU emulation.
|
||||
|
||||
Used by HP Integral PC, possibly other HP products.
|
||||
Used by HP Integral PC, possibly other HP products.
|
||||
|
||||
On IPC, memory is 4 16Kx4bit DRAM chips = 32KB total (16K words),
|
||||
but firmware probes memory size and can work with 128KB memory.
|
||||
Undocumented "_desktop" mode requires this.
|
||||
On IPC, memory is 4 16Kx4bit DRAM chips = 32KB total (16K words),
|
||||
but firmware probes memory size and can work with 128KB memory.
|
||||
Undocumented "_desktop" mode requires this.
|
||||
|
||||
Capabilities:
|
||||
- up to 1024x1024 px on screen
|
||||
- lines
|
||||
- rectangles
|
||||
- area fill with user-defined pattern
|
||||
- 16x16 user-defined proportional font, with automatic cursor
|
||||
- 16x16 user-defined sprite for mouse cursor (not a sprite layer)
|
||||
- windows with blitter (copy, fill and scroll) and clipping
|
||||
Capabilities:
|
||||
- up to 1024x1024 px on screen
|
||||
- lines
|
||||
- rectangles
|
||||
- area fill with user-defined pattern
|
||||
- 16x16 user-defined proportional font, with automatic cursor
|
||||
- 16x16 user-defined sprite for mouse cursor (not a sprite layer)
|
||||
- windows with blitter (copy, fill and scroll) and clipping
|
||||
|
||||
To do:
|
||||
. proper cursor and mouse pointers [cursor can be offset from the pen location]
|
||||
+ variable width fonts [?? placed relative to current window]
|
||||
+ basic lines
|
||||
- patterned lines
|
||||
. bit blits & scroll
|
||||
. meaning of WRRR bits
|
||||
. meaning of CONF data [+ autoconfiguration]
|
||||
- interrupt generation
|
||||
- realistic timing?
|
||||
- &c.
|
||||
To do:
|
||||
. proper cursor and mouse pointers [cursor can be offset from the pen location]
|
||||
+ variable width fonts [?? placed relative to current window]
|
||||
+ basic lines
|
||||
- patterned lines
|
||||
. bit blits & scroll
|
||||
. meaning of WRRR bits
|
||||
. meaning of CONF data [+ autoconfiguration]
|
||||
- interrupt generation
|
||||
- realistic timing?
|
||||
- &c.
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
@ -54,7 +54,7 @@
|
||||
} while (0)
|
||||
|
||||
|
||||
#define HPGPU_VRAM_SIZE 16384 // *4 // experiment
|
||||
#define HPGPU_VRAM_SIZE 16384 // *4 // experiment
|
||||
#define HPGPU_HORZ_TOTAL 512
|
||||
#define HPGPU_VERT_TOTAL 256
|
||||
|
||||
@ -96,7 +96,7 @@ void hp1ll3_device::device_start()
|
||||
m_cursor.allocate(16, 16);
|
||||
m_sprite.allocate(16, 16);
|
||||
|
||||
m_videoram = std::make_unique<uint16_t[]>(HPGPU_VRAM_SIZE*2); // x2 size to make WRWIN/RDWIN easier
|
||||
m_videoram = std::make_unique<uint16_t[]>(HPGPU_VRAM_SIZE*2); // x2 size to make WRWIN/RDWIN easier
|
||||
}
|
||||
|
||||
void hp1ll3_device::device_reset()
|
||||
@ -397,14 +397,14 @@ uint32_t hp1ll3_device::screen_update(screen_device &screen, bitmap_ind16 &bitma
|
||||
//-------------------------------------------------
|
||||
|
||||
/*
|
||||
* offset 0: CSR
|
||||
* offset 0: CSR
|
||||
*
|
||||
* bit 0 gpu is busy
|
||||
* bit 1 data is ready
|
||||
* bit 3 vert blank time
|
||||
* bit 7 out of window
|
||||
* bit 0 gpu is busy
|
||||
* bit 1 data is ready
|
||||
* bit 3 vert blank time
|
||||
* bit 7 out of window
|
||||
*
|
||||
* offset 2: data
|
||||
* offset 2: data
|
||||
*/
|
||||
|
||||
READ8_MEMBER( hp1ll3_device::read )
|
||||
|
@ -30,47 +30,47 @@
|
||||
* 3 -- ???
|
||||
* 4 -- write 1 word of data, then command, then read X words of data, then write NOP
|
||||
*/
|
||||
#define NOP 0 // type 0
|
||||
#define CONF 2 // type 3, configure GPU (screen size, timings...). 11 words of data.
|
||||
#define DISVID 3 // type 0, disable video
|
||||
#define ENVID 4 // type 0, enable video
|
||||
#define WRMEM 7 // type 4, write GPU memory at offset, terminate by NOP
|
||||
#define RDMEM 8 // type 4, read GPU memory from offset, terminate by NOP
|
||||
#define WRSAD 9 // type 1, set screen area start address
|
||||
#define WRORG 10 // type 1, set ???
|
||||
#define WRDAD 11 // type 1, set data area start address (16x16 area fill, sprite and cursor)
|
||||
#define WRRR 12 // type 1, set replacement rule (rasterop)
|
||||
#define MOVEP 13 // type 2, move pointer
|
||||
#define IMOVEP 14
|
||||
#define DRAWP 15 // type 2, draw line
|
||||
#define IDRAWP 16
|
||||
#define RDP 17
|
||||
#define WRUDL 18 // type 1, set user-defined line pattern (16-bit)
|
||||
#define WRWINSIZ 19 // type 2, set ???
|
||||
#define WRWINORG 20 // type 2, set ???
|
||||
#define COPY 21 // type 2
|
||||
#define FILL 22 // type 1, fill area
|
||||
#define FRAME 23 // type _, draw rectangle
|
||||
#define SCROLUP 24 // type 2
|
||||
#define SCROLDN 25 // type 2
|
||||
#define SCROLLF 26 // type 2
|
||||
#define SCROLRT 27 // type 2
|
||||
#define RDWIN 28 // type 1
|
||||
#define WRWIN 29 // type 1
|
||||
#define RDWINPARM 30
|
||||
#define CR 31
|
||||
#define CRLFx 32
|
||||
#define LABEL 36 // type 1, draw text
|
||||
#define ENSP 38 // type 0, enable sprite
|
||||
#define DISSP 39 // type 0, disable sprite
|
||||
#define MOVESP 40 // type 2, move sprite
|
||||
#define IMOVESP 41
|
||||
#define RDSP 42
|
||||
#define DRAWPX 43 // type _, draw single pixel
|
||||
#define WRFAD 44 // type 1, set font area start address
|
||||
#define ENCURS 45 // type 0
|
||||
#define DISCURS 46 // type 0
|
||||
#define ID 63
|
||||
#define NOP 0 // type 0
|
||||
#define CONF 2 // type 3, configure GPU (screen size, timings...). 11 words of data.
|
||||
#define DISVID 3 // type 0, disable video
|
||||
#define ENVID 4 // type 0, enable video
|
||||
#define WRMEM 7 // type 4, write GPU memory at offset, terminate by NOP
|
||||
#define RDMEM 8 // type 4, read GPU memory from offset, terminate by NOP
|
||||
#define WRSAD 9 // type 1, set screen area start address
|
||||
#define WRORG 10 // type 1, set ???
|
||||
#define WRDAD 11 // type 1, set data area start address (16x16 area fill, sprite and cursor)
|
||||
#define WRRR 12 // type 1, set replacement rule (rasterop)
|
||||
#define MOVEP 13 // type 2, move pointer
|
||||
#define IMOVEP 14
|
||||
#define DRAWP 15 // type 2, draw line
|
||||
#define IDRAWP 16
|
||||
#define RDP 17
|
||||
#define WRUDL 18 // type 1, set user-defined line pattern (16-bit)
|
||||
#define WRWINSIZ 19 // type 2, set ???
|
||||
#define WRWINORG 20 // type 2, set ???
|
||||
#define COPY 21 // type 2
|
||||
#define FILL 22 // type 1, fill area
|
||||
#define FRAME 23 // type _, draw rectangle
|
||||
#define SCROLUP 24 // type 2
|
||||
#define SCROLDN 25 // type 2
|
||||
#define SCROLLF 26 // type 2
|
||||
#define SCROLRT 27 // type 2
|
||||
#define RDWIN 28 // type 1
|
||||
#define WRWIN 29 // type 1
|
||||
#define RDWINPARM 30
|
||||
#define CR 31
|
||||
#define CRLFx 32
|
||||
#define LABEL 36 // type 1, draw text
|
||||
#define ENSP 38 // type 0, enable sprite
|
||||
#define DISSP 39 // type 0, disable sprite
|
||||
#define MOVESP 40 // type 2, move sprite
|
||||
#define IMOVESP 41
|
||||
#define RDSP 42
|
||||
#define DRAWPX 43 // type _, draw single pixel
|
||||
#define WRFAD 44 // type 1, set font area start address
|
||||
#define ENCURS 45 // type 0
|
||||
#define DISCURS 46 // type 0
|
||||
#define ID 63
|
||||
|
||||
|
||||
/*
|
||||
@ -80,26 +80,26 @@
|
||||
* - pdf/hp/9000_300/specs/A-5958-4362-9_Series_300_Display_Color_Card_Theory_of_Operation_Oct85.pdf
|
||||
* refers to TOPCAT documentation p/n A-1FH2-2001-7 (not online)
|
||||
*/
|
||||
#define RR_FORCE_ZERO 0x0
|
||||
#define RR_CLEAR RR_FORCE_ZERO
|
||||
#define RR_AND 0x1
|
||||
#define RR_AND_NOT_OLD 0x2
|
||||
#define RR_NEW 0x3
|
||||
#define RR_COPY RR_NEW
|
||||
#define RR_AND_NOT_NEW 0x4
|
||||
#define RR_OLD 0x5
|
||||
#define RR_XOR 0x6
|
||||
#define RR_OR 0x7
|
||||
#define RR_NOR 0x8
|
||||
#define RR_XNOR 0x9
|
||||
#define RR_NOT_OLD 0xa
|
||||
#define RR_INVERT RR_NOT_OLD
|
||||
#define RR_OR_NOT_OLD 0xb
|
||||
#define RR_NOT_NEW 0xc
|
||||
#define RR_COPYINVERTED RR_NOT_NEW
|
||||
#define RR_OR_NOT_NEW 0xd
|
||||
#define RR_NAND 0xe
|
||||
#define RR_FORCE_ONE 0xf
|
||||
#define RR_FORCE_ZERO 0x0
|
||||
#define RR_CLEAR RR_FORCE_ZERO
|
||||
#define RR_AND 0x1
|
||||
#define RR_AND_NOT_OLD 0x2
|
||||
#define RR_NEW 0x3
|
||||
#define RR_COPY RR_NEW
|
||||
#define RR_AND_NOT_NEW 0x4
|
||||
#define RR_OLD 0x5
|
||||
#define RR_XOR 0x6
|
||||
#define RR_OR 0x7
|
||||
#define RR_NOR 0x8
|
||||
#define RR_XNOR 0x9
|
||||
#define RR_NOT_OLD 0xa
|
||||
#define RR_INVERT RR_NOT_OLD
|
||||
#define RR_OR_NOT_OLD 0xb
|
||||
#define RR_NOT_NEW 0xc
|
||||
#define RR_COPYINVERTED RR_NOT_NEW
|
||||
#define RR_OR_NOT_NEW 0xd
|
||||
#define RR_NAND 0xe
|
||||
#define RR_FORCE_ONE 0xf
|
||||
|
||||
#define WS 16 // bits in a word
|
||||
|
||||
|
@ -142,7 +142,7 @@ enum
|
||||
XTAL_13_4952MHz = 13495200, /* Used on Shadow Force pcb and maybe other Technos pcbs? */
|
||||
XTAL_14MHz = 14000000,
|
||||
XTAL_14_112MHz = 14112000, /* Timex/Sinclair TS2068 */
|
||||
XTAL_14_3MHz = 14300000, /* Agat-7 */
|
||||
XTAL_14_3MHz = 14300000, /* Agat-7 */
|
||||
XTAL_14_314MHz = 14314000, /* Taito TTL Board */
|
||||
XTAL_14_31818MHz = 14318181, /* Extremely common, used on 100's of PCBs (4x NTSC subcarrier) */
|
||||
XTAL_14_705882MHz = 14705882, /* Aleck64 */
|
||||
|
@ -212,8 +212,8 @@ void mame_options::parse_slot_devices(emu_options &options, std::function<void(e
|
||||
|
||||
//-------------------------------------------------
|
||||
// reevaluate_slot_options - based on recent changes
|
||||
// in what images are mounted, give drivers a chance
|
||||
// to specify new default slot options
|
||||
// in what images are mounted, give drivers a chance
|
||||
// to specify new default slot options
|
||||
//-------------------------------------------------
|
||||
|
||||
bool mame_options::reevaluate_slot_options(emu_options &options)
|
||||
@ -404,10 +404,10 @@ std::map<std::string, std::string> mame_options::evaluate_initial_softlist_optio
|
||||
//
|
||||
// example from SMS:
|
||||
//
|
||||
// <software name = "alexbmx">
|
||||
// ...
|
||||
// <sharedfeat name = "ctrl1_default" value = "paddle" />
|
||||
// </software>
|
||||
// <software name = "alexbmx">
|
||||
// ...
|
||||
// <sharedfeat name = "ctrl1_default" value = "paddle" />
|
||||
// </software>
|
||||
for (const feature_list_item &fi : swinfo->shared_info())
|
||||
{
|
||||
const std::string default_suffix = "_default";
|
||||
|
@ -2,9 +2,9 @@
|
||||
// copyright-holders:Olivier Galibert
|
||||
/*********************************************************************
|
||||
|
||||
formats/asst128_dsk.c
|
||||
formats/asst128_dsk.c
|
||||
|
||||
asst128 format
|
||||
asst128 format
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
// copyright-holders:Olivier Galibert
|
||||
/*********************************************************************
|
||||
|
||||
formats/asst128_dsk.h
|
||||
formats/asst128_dsk.h
|
||||
|
||||
asst128 format
|
||||
asst128 format
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/*********************************************************************
|
||||
|
||||
formats/hp_ipc_dsk.c
|
||||
formats/hp_ipc_dsk.c
|
||||
|
||||
HP Integral PC format
|
||||
HP Integral PC format
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/*********************************************************************
|
||||
|
||||
formats/hp_ipc_dsk.h
|
||||
formats/hp_ipc_dsk.h
|
||||
|
||||
hp_ipc format
|
||||
hp_ipc format
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
|
@ -25,7 +25,7 @@
|
||||
// timed queue
|
||||
// ----------------------------------------------------------------------------------------
|
||||
|
||||
#define USE_HEAP (0)
|
||||
#define USE_HEAP (0)
|
||||
|
||||
namespace netlist
|
||||
{
|
||||
|
@ -482,8 +482,8 @@ bool core_options::parse_ini_file(util::core_file &inifile, int priority, int ig
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// pluck_from_command_line - finds a specific
|
||||
// value from within a command line
|
||||
// pluck_from_command_line - finds a specific
|
||||
// value from within a command line
|
||||
//-------------------------------------------------
|
||||
|
||||
bool core_options::pluck_from_command_line(std::vector<std::string> &args, const std::string &optionname, std::string &result)
|
||||
|
@ -141,10 +141,10 @@ WRITE8_MEMBER(a7150_state::ppi_c_w)
|
||||
// b7
|
||||
}
|
||||
|
||||
#define KGS_ST_OBF 0x01
|
||||
#define KGS_ST_IBF 0x02
|
||||
#define KGS_ST_INT 0x04
|
||||
#define KGS_ST_ERR 0x80
|
||||
#define KGS_ST_OBF 0x01
|
||||
#define KGS_ST_IBF 0x02
|
||||
#define KGS_ST_INT 0x04
|
||||
#define KGS_ST_ERR 0x80
|
||||
|
||||
READ8_MEMBER(a7150_state::kgs_host_r)
|
||||
{
|
||||
@ -256,7 +256,7 @@ WRITE8_MEMBER(a7150_state::a7150_kgs_w)
|
||||
{
|
||||
case 0:
|
||||
m_kgs_ctrl &= ~(KGS_ST_ERR | KGS_ST_INT);
|
||||
// m_pic8259->ir1_w(CLEAR_LINE);
|
||||
// m_pic8259->ir1_w(CLEAR_LINE);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
@ -281,7 +281,7 @@ static ADDRESS_MAP_START(a7150_mem, AS_PROGRAM, 16, a7150_state)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START(a7150_io, AS_IO, 16, a7150_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x004a, 0x004b) AM_DEVWRITE8("isbc_215g", isbc_215g_device, write, 0x00ff) // KES board
|
||||
AM_RANGE(0x00c0, 0x00c3) AM_DEVREADWRITE8("pic8259", pic8259_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x00c8, 0x00cf) AM_DEVREADWRITE8("ppi8255", i8255_device, read, write, 0x00ff)
|
||||
@ -422,8 +422,8 @@ static MACHINE_CONFIG_START( a7150, a7150_state )
|
||||
|
||||
// IFSP port on processor card
|
||||
MCFG_DEVICE_ADD("ppi8255", I8255, 0)
|
||||
// MCFG_I8255_IN_PORTA_CB(DEVREAD8("cent_status_in", input_buffer_device, read))
|
||||
// MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
// MCFG_I8255_IN_PORTA_CB(DEVREAD8("cent_status_in", input_buffer_device, read))
|
||||
// MCFG_I8255_OUT_PORTB_CB(DEVWRITE8("cent_data_out", output_latch_device, write))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(a7150_state, ppi_c_w))
|
||||
|
||||
MCFG_DEVICE_ADD("pit8253", PIT8253, 0)
|
||||
@ -475,7 +475,7 @@ static MACHINE_CONFIG_START( a7150, a7150_state )
|
||||
MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE(RS232_A_TAG, rs232_port_device, write_rts))
|
||||
MCFG_Z80SIO_OUT_TXDB_CB(DEVWRITELINE(RS232_B_TAG, rs232_port_device, write_txd))
|
||||
MCFG_Z80SIO_OUT_DTRB_CB(WRITELINE(a7150_state, kgs_iml_w))
|
||||
// MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE(a7150_state, kgs_ifss_loopback_w))
|
||||
// MCFG_Z80SIO_OUT_RTSB_CB(WRITELINE(a7150_state, kgs_ifss_loopback_w))
|
||||
|
||||
// V.24 port (graphics tablet)
|
||||
MCFG_RS232_PORT_ADD(RS232_A_TAG, default_rs232_devices, nullptr)
|
||||
@ -502,8 +502,8 @@ ROM_START( a7150 )
|
||||
ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF )
|
||||
// ROM from A7100
|
||||
ROM_LOAD( "KGS7070-152.bin", 0x0000, 0x2000, CRC(403f4235) SHA1(d07ccd40f8b600651d513f588bcf1ea4f15ed094))
|
||||
// ROM_LOAD( "KGS7070-153.rom", 0x0000, 0x2000, CRC(a72fe820) SHA1(4b77ab2b59ea8c3632986847ff359df26b16196b))
|
||||
// ROM_LOAD( "KGS7070-154.rom", 0x0000, 0x2000, CRC(2995ade0) SHA1(62516f2e1cb62698445f80fd823d39a1a78a7807))
|
||||
// ROM_LOAD( "KGS7070-153.rom", 0x0000, 0x2000, CRC(a72fe820) SHA1(4b77ab2b59ea8c3632986847ff359df26b16196b))
|
||||
// ROM_LOAD( "KGS7070-154.rom", 0x0000, 0x2000, CRC(2995ade0) SHA1(62516f2e1cb62698445f80fd823d39a1a78a7807))
|
||||
ROM_END
|
||||
|
||||
/* Driver */
|
||||
|
@ -3,17 +3,17 @@
|
||||
/***************************************************************************
|
||||
|
||||
agat.c
|
||||
Skeleton driver for Agat series of Soviet Apple II non-clones
|
||||
Skeleton driver for Agat series of Soviet Apple II non-clones
|
||||
|
||||
These are similar to Apple II (same bus architecture, keyboard and
|
||||
floppy interface), but video controller is completely different.
|
||||
These are similar to Apple II (same bus architecture, keyboard and
|
||||
floppy interface), but video controller is completely different.
|
||||
|
||||
To do:
|
||||
- native keyboards (at least two variants)
|
||||
- 840K floppy controller (MFM encoding, but track layout is unique)
|
||||
- agat7: 64K and 128K onboard memory configurations
|
||||
- agat9
|
||||
- 3rd party slot devices
|
||||
To do:
|
||||
- native keyboards (at least two variants)
|
||||
- 840K floppy controller (MFM encoding, but track layout is unique)
|
||||
- agat7: 64K and 128K onboard memory configurations
|
||||
- agat9
|
||||
- 3rd party slot devices
|
||||
|
||||
************************************************************************/
|
||||
|
||||
@ -485,7 +485,7 @@ WRITE8_MEMBER(agat7_state::c100_w)
|
||||
|
||||
READ8_MEMBER(agat7_state::c800_r)
|
||||
{
|
||||
// logerror("%s: c800_r %04X (slot %d) == %02X\n", machine().describe_context(), offset+0xc800, m_cnxx_slot, 0);
|
||||
// logerror("%s: c800_r %04X (slot %d) == %02X\n", machine().describe_context(), offset+0xc800, m_cnxx_slot, 0);
|
||||
|
||||
if (offset == 0x7ff)
|
||||
{
|
||||
@ -507,7 +507,7 @@ READ8_MEMBER(agat7_state::c800_r)
|
||||
|
||||
WRITE8_MEMBER(agat7_state::c800_w)
|
||||
{
|
||||
// logerror("%s: c800_w %04X <- %02X\n", machine().describe_context(), offset+0xc800, data);
|
||||
// logerror("%s: c800_w %04X <- %02X\n", machine().describe_context(), offset+0xc800, data);
|
||||
|
||||
if (offset == 0x7ff)
|
||||
{
|
||||
@ -551,7 +551,7 @@ uint8_t agat7_state::read_floatingbus()
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
ADDRESS MAP
|
||||
ADDRESS MAP
|
||||
***************************************************************************/
|
||||
|
||||
/* onboard memory banking on Agat-7 */
|
||||
@ -599,8 +599,8 @@ READ8_MEMBER(agat7_state::agat7_ram_r)
|
||||
|
||||
WRITE8_MEMBER(agat7_state::agat7_ram_w)
|
||||
{
|
||||
// if (offset > 0x7fff)
|
||||
// logerror("%s: ram %04X (bank %d slot %d) <- %02X\n", machine().describe_context(), offset, m_agat7_membank, m_agat7_ram_slot, data);
|
||||
// if (offset > 0x7fff)
|
||||
// logerror("%s: ram %04X (bank %d slot %d) <- %02X\n", machine().describe_context(), offset, m_agat7_membank, m_agat7_ram_slot, data);
|
||||
|
||||
if (offset < 32768)
|
||||
{
|
||||
@ -1014,7 +1014,7 @@ static MACHINE_CONFIG_START( agat7, agat7_state )
|
||||
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("32K")
|
||||
// MCFG_RAM_EXTRA_OPTIONS("64K,128K")
|
||||
// MCFG_RAM_EXTRA_OPTIONS("64K,128K")
|
||||
MCFG_RAM_DEFAULT_VALUE(0x00)
|
||||
|
||||
/* sound hardware */
|
||||
@ -1078,11 +1078,11 @@ ROM_START( agat7 )
|
||||
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
|
||||
ROM_DEFAULT_BIOS("v1")
|
||||
|
||||
ROM_SYSTEM_BIOS( 0, "v1", "Version 1" ) // original?
|
||||
ROM_SYSTEM_BIOS( 0, "v1", "Version 1" ) // original?
|
||||
ROMX_LOAD( "monitor7.rom", 0x3800, 0x0800, CRC(071fda0b) SHA1(6089d46b7addc4e2ae096b2cf81124681bd2b27a), ROM_BIOS(1))
|
||||
ROM_SYSTEM_BIOS( 1, "v2", "Version 2" ) // modded by author of agatcomp.ru
|
||||
ROM_SYSTEM_BIOS( 1, "v2", "Version 2" ) // modded by author of agatcomp.ru
|
||||
ROMX_LOAD( "agat_pzu.bin", 0x3800, 0x0800, CRC(c605163d) SHA1(b30fd1b264a347a9de69bb9e3105483254994d06), ROM_BIOS(2))
|
||||
ROM_SYSTEM_BIOS( 2, "debug", "Debug" ) // written by author of agatcomp.ru
|
||||
ROM_SYSTEM_BIOS( 2, "debug", "Debug" ) // written by author of agatcomp.ru
|
||||
ROMX_LOAD( "debug-sysmon7.bin", 0x3800, 0x0800, CRC(d26f18a4) SHA1(2862c13a82e2f4dfc757aa2eeab11fe71c570c12), ROM_BIOS(3))
|
||||
|
||||
// 140KB floppy controller
|
||||
|
@ -5,12 +5,12 @@
|
||||
Aristocrat MK5 / MKV hardware
|
||||
possibly 'Acorn Archimedes on a chip' hardware
|
||||
|
||||
Current significant issues:
|
||||
- Games run twice as fast as they should, music is double speed etc.
|
||||
There are threads that say when running in VGA mode an original AA
|
||||
will play music etc. at half the expected speed, so it is likely
|
||||
that the way the timers work differs in this mode (25hz instead of 50?)
|
||||
- Games lock up after 50 spins
|
||||
Current significant issues:
|
||||
- Games run twice as fast as they should, music is double speed etc.
|
||||
There are threads that say when running in VGA mode an original AA
|
||||
will play music etc. at half the expected speed, so it is likely
|
||||
that the way the timers work differs in this mode (25hz instead of 50?)
|
||||
- Games lock up after 50 spins
|
||||
|
||||
Note: ARM250 mapping is not identical to plain AA
|
||||
|
||||
@ -5306,11 +5306,11 @@ ROM_END
|
||||
ROM_START( swhr2 )
|
||||
ARISTOCRAT_MK5_BIOS
|
||||
/*
|
||||
Checksum code found at 0x000b68
|
||||
0x000000-0x05b507 is the Checksummed Range (excluding 0x000020-0x000027 where Checksum is stored)
|
||||
Expected Checksum 0x757b4b7c
|
||||
Calculated Checksum 0x757b4b7c (OK)
|
||||
0x05b508-0x0c43af is the non-Checksummed range (unusual endpoint)
|
||||
Checksum code found at 0x000b68
|
||||
0x000000-0x05b507 is the Checksummed Range (excluding 0x000020-0x000027 where Checksum is stored)
|
||||
Expected Checksum 0x757b4b7c
|
||||
Calculated Checksum 0x757b4b7c (OK)
|
||||
0x05b508-0x0c43af is the non-Checksummed range (unusual endpoint)
|
||||
*/
|
||||
ROM_REGION( 0x400000, "game_prg", ROMREGION_ERASEFF )
|
||||
ROM_LOAD32_WORD( "0200465v.u7", 0x000000, 0x80000, CRC(23350042) SHA1(fd839a4835358057a5ee1fcaf716f2443461352d) )
|
||||
@ -6079,7 +6079,7 @@ GAMEL( 1997, pengpayb, pengpay, aristmk5, swhr2, aristmk5_state, aristm
|
||||
GAMEL( 1995, pengpayc, pengpay, aristmk5, wcougar, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (0100113V, NSW/ACT)", MACHINE_FLAGS, layout_wcougar ) // 586, A - 12/10/95
|
||||
GAMEL( 1997, pengpayu, pengpay, aristmk5_usa, aristmk5_usa, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays (BHI0417-03, US)", MACHINE_FLAGS, layout_aristmk5_us ) // 586/7(b), B - 14/07/97
|
||||
GAMEL( 2001, pengpuck, pengpay, aristmk5_usa, pengpuck, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pays - Penguin Pucks (EHG1257, US)", MACHINE_FLAGS, layout_pengpuck ) // MV4122/1, C - 19/01/01
|
||||
GAMEL( 1998, petshop, aristmk5, aristmk5, petshop, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Pet Shop (0100731V, NSW/ACT)", MACHINE_FLAGS, layout_petshop ) // 618/1, A - 17/04/98
|
||||
GAMEL( 1998, petshop, aristmk5, aristmk5, petshop, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Pet Shop (0100731V, NSW/ACT)", MACHINE_FLAGS, layout_petshop ) // 618/1, A - 17/04/98
|
||||
GAMEL( 1995, phantpay, aristmk5, aristmk5, swhr2, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Phantom Pays (0500005V, NSW/ACT)", MACHINE_FLAGS, layout_swhr2 ) // 570/1, E - 12/09/95
|
||||
GAMEL( 1998, penpir, aristmk5, aristmk5, kgalah, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pirate (0100674V, NSW/ACT)", MACHINE_FLAGS, layout_kgalah ) // 619/1, A - 31/03/98
|
||||
GAMEL( 1998, penpira, penpir, aristmk5, snowcat, aristmk5_state, aristmk5, ROT0, "Aristocrat", "Penguin Pirate (0200578V, NSW/ACT)", MACHINE_FLAGS, layout_snowcat ) // 619, A - 27/02/98
|
||||
|
@ -2,40 +2,40 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/***************************************************************************
|
||||
|
||||
BBN BitGraph -- monochrome, raster graphics (768x1024), serial terminal.
|
||||
BBN BitGraph -- monochrome, raster graphics (768x1024), serial terminal.
|
||||
|
||||
Apparently had at least four hardware revisions, A-D, but which ROM
|
||||
revisions support which hardware is unclear. A Versabus slot, and
|
||||
various hardware and software options are mentioned in the docs. Best
|
||||
guesses follow.
|
||||
Apparently had at least four hardware revisions, A-D, but which ROM
|
||||
revisions support which hardware is unclear. A Versabus slot, and
|
||||
various hardware and software options are mentioned in the docs. Best
|
||||
guesses follow.
|
||||
|
||||
Onboard hardware (common to all revisions) is
|
||||
- 32K ROM
|
||||
- 128K RAM (includes frame buffer)
|
||||
- 3 serial ports, each driven by 6850 ACIA
|
||||
- some kind of baud rate generator, possibly COM8016
|
||||
- sync serial port, driven by 6854 but apparently never supported by ROM
|
||||
- 682x PIA
|
||||
- AY-3-891x PSG
|
||||
- ER2055 EAROM
|
||||
- DEC VT100 keyboard interface
|
||||
Onboard hardware (common to all revisions) is
|
||||
- 32K ROM
|
||||
- 128K RAM (includes frame buffer)
|
||||
- 3 serial ports, each driven by 6850 ACIA
|
||||
- some kind of baud rate generator, possibly COM8016
|
||||
- sync serial port, driven by 6854 but apparently never supported by ROM
|
||||
- 682x PIA
|
||||
- AY-3-891x PSG
|
||||
- ER2055 EAROM
|
||||
- DEC VT100 keyboard interface
|
||||
|
||||
Rev A has additional 4th serial port for mouse (not supported by ROM 1.25).
|
||||
Rev A has 40 hz realtime clock, the rest use 1040 hz.
|
||||
Rev A-C use AY-3-8912 (with one external PIO port, to connect the EAROM).
|
||||
Rev D uses AY-3-8913 (no external ports; EAROM is wired to TBD).
|
||||
Rev B-D have onboard 8035 to talk to parallel printer and mouse.
|
||||
Rev B-D have more memory (at least up to 512K).
|
||||
Rev A has additional 4th serial port for mouse (not supported by ROM 1.25).
|
||||
Rev A has 40 hz realtime clock, the rest use 1040 hz.
|
||||
Rev A-C use AY-3-8912 (with one external PIO port, to connect the EAROM).
|
||||
Rev D uses AY-3-8913 (no external ports; EAROM is wired to TBD).
|
||||
Rev B-D have onboard 8035 to talk to parallel printer and mouse.
|
||||
Rev B-D have more memory (at least up to 512K).
|
||||
|
||||
ROM 1.25 doesn't support mouse, setup mode, pixel data upload and autowrap.
|
||||
ROM 1.25 doesn't support mouse, setup mode, pixel data upload and autowrap.
|
||||
|
||||
Missing/incorrect emulation:
|
||||
Bidirectional keyboard interface (to drive LEDs and speaker).
|
||||
8035.
|
||||
EAROM.
|
||||
1.25 only -- clksync() is dummied out -- causes watchdog resets.
|
||||
Selectable memory size.
|
||||
Video enable/reverse video switch.
|
||||
Missing/incorrect emulation:
|
||||
Bidirectional keyboard interface (to drive LEDs and speaker).
|
||||
8035.
|
||||
EAROM.
|
||||
1.25 only -- clksync() is dummied out -- causes watchdog resets.
|
||||
Selectable memory size.
|
||||
Video enable/reverse video switch.
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
@ -192,7 +192,7 @@ static ADDRESS_MAP_START(bitgraphb_mem, AS_PROGRAM, 16, bitgraph_state)
|
||||
AM_RANGE(0x010020, 0x010027) AM_READWRITE8(adlc_r, adlc_w, 0xff00)
|
||||
AM_RANGE(0x010028, 0x01002f) AM_READWRITE8(pia_r, pia_w, 0xff00) // EAROM, PSG
|
||||
AM_RANGE(0x010030, 0x010031) AM_WRITE(baud_write)
|
||||
// AM_RANGE(0x010030, 0x010037) AM_READ8(ppu_read, 0x00ff)
|
||||
// AM_RANGE(0x010030, 0x010037) AM_READ8(ppu_read, 0x00ff)
|
||||
AM_RANGE(0x010038, 0x01003f) AM_WRITE8(ppu_write, 0x00ff)
|
||||
AM_RANGE(0x380000, 0x3fffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
@ -247,14 +247,14 @@ WRITE8_MEMBER(bitgraph_state::pia_pa_w)
|
||||
}
|
||||
|
||||
/*
|
||||
B0 O: BC1 to noisemaker.
|
||||
B1 O: BDIR to noisemaker.
|
||||
B2 O: Clock for EAROM.
|
||||
B3 O: CS1 for EAROM.
|
||||
B4 O: Enable HDLC Xmt interrupt.
|
||||
B5 O: Enable HDLC Rcv interrupt.
|
||||
B6 O: Clear Clock interrupt. Must write a 0 [clear interrupt], then a 1.
|
||||
B7 I: EVEN field ??
|
||||
B0 O: BC1 to noisemaker.
|
||||
B1 O: BDIR to noisemaker.
|
||||
B2 O: Clock for EAROM.
|
||||
B3 O: CS1 for EAROM.
|
||||
B4 O: Enable HDLC Xmt interrupt.
|
||||
B5 O: Enable HDLC Rcv interrupt.
|
||||
B6 O: Clear Clock interrupt. Must write a 0 [clear interrupt], then a 1.
|
||||
B7 I: EVEN field ??
|
||||
*/
|
||||
READ8_MEMBER(bitgraph_state::pia_pb_r)
|
||||
{
|
||||
@ -423,18 +423,18 @@ WRITE8_MEMBER(bitgraph_state::ppu_write)
|
||||
|
||||
#ifdef UNUSED_FUNCTION
|
||||
static ADDRESS_MAP_START(ppu_io, AS_IO, 8, bitgraph_state)
|
||||
// AM_RANGE(0x00, 0x00) AM_READ(ppu_irq)
|
||||
// AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1)
|
||||
// AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(ppu_t0_r)
|
||||
// AM_RANGE(0x00, 0x00) AM_READ(ppu_irq)
|
||||
// AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1)
|
||||
// AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(ppu_t0_r)
|
||||
AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_DEVWRITE("i8243", i8243_device, i8243_prog_w)
|
||||
ADDRESS_MAP_END
|
||||
#endif
|
||||
|
||||
/*
|
||||
p4 O: Centronics data 3..0
|
||||
p5 O: Centronics data 7..4
|
||||
p6 O: Centronics control
|
||||
p7 I: Centronics status
|
||||
p4 O: Centronics data 3..0
|
||||
p5 O: Centronics data 7..4
|
||||
p6 O: Centronics control
|
||||
p7 I: Centronics status
|
||||
*/
|
||||
WRITE8_MEMBER(bitgraph_state::ppu_i8243_w)
|
||||
{
|
||||
|
@ -2,60 +2,60 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/***************************************************************************
|
||||
|
||||
KSM (Kontroller Simvolnogo Monitora = Character Display Controller),
|
||||
a single-board replacement for standalone 15IE-00-013 terminal (ie15.c)
|
||||
in later-model DVK desktops.
|
||||
KSM (Kontroller Simvolnogo Monitora = Character Display Controller),
|
||||
a single-board replacement for standalone 15IE-00-013 terminal (ie15.c)
|
||||
in later-model DVK desktops.
|
||||
|
||||
MPI (Q-Bus clone) board, consumes only power from the bus.
|
||||
Interfaces with MS7004 (DEC LK201 workalike) keyboard and monochrome CRT.
|
||||
MPI (Q-Bus clone) board, consumes only power from the bus.
|
||||
Interfaces with MS7004 (DEC LK201 workalike) keyboard and monochrome CRT.
|
||||
|
||||
Hardware revisions (XXX verify everything):
|
||||
- 7.102.076 -- has DIP switches, SRAM at 0x2000, model name "KSM"
|
||||
- 7.102.228 -- no DIP switches, ?? SRAM at 0x2100, model name "KSM-01"
|
||||
Hardware revisions (XXX verify everything):
|
||||
- 7.102.076 -- has DIP switches, SRAM at 0x2000, model name "KSM"
|
||||
- 7.102.228 -- no DIP switches, ?? SRAM at 0x2100, model name "KSM-01"
|
||||
|
||||
Two sets of dumps exist:
|
||||
- one puts SRAM at 0x2000, which is where technical manual puts it,
|
||||
but chargen has 1 missing pixel in 'G' character.
|
||||
- another puts SRAM at 0x2100, but has no missing pixel.
|
||||
Merge them for now into one (SRAM at 0x2000 and no missing pixel).
|
||||
Two sets of dumps exist:
|
||||
- one puts SRAM at 0x2000, which is where technical manual puts it,
|
||||
but chargen has 1 missing pixel in 'G' character.
|
||||
- another puts SRAM at 0x2100, but has no missing pixel.
|
||||
Merge them for now into one (SRAM at 0x2000 and no missing pixel).
|
||||
|
||||
Emulates a VT52 without copier (ESC Z response is ESC / M), with
|
||||
Hold Screen mode and Graphics character set (but it is unique and
|
||||
mapped to a different range -- 100..137).
|
||||
Emulates a VT52 without copier (ESC Z response is ESC / M), with
|
||||
Hold Screen mode and Graphics character set (but it is unique and
|
||||
mapped to a different range -- 100..137).
|
||||
|
||||
F4 + 0..9 on numeric keypad = setup mode. 0 changes serial port speed,
|
||||
1..9 toggle one of mode bits:
|
||||
F4 + 0..9 on numeric keypad = setup mode. 0 changes serial port speed,
|
||||
1..9 toggle one of mode bits:
|
||||
|
||||
1 XON/XOFF 0: Off 1: On
|
||||
2 Character set 0: N0/N1 2: N2
|
||||
3 Auto LF 0: Off 1: On
|
||||
4 Auto repeat 0: On 1: Off
|
||||
5 Auto wraparound 0: On 1: Off
|
||||
6 Interpret controls 0: Interpret 1: Display
|
||||
7 Parity check 0: Off 1: On
|
||||
8 Parity bits 0: None 1: Even
|
||||
9 Stop bits
|
||||
1 XON/XOFF 0: Off 1: On
|
||||
2 Character set 0: N0/N1 2: N2
|
||||
3 Auto LF 0: Off 1: On
|
||||
4 Auto repeat 0: On 1: Off
|
||||
5 Auto wraparound 0: On 1: Off
|
||||
6 Interpret controls 0: Interpret 1: Display
|
||||
7 Parity check 0: Off 1: On
|
||||
8 Parity bits 0: None 1: Even
|
||||
9 Stop bits
|
||||
|
||||
N0/N1 charset has regular ASCII in C0 page and Cyrillic in C1 page,
|
||||
switching between them via SI/SO. N2 charset has uppercase Cyrillic
|
||||
chars in place of lowercase Latin ones.
|
||||
N0/N1 charset has regular ASCII in C0 page and Cyrillic in C1 page,
|
||||
switching between them via SI/SO. N2 charset has uppercase Cyrillic
|
||||
chars in place of lowercase Latin ones.
|
||||
|
||||
ESC toggles Cyrillic/Latin mode (depends in the host's terminal driver)
|
||||
F1 toggles Hold Screen mode (also depends in the host's terminal driver)
|
||||
F9 resets terminal (clears memory).
|
||||
F20 toggles on/off-line mode.
|
||||
ESC toggles Cyrillic/Latin mode (depends in the host's terminal driver)
|
||||
F1 toggles Hold Screen mode (also depends in the host's terminal driver)
|
||||
F9 resets terminal (clears memory).
|
||||
F20 toggles on/off-line mode.
|
||||
|
||||
Terminfo description:
|
||||
Terminfo description:
|
||||
|
||||
ksm|DVK KSM,
|
||||
am, bw, dch1=\EP, ich1=\EQ,
|
||||
acsc=hRiTjXkClJmFnNqUtEuPv\174wKxW.M\054Q\055S\053\136~_{@}Z0\177,
|
||||
use=vt52,
|
||||
am, bw, dch1=\EP, ich1=\EQ,
|
||||
acsc=hRiTjXkClJmFnNqUtEuPv\174wKxW.M\054Q\055S\053\136~_{@}Z0\177,
|
||||
use=vt52,
|
||||
|
||||
To do:
|
||||
- verify if pixel stretching is done by hw
|
||||
- verify details of hw revisions (memory map, DIP presence...)
|
||||
- baud rate selection
|
||||
To do:
|
||||
- verify if pixel stretching is done by hw
|
||||
- verify details of hw revisions (memory map, DIP presence...)
|
||||
- baud rate selection
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
@ -241,19 +241,19 @@ WRITE_LINE_MEMBER(ksm_state::write_line_clock)
|
||||
}
|
||||
|
||||
/*
|
||||
Raster size is 28x11 scan lines.
|
||||
XXX VBlank is active for 2 topmost on-screen rows and 1 at the bottom.
|
||||
Raster size is 28x11 scan lines.
|
||||
XXX VBlank is active for 2 topmost on-screen rows and 1 at the bottom.
|
||||
|
||||
Usable raster is 800 x 275 pixels (80 x 25 characters). 24 lines are
|
||||
available to the user and 25th (topmost) line is the status line.
|
||||
Status line displays current serial port speed and 9 setup bits.
|
||||
Usable raster is 800 x 275 pixels (80 x 25 characters). 24 lines are
|
||||
available to the user and 25th (topmost) line is the status line.
|
||||
Status line displays current serial port speed and 9 setup bits.
|
||||
|
||||
No character attributes are available, but in 'display controls' mode
|
||||
control characters stored in memory are shown as blinking chars.
|
||||
No character attributes are available, but in 'display controls' mode
|
||||
control characters stored in memory are shown as blinking chars.
|
||||
|
||||
Character cell is 10 x 11; character generator provides 7 x 8 of that.
|
||||
3 extra horizontal pixels are always XXX blank. Blinking XXX cursor may be
|
||||
displayed on 3 extra scan lines.
|
||||
Character cell is 10 x 11; character generator provides 7 x 8 of that.
|
||||
3 extra horizontal pixels are always XXX blank. Blinking XXX cursor may be
|
||||
displayed on 3 extra scan lines.
|
||||
*/
|
||||
|
||||
uint32_t ksm_state::draw_scanline(uint16_t *p, uint16_t offset, uint8_t scanline)
|
||||
|
@ -2,9 +2,9 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/***************************************************************************
|
||||
|
||||
drivers/ec184x.c
|
||||
drivers/ec184x.c
|
||||
|
||||
Driver file for EC-184x series
|
||||
Driver file for EC-184x series
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -343,8 +343,8 @@ static ADDRESS_MAP_START(waveterm_map, AS_PROGRAM, 8, waveterm_state)
|
||||
AM_RANGE(0xfd00, 0xfd03) AM_DEVREADWRITE("pia3", pia6821_device, read, write)
|
||||
AM_RANGE(0xfd08, 0xfd0f) AM_DEVREADWRITE("ptm", ptm6840_device, read, write)
|
||||
AM_RANGE(0xfd10, 0xfd17) AM_UNMAP
|
||||
AM_RANGE(0xfd18, 0xfd18) AM_READ(waveterm_adc) // AD558 ADC
|
||||
// AM_RANGE(0xfd20, 0xfd20) AM_READ(waveterm_dac) // ZN432 DAC ??
|
||||
AM_RANGE(0xfd18, 0xfd18) AM_READ(waveterm_adc) // AD558 ADC
|
||||
// AM_RANGE(0xfd20, 0xfd20) AM_READ(waveterm_dac) // ZN432 DAC ??
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static INPUT_PORTS_START(eurocom2)
|
||||
@ -441,18 +441,18 @@ static MACHINE_CONFIG_START( eurocom2, eurocom2_state )
|
||||
MCFG_GENERIC_KEYBOARD_CB(WRITE8(eurocom2_state, kbd_put))
|
||||
|
||||
MCFG_DEVICE_ADD("pia1", PIA6821, 0)
|
||||
MCFG_PIA_READCA1_HANDLER(READLINE(eurocom2_state, pia1_ca1_r)) // keyboard strobe
|
||||
MCFG_PIA_READCA2_HANDLER(READLINE(eurocom2_state, pia1_ca2_r)) // SST output Q14
|
||||
MCFG_PIA_READCB1_HANDLER(READLINE(eurocom2_state, pia1_cb1_r)) // SST output Q6
|
||||
MCFG_PIA_CB2_HANDLER(WRITELINE(eurocom2_state, pia1_cb2_w)) // SST reset input
|
||||
MCFG_PIA_READCA1_HANDLER(READLINE(eurocom2_state, pia1_ca1_r)) // keyboard strobe
|
||||
MCFG_PIA_READCA2_HANDLER(READLINE(eurocom2_state, pia1_ca2_r)) // SST output Q14
|
||||
MCFG_PIA_READCB1_HANDLER(READLINE(eurocom2_state, pia1_cb1_r)) // SST output Q6
|
||||
MCFG_PIA_CB2_HANDLER(WRITELINE(eurocom2_state, pia1_cb2_w)) // SST reset input
|
||||
MCFG_PIA_READPA_HANDLER(READ8(eurocom2_state, kbd_get))
|
||||
// MCFG_PIA_READPB_HANDLER(READ8(eurocom2_state, kbd_get))
|
||||
// MCFG_PIA_IRQA_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE))
|
||||
// MCFG_PIA_IRQB_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE))
|
||||
// MCFG_PIA_READPB_HANDLER(READ8(eurocom2_state, kbd_get))
|
||||
// MCFG_PIA_IRQA_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE))
|
||||
// MCFG_PIA_IRQB_HANDLER(INPUTLINE("maincpu", M6809_IRQ_LINE))
|
||||
|
||||
MCFG_DEVICE_ADD("pia2", PIA6821, 0)
|
||||
// MCFG_PIA_IRQA_HANDLER(INPUTLINE("maincpu", M6809_FIRQ_LINE))
|
||||
// MCFG_PIA_IRQB_HANDLER(INPUTLINE("maincpu", M6809_FIRQ_LINE))
|
||||
// MCFG_PIA_IRQA_HANDLER(INPUTLINE("maincpu", M6809_FIRQ_LINE))
|
||||
// MCFG_PIA_IRQB_HANDLER(INPUTLINE("maincpu", M6809_FIRQ_LINE))
|
||||
|
||||
MCFG_DEVICE_ADD("acia", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE ("rs232", rs232_port_device, write_txd))
|
||||
@ -462,11 +462,11 @@ static MACHINE_CONFIG_START( eurocom2, eurocom2_state )
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE ("acia", acia6850_device, write_cts))
|
||||
|
||||
MCFG_FD1793_ADD("fdc", XTAL_2MHz/2)
|
||||
// MCFG_WD_FDC_INTRQ_CALLBACK(INPUTLINE("maincpu", M6809_IRQ_LINE))
|
||||
// MCFG_WD_FDC_INTRQ_CALLBACK(INPUTLINE("maincpu", M6809_IRQ_LINE))
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:0", eurocom_floppies, "525qd", eurocom2_state::floppy_formats)
|
||||
// MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
// MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
MCFG_FLOPPY_DRIVE_ADD("fdc:1", eurocom_floppies, "525qd", eurocom2_state::floppy_formats)
|
||||
// MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
// MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED_CLASS(waveterm, eurocom2, waveterm_state)
|
||||
@ -481,13 +481,13 @@ static MACHINE_CONFIG_DERIVED_CLASS(waveterm, eurocom2, waveterm_state)
|
||||
// ports A(in/out), B(out), CA1(in), CA2(in), and CB2(out) = interface to PPG bus via DIL socket on WTI board
|
||||
// CB1 -- front panel "End" button
|
||||
MCFG_DEVICE_ADD("pia3", PIA6821, 0)
|
||||
// MCFG_PIA_READPA_HANDLER(READ8(waveterm_state, pia3_pa_r))
|
||||
// MCFG_PIA_WRITEPA_HANDLER(WRITE8(waveterm_state, pia3_pa_w))
|
||||
// MCFG_PIA_READPA_HANDLER(READ8(waveterm_state, pia3_pa_r))
|
||||
// MCFG_PIA_WRITEPA_HANDLER(WRITE8(waveterm_state, pia3_pa_w))
|
||||
MCFG_PIA_WRITEPB_HANDLER(WRITE8(waveterm_state, pia3_pb_w))
|
||||
// MCFG_PIA_READCA1_HANDLER(READLINE(waveterm_state, pia3_ca1_r))
|
||||
// MCFG_PIA_READCA2_HANDLER(READLINE(waveterm_state, pia3_ca2_r))
|
||||
// MCFG_PIA_READCA1_HANDLER(READLINE(waveterm_state, pia3_ca1_r))
|
||||
// MCFG_PIA_READCA2_HANDLER(READLINE(waveterm_state, pia3_ca2_r))
|
||||
MCFG_PIA_READCB1_HANDLER(IOPORT("FP"))
|
||||
// MCFG_PIA_CB2_HANDLER(WRITELINE(waveterm_state, pia3_cb2_w))
|
||||
// MCFG_PIA_CB2_HANDLER(WRITELINE(waveterm_state, pia3_cb2_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ptm", PTM6840, 0)
|
||||
|
||||
|
@ -2,22 +2,22 @@
|
||||
// copyright-holders:Robbbert, Mark Garlanger
|
||||
/***************************************************************************
|
||||
|
||||
Heathkit H19
|
||||
Heathkit H19
|
||||
|
||||
A smart terminal designed and manufactured by Heath Company.
|
||||
A smart terminal designed and manufactured by Heath Company.
|
||||
|
||||
The keyboard consists of a 9x10 matrix connected to a MM5740AAC/N
|
||||
mask-programmed keyboard controller. The output of this passes
|
||||
through a rom.
|
||||
The keyboard consists of a 9x10 matrix connected to a MM5740AAC/N
|
||||
mask-programmed keyboard controller. The output of this passes
|
||||
through a rom.
|
||||
|
||||
Input can also come from the serial port (a 8250).
|
||||
Either device will signal an interrupt to the CPU when a key
|
||||
is pressed/data is received.
|
||||
Input can also come from the serial port (a 8250).
|
||||
Either device will signal an interrupt to the CPU when a key
|
||||
is pressed/data is received.
|
||||
|
||||
TODO:
|
||||
- speed up emulation
|
||||
- update SW401 baud rate options for Watz ROM
|
||||
- update SW401 & SW402 definitions for Super-19 ROM
|
||||
TODO:
|
||||
- speed up emulation
|
||||
- update SW401 baud rate options for Watz ROM
|
||||
- update SW401 & SW402 definitions for Super-19 ROM
|
||||
|
||||
****************************************************************************/
|
||||
/***************************************************************************
|
||||
|
@ -78,7 +78,7 @@
|
||||
Timing and pixel size for real 98750A are slightly different between
|
||||
alpha and graphics raster (dual raster):
|
||||
|
||||
alpha graphics
|
||||
alpha graphics
|
||||
------------------------------------------------------
|
||||
Matrix: 720x375 560x455
|
||||
Clock frequency: 20.85 MHz 20.85 MHz
|
||||
@ -95,7 +95,7 @@
|
||||
hold up to 30 rows with full size characters plus some lines for one row with
|
||||
cropped characters:
|
||||
|
||||
98770A 98780A
|
||||
98770A 98780A
|
||||
------------------------------------------------------
|
||||
Matrix: 720x455 720x455
|
||||
Clock frequency: 29.7984 MHz 28.224 MHz
|
||||
@ -109,8 +109,8 @@
|
||||
*/
|
||||
|
||||
// Base address of video buffer
|
||||
#define VIDEO_BUFFER_BASE_LOW 0x16000 // for 98770A and 98780A
|
||||
#define VIDEO_BUFFER_BASE_HIGH 0x17000 // for 98750A
|
||||
#define VIDEO_BUFFER_BASE_LOW 0x16000 // for 98770A and 98780A
|
||||
#define VIDEO_BUFFER_BASE_HIGH 0x17000 // for 98750A
|
||||
|
||||
// For test "B" of alpha video to succeed this must be < 234
|
||||
// Basically "B" test is designed to intentionally prevent line buffer to be filled so that display is blanked
|
||||
@ -129,7 +129,7 @@
|
||||
#define VIDEO_HTOTAL (VIDEO_CHAR_WIDTH * VIDEO_CHAR_TOTAL)
|
||||
#define VIDEO_VTOTAL (VIDEO_CHAR_HEIGHT * VIDEO_ROWS_TOTAL)
|
||||
#define VIDEO_ACTIVE_SCANLINES (VIDEO_CHAR_HEIGHT * VIDEO_CHAR_ROWS)
|
||||
#define VIDEO_TOT_HPIXELS (VIDEO_CHAR_WIDTH * VIDEO_CHAR_COLUMNS)
|
||||
#define VIDEO_TOT_HPIXELS (VIDEO_CHAR_WIDTH * VIDEO_CHAR_COLUMNS)
|
||||
|
||||
// Constants of graphic video
|
||||
// Pixel clock is 20.8494 MHz (the same as alpha video)
|
||||
@ -151,35 +151,35 @@
|
||||
|
||||
// Constants of 98770A video
|
||||
// HBEND & VBEND probably are not really 0
|
||||
#define VIDEO_770_PIXEL_CLOCK 29798400
|
||||
#define VIDEO_770_HTOTAL 1024
|
||||
#define VIDEO_770_HBEND 0
|
||||
#define VIDEO_770_HBSTART (VIDEO_CHAR_COLUMNS * VIDEO_CHAR_WIDTH)
|
||||
#define VIDEO_770_VTOTAL 485
|
||||
#define VIDEO_770_VBEND 0
|
||||
#define VIDEO_770_VBSTART (VIDEO_770_VBEND + GVIDEO_VPIXELS)
|
||||
#define VIDEO_770_ALPHA_L_LIM 80 // Left-side limit of alpha-only horizontal part
|
||||
#define VIDEO_770_ALPHA_R_LIM 640 // Right-side limit of alpha-only horizontal part
|
||||
#define VIDEO_770_PIXEL_CLOCK 29798400
|
||||
#define VIDEO_770_HTOTAL 1024
|
||||
#define VIDEO_770_HBEND 0
|
||||
#define VIDEO_770_HBSTART (VIDEO_CHAR_COLUMNS * VIDEO_CHAR_WIDTH)
|
||||
#define VIDEO_770_VTOTAL 485
|
||||
#define VIDEO_770_VBEND 0
|
||||
#define VIDEO_770_VBSTART (VIDEO_770_VBEND + GVIDEO_VPIXELS)
|
||||
#define VIDEO_770_ALPHA_L_LIM 80 // Left-side limit of alpha-only horizontal part
|
||||
#define VIDEO_770_ALPHA_R_LIM 640 // Right-side limit of alpha-only horizontal part
|
||||
|
||||
#define I_GR 0xb0 // graphics intensity
|
||||
#define I_AL 0xd0 // alpha intensity
|
||||
#define I_CU 0xf0 // graphics cursor intensity
|
||||
#define I_LP 0xff // light pen cursor intensity
|
||||
#define I_GR 0xb0 // graphics intensity
|
||||
#define I_AL 0xd0 // alpha intensity
|
||||
#define I_CU 0xf0 // graphics cursor intensity
|
||||
#define I_LP 0xff // light pen cursor intensity
|
||||
|
||||
// Palette indexes (for monochromatic screens)
|
||||
#define PEN_BLACK 0 // Black
|
||||
#define PEN_GRAPHIC 1 // Graphics
|
||||
#define PEN_ALPHA 2 // Text
|
||||
#define PEN_CURSOR 3 // Graphic cursor
|
||||
#define PEN_LP 4 // Light pen cursor
|
||||
#define PEN_BLACK 0 // Black
|
||||
#define PEN_GRAPHIC 1 // Graphics
|
||||
#define PEN_ALPHA 2 // Text
|
||||
#define PEN_CURSOR 3 // Graphic cursor
|
||||
#define PEN_LP 4 // Light pen cursor
|
||||
|
||||
// Light pen constants
|
||||
constexpr unsigned LP_FOV = 9; // Field of view
|
||||
constexpr unsigned LP_XOFFSET = 5; // x-offset of LP (due to delay in hit recognition)
|
||||
constexpr unsigned LP_FOV = 9; // Field of view
|
||||
constexpr unsigned LP_XOFFSET = 5; // x-offset of LP (due to delay in hit recognition)
|
||||
|
||||
// Peripheral Addresses (PA)
|
||||
#define IO_SLOT_FIRST_PA 1
|
||||
#define IO_SLOT_LAST_PA 12
|
||||
#define IO_SLOT_FIRST_PA 1
|
||||
#define IO_SLOT_LAST_PA 12
|
||||
#define T15_PA 15
|
||||
|
||||
#define KEY_SCAN_OSCILLATOR 327680
|
||||
@ -754,10 +754,10 @@ void hp9845b_state::machine_start()
|
||||
m_graphic_mem.resize(GVIDEO_MEM_SIZE);
|
||||
|
||||
// initialize palette
|
||||
m_palette->set_pen_color(PEN_BLACK , 0x00, 0x00, 0x00); // black
|
||||
m_palette->set_pen_color(PEN_GRAPHIC, 0x00, I_GR, 0x00); // graphics
|
||||
m_palette->set_pen_color(PEN_ALPHA , 0x00, I_AL, 0x00); // alpha
|
||||
m_palette->set_pen_color(PEN_CURSOR , 0x00, I_CU, 0x00); // graphics cursor
|
||||
m_palette->set_pen_color(PEN_BLACK , 0x00, 0x00, 0x00); // black
|
||||
m_palette->set_pen_color(PEN_GRAPHIC, 0x00, I_GR, 0x00); // graphics
|
||||
m_palette->set_pen_color(PEN_ALPHA , 0x00, I_AL, 0x00); // alpha
|
||||
m_palette->set_pen_color(PEN_CURSOR , 0x00, I_CU, 0x00); // graphics cursor
|
||||
}
|
||||
|
||||
void hp9845b_state::machine_reset()
|
||||
@ -789,7 +789,7 @@ READ16_MEMBER(hp9845b_state::graphic_r)
|
||||
if (m_gv_dma_en) {
|
||||
BIT_SET(res, 6);
|
||||
}
|
||||
BIT_SET(res, 5); // ID
|
||||
BIT_SET(res, 5); // ID
|
||||
break;
|
||||
|
||||
case 2:
|
||||
@ -1487,7 +1487,7 @@ void hp9845ct_state::draw_line(unsigned x0 , unsigned y0 , unsigned x1 , unsigne
|
||||
x = x0;
|
||||
y = y0;
|
||||
dx = abs((int) (x1 - x));
|
||||
sx = x < x1 ? 1 : -1; // actually always 1 because of normalization
|
||||
sx = x < x1 ? 1 : -1; // actually always 1 because of normalization
|
||||
dy = abs((int) (y1 - y));
|
||||
sy = y < y1 ? 1 : -1;
|
||||
err = (dx > dy ? dx : -dy) / 2;
|
||||
@ -1682,7 +1682,7 @@ uint16_t hp9845ct_state::lp_r4_r(void)
|
||||
void hp9845ct_state::lp_r5_w(uint16_t data)
|
||||
{
|
||||
m_gv_lp_reg_cnt = data & 7;
|
||||
m_gv_lp_en = (data & 0x700) == 0x400; // enables writes on R4 to set LP data (actually FB bit), also enables LP command processing and LP IRQs
|
||||
m_gv_lp_en = (data & 0x700) == 0x400; // enables writes on R4 to set LP data (actually FB bit), also enables LP command processing and LP IRQs
|
||||
m_gv_lp_int_en = (data & 0x500) == 0x400;
|
||||
m_gv_lp_selftest = m_gv_lp_en && m_gv_lp_reg_cnt == 7;
|
||||
update_graphic_bits();
|
||||
@ -1727,7 +1727,7 @@ void hp9845ct_state::compute_lp_data(void)
|
||||
uint16_t xleft = 0;
|
||||
uint16_t yleft = 0;
|
||||
uint16_t ylo = 0;
|
||||
uint16_t xp = m_gv_lp_x; // light gun pointer
|
||||
uint16_t xp = m_gv_lp_x; // light gun pointer
|
||||
uint16_t yp = m_gv_lp_y;
|
||||
int yc = get_lp_cursor_y_top() + 24;
|
||||
|
||||
@ -1735,10 +1735,10 @@ void hp9845ct_state::compute_lp_data(void)
|
||||
constexpr int offset = 57 - VIDEO_770_ALPHA_L_LIM;
|
||||
xwindow[ 0 ] = xwindow[ 1 ] = xwindow[ 2 ] = true;
|
||||
ywindow[ 0 ] = ywindow[ 1 ] = ywindow[ 2 ] = true;
|
||||
yhi = m_gv_lp_cursor_y + 16; // YHI
|
||||
xleft = m_gv_lp_cursor_x + offset; // XLEFT
|
||||
yhi = m_gv_lp_cursor_y + 16; // YHI
|
||||
xleft = m_gv_lp_cursor_x + offset; // XLEFT
|
||||
yleft = yhi;
|
||||
ylo = m_gv_lp_cursor_y + 32; // YLO
|
||||
ylo = m_gv_lp_cursor_y + 32; // YLO
|
||||
} else {
|
||||
// Hit in a cursor-only part.
|
||||
bool yhi_hit = false;
|
||||
@ -1799,9 +1799,9 @@ void hp9845ct_state::compute_lp_data(void)
|
||||
ywindow[ 1 ] = yleft == yc;
|
||||
ywindow[ 2 ] = yleft == yc && ylo >= yleft;
|
||||
}
|
||||
m_gv_next_lp_data[ 0 ] = ~yhi & 0x1ff; // YHI
|
||||
m_gv_next_lp_data[ 1 ] = ~xleft & 0x3ff; // XLEFT
|
||||
m_gv_next_lp_data[ 2 ] = ~ylo & 0x1ff; // YLO
|
||||
m_gv_next_lp_data[ 0 ] = ~yhi & 0x1ff; // YHI
|
||||
m_gv_next_lp_data[ 1 ] = ~xleft & 0x3ff; // XLEFT
|
||||
m_gv_next_lp_data[ 2 ] = ~ylo & 0x1ff; // YLO
|
||||
|
||||
if (!xwindow[ 0 ]) {
|
||||
BIT_SET(m_gv_next_lp_data[ 0 ], 13);
|
||||
@ -1924,34 +1924,34 @@ void hp9845c_state::machine_start()
|
||||
|
||||
// initialize palette
|
||||
// graphics colors
|
||||
m_palette->set_pen_color(0, 0x00, 0x00, 0x00); // black
|
||||
m_palette->set_pen_color(1, I_GR, 0x00, 0x00); // red
|
||||
m_palette->set_pen_color(2, 0x00, I_GR, 0x00); // green
|
||||
m_palette->set_pen_color(3, I_GR, I_GR, 0x00); // yellow
|
||||
m_palette->set_pen_color(4, 0x00, 0x00, I_GR); // blue
|
||||
m_palette->set_pen_color(5, I_GR, 0x00, I_GR); // magenta
|
||||
m_palette->set_pen_color(6, 0x00, I_GR, I_GR); // cyan
|
||||
m_palette->set_pen_color(7, I_GR, I_GR, I_GR); // white
|
||||
m_palette->set_pen_color(0, 0x00, 0x00, 0x00); // black
|
||||
m_palette->set_pen_color(1, I_GR, 0x00, 0x00); // red
|
||||
m_palette->set_pen_color(2, 0x00, I_GR, 0x00); // green
|
||||
m_palette->set_pen_color(3, I_GR, I_GR, 0x00); // yellow
|
||||
m_palette->set_pen_color(4, 0x00, 0x00, I_GR); // blue
|
||||
m_palette->set_pen_color(5, I_GR, 0x00, I_GR); // magenta
|
||||
m_palette->set_pen_color(6, 0x00, I_GR, I_GR); // cyan
|
||||
m_palette->set_pen_color(7, I_GR, I_GR, I_GR); // white
|
||||
|
||||
// alpha colors
|
||||
m_palette->set_pen_color(8, 0x00, 0x00, 0x00); // black
|
||||
m_palette->set_pen_color(9, I_AL, 0x00, 0x00); // red
|
||||
m_palette->set_pen_color(10, 0x00, I_AL, 0x00); // green
|
||||
m_palette->set_pen_color(11, I_AL, I_AL, 0x00); // yellow
|
||||
m_palette->set_pen_color(12, 0x00, 0x00, I_AL); // blue
|
||||
m_palette->set_pen_color(13, I_AL, 0x00, I_AL); // magenta
|
||||
m_palette->set_pen_color(14, 0x00, I_AL, I_AL); // cyan
|
||||
m_palette->set_pen_color(15, I_AL, I_AL, I_AL); // white
|
||||
m_palette->set_pen_color(8, 0x00, 0x00, 0x00); // black
|
||||
m_palette->set_pen_color(9, I_AL, 0x00, 0x00); // red
|
||||
m_palette->set_pen_color(10, 0x00, I_AL, 0x00); // green
|
||||
m_palette->set_pen_color(11, I_AL, I_AL, 0x00); // yellow
|
||||
m_palette->set_pen_color(12, 0x00, 0x00, I_AL); // blue
|
||||
m_palette->set_pen_color(13, I_AL, 0x00, I_AL); // magenta
|
||||
m_palette->set_pen_color(14, 0x00, I_AL, I_AL); // cyan
|
||||
m_palette->set_pen_color(15, I_AL, I_AL, I_AL); // white
|
||||
|
||||
// cursor colors
|
||||
m_palette->set_pen_color(16, 0x80, 0x80, 0x80); // grey
|
||||
m_palette->set_pen_color(17, I_CU, 0x00, 0x00); // red
|
||||
m_palette->set_pen_color(18, 0x00, I_CU, 0x00); // green
|
||||
m_palette->set_pen_color(19, I_CU, I_CU, 0x00); // yellow
|
||||
m_palette->set_pen_color(20, 0x00, 0x00, I_CU); // blue
|
||||
m_palette->set_pen_color(21, I_CU, 0x00, I_CU); // magenta
|
||||
m_palette->set_pen_color(22, 0x00, I_CU, I_CU); // cyan
|
||||
m_palette->set_pen_color(23, I_CU, I_CU, I_CU); // white
|
||||
m_palette->set_pen_color(16, 0x80, 0x80, 0x80); // grey
|
||||
m_palette->set_pen_color(17, I_CU, 0x00, 0x00); // red
|
||||
m_palette->set_pen_color(18, 0x00, I_CU, 0x00); // green
|
||||
m_palette->set_pen_color(19, I_CU, I_CU, 0x00); // yellow
|
||||
m_palette->set_pen_color(20, 0x00, 0x00, I_CU); // blue
|
||||
m_palette->set_pen_color(21, I_CU, 0x00, I_CU); // magenta
|
||||
m_palette->set_pen_color(22, 0x00, I_CU, I_CU); // cyan
|
||||
m_palette->set_pen_color(23, I_CU, I_CU, I_CU); // white
|
||||
}
|
||||
|
||||
void hp9845c_state::machine_reset()
|
||||
@ -1993,13 +1993,13 @@ READ16_MEMBER(hp9845c_state::graphic_r)
|
||||
BIT_SET(res, 6);
|
||||
}
|
||||
if (m_gv_lp_status && m_gv_lp_int_en) {
|
||||
BIT_SET(res, 0); // Lightpen service request
|
||||
BIT_SET(res, 0); // Lightpen service request
|
||||
}
|
||||
if (m_gv_sk_status) {
|
||||
BIT_SET(res, 1); // Softkey service request
|
||||
BIT_SET(res, 1); // Softkey service request
|
||||
m_gv_sk_status = false;
|
||||
}
|
||||
BIT_SET(res, 11); // ID
|
||||
BIT_SET(res, 11); // ID
|
||||
|
||||
update_graphic_bits();
|
||||
break;
|
||||
@ -2042,12 +2042,12 @@ WRITE16_MEMBER(hp9845c_state::graphic_w)
|
||||
m_gv_cmd = (uint8_t)(data & 0xf);
|
||||
m_gv_dma_en = BIT(data , 6) != 0;
|
||||
m_gv_int_en = BIT(data , 7) != 0;
|
||||
m_gv_gr_en = BIT(data , 8); // enables graphics controller & vector generator command processing and IRQs
|
||||
m_gv_sk_en = BIT(data , 9); // enables reads on R4 to return SK keycode, also enables SK IRQs
|
||||
m_gv_opt_en = BIT(data , 11); // not really used
|
||||
m_gv_dsa_en = BIT(data , 12); // for factory use only (unknown)
|
||||
m_gv_gr_en = BIT(data , 8); // enables graphics controller & vector generator command processing and IRQs
|
||||
m_gv_sk_en = BIT(data , 9); // enables reads on R4 to return SK keycode, also enables SK IRQs
|
||||
m_gv_opt_en = BIT(data , 11); // not really used
|
||||
m_gv_dsa_en = BIT(data , 12); // for factory use only (unknown)
|
||||
if (BIT(data, 5)) {
|
||||
m_gv_fsm_state = GV_STAT_RESET; // command/reset state machine
|
||||
m_gv_fsm_state = GV_STAT_RESET; // command/reset state machine
|
||||
}
|
||||
advance_gv_fsm(false , false);
|
||||
lp_r5_w(data);
|
||||
@ -2344,7 +2344,7 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
// read words command
|
||||
check_io_counter_restore();
|
||||
LOG(("read words, last = %x\n", m_gv_last_cmd));
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_0; // -> read stream
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_0; // -> read stream
|
||||
m_gv_last_cmd = m_gv_cmd;
|
||||
} else if (ds) {
|
||||
if ((m_gv_cmd == 0x0) || (m_gv_cmd == 0x2)) {
|
||||
@ -2352,10 +2352,10 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
check_io_counter_restore();
|
||||
if (m_gv_cmd == 0x2) LOG(("clear/set words, last = %x\n", m_gv_last_cmd));
|
||||
else LOG(("write words, last = %x\n", m_gv_last_cmd));
|
||||
m_gv_fsm_state = GV_STAT_WAIT_TRIG_1; // -> write stream
|
||||
m_gv_fsm_state = GV_STAT_WAIT_TRIG_1; // -> write stream
|
||||
} else {
|
||||
// any other command
|
||||
m_gv_fsm_state = GV_STAT_WAIT_TRIG_0; // -> wait for trigger
|
||||
m_gv_fsm_state = GV_STAT_WAIT_TRIG_0; // -> wait for trigger
|
||||
}
|
||||
m_gv_last_cmd = m_gv_cmd;
|
||||
} else {
|
||||
@ -2367,25 +2367,25 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
// process data on R4 or R6
|
||||
if (act_trig) {
|
||||
switch (m_gv_cmd) {
|
||||
case 0x8: // load X I/O address
|
||||
m_gv_word_x_position = ~m_gv_data_w & 0x3f; // 0..34
|
||||
case 0x8: // load X I/O address
|
||||
m_gv_word_x_position = ~m_gv_data_w & 0x3f; // 0..34
|
||||
LOG(("load X I/O adress = %04x\n", m_gv_word_x_position));
|
||||
m_gv_io_counter = get_gv_mem_addr(m_gv_word_x_position , m_gv_word_y_position);
|
||||
m_gv_plane = 0;
|
||||
m_gv_plane_wrap = false;
|
||||
break;
|
||||
case 0x9: // load Y I/O address
|
||||
m_gv_word_y_position = ~m_gv_data_w & 0x1ff; // 0..454
|
||||
case 0x9: // load Y I/O address
|
||||
m_gv_word_y_position = ~m_gv_data_w & 0x1ff; // 0..454
|
||||
LOG(("load Y I/O adress = %04x\n", m_gv_word_y_position));
|
||||
m_gv_io_counter = get_gv_mem_addr(m_gv_word_x_position , m_gv_word_y_position);
|
||||
m_gv_plane = 0;
|
||||
m_gv_plane_wrap = false;
|
||||
break;
|
||||
case 0xa: // load memory control
|
||||
case 0xa: // load memory control
|
||||
m_gv_memory_control = m_gv_data_w & 0x7f;
|
||||
LOG(("load memory control = %04x\n", m_gv_memory_control));
|
||||
break;
|
||||
case 0xb: // set line type/area fill
|
||||
case 0xb: // set line type/area fill
|
||||
m_gv_line_type_area_fill = m_gv_data_w & 0x1ff;
|
||||
if (BIT(m_gv_line_type_area_fill, 4)) {
|
||||
m_gv_line_type_mask = m_line_type[ m_gv_line_type_area_fill & 0x7 ];
|
||||
@ -2393,21 +2393,21 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
}
|
||||
LOG(("set line type = %04x\n", m_gv_line_type_area_fill));
|
||||
break;
|
||||
case 0xc: // load color mask
|
||||
case 0xc: // load color mask
|
||||
m_gv_music_memory = m_gv_data_w & 0x1ff;
|
||||
LOG(("load color mask = %04x\n", m_gv_music_memory));
|
||||
break;
|
||||
case 0xd: // load end points
|
||||
case 0xd: // load end points
|
||||
m_gv_ypt = ~m_gv_data_w & 0x1ff;
|
||||
LOG(("load end points y = %d\n", m_gv_ypt));
|
||||
break;
|
||||
case 0xe: // Y cursor position & color
|
||||
case 0xe: // Y cursor position & color
|
||||
m_gv_cursor_color = ~m_gv_data_w & 0x7;
|
||||
m_gv_cursor_y = 1073 - (m_gv_data_w >> 6);
|
||||
if (m_gv_cursor_fs) m_gv_cursor_y -= 8;
|
||||
LOG(("Y cursor position = %d, color = %d\n", m_gv_cursor_y, m_gv_cursor_color));
|
||||
break;
|
||||
case 0xf: // X cursor position & type
|
||||
case 0xf: // X cursor position & type
|
||||
m_gv_cursor_fs = BIT(m_gv_data_w, 0);
|
||||
m_gv_cursor_gc = BIT(m_gv_data_w, 1) || m_gv_cursor_fs;
|
||||
m_gv_cursor_x = ((m_gv_data_w >> 6) & 0x3ff) - 42;
|
||||
@ -2419,10 +2419,10 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
logerror("unknown 98770A command = %d, parm = 0x%04x\n", m_gv_cmd, m_gv_data_w);
|
||||
}
|
||||
if (m_gv_cmd == 0xd) {
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_2; // -> get second data word
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_2; // -> get second data word
|
||||
} else {
|
||||
get_out = true;
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_0; // -> done
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_0; // -> done
|
||||
}
|
||||
} else {
|
||||
get_out = true;
|
||||
@ -2437,7 +2437,7 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
m_gv_data_r = m_graphic_mem[ m_gv_plane ][ m_gv_io_counter ];
|
||||
LOG(("read words @%04x = %04x, plane #%d\n" , m_gv_io_counter , m_gv_data_r, m_gv_plane + 1));
|
||||
advance_io_counter();
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_1; // -> proceed with read stream
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_1; // -> proceed with read stream
|
||||
} else {
|
||||
m_gv_timer->adjust(time_mem_av);
|
||||
get_out = true;
|
||||
@ -2448,7 +2448,7 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
// wait for data word to be read
|
||||
if (ds) {
|
||||
// -- next word
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_0; // -> process data word
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_0; // -> process data word
|
||||
} else {
|
||||
// -- done
|
||||
get_out = true;
|
||||
@ -2459,7 +2459,7 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
// wait for data word to be written
|
||||
if (ds) {
|
||||
// -- next word
|
||||
m_gv_fsm_state = GV_STAT_WAIT_TRIG_1; // -> process data word
|
||||
m_gv_fsm_state = GV_STAT_WAIT_TRIG_1; // -> process data word
|
||||
} else {
|
||||
// done
|
||||
get_out = true;
|
||||
@ -2475,20 +2475,20 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
if (BIT(m_gv_data_w, 10)) {
|
||||
// draw vector
|
||||
LOG(("load end points x = %d (draw)\n", m_gv_xpt));
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_2; // -> proceed with draw vector
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_2; // -> proceed with draw vector
|
||||
} else {
|
||||
LOG(("load end points x = %d (move)\n", m_gv_xpt));
|
||||
m_gv_last_xpt = m_gv_xpt;
|
||||
m_gv_last_ypt = m_gv_ypt;
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_0; // -> proceed with next word pair
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_0; // -> proceed with next word pair
|
||||
}
|
||||
} else if (m_gv_cmd == 0x2) {
|
||||
// clear/set words command
|
||||
m_gv_data_w = BIT(m_gv_memory_control, m_gv_plane + 3) ? 0xffff : 0;
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_1; // -> proceed with next word
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_1; // -> proceed with next word
|
||||
} else if (m_gv_cmd == 0x0) {
|
||||
// write words command
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_1; // -> proceed with next word
|
||||
m_gv_fsm_state = GV_STAT_WAIT_MEM_1; // -> proceed with next word
|
||||
}
|
||||
} else {
|
||||
// done
|
||||
@ -2506,7 +2506,7 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
m_graphic_mem[ m_gv_plane ][ m_gv_io_counter ] = m_gv_data_w;
|
||||
}
|
||||
advance_io_counter();
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_2; // -> proceed with write stream
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_2; // -> proceed with write stream
|
||||
} else {
|
||||
m_gv_timer->adjust(time_mem_av);
|
||||
get_out = true;
|
||||
@ -2544,7 +2544,7 @@ void hp9845c_state::advance_gv_fsm(bool ds , bool trigger)
|
||||
}
|
||||
m_gv_last_xpt = m_gv_xpt;
|
||||
m_gv_last_ypt = m_gv_ypt;
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_0; // -> proceed with next word pair
|
||||
m_gv_fsm_state = GV_STAT_WAIT_DS_0; // -> proceed with next word pair
|
||||
} else {
|
||||
m_gv_timer->adjust(time_mem_av);
|
||||
get_out = true;
|
||||
@ -2594,31 +2594,31 @@ static MACHINE_CONFIG_START( hp9835a, hp9845_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/*
|
||||
Global memory map in blocks of 32 kwords / 64 kbytes each:
|
||||
Global memory map in blocks of 32 kwords / 64 kbytes each:
|
||||
|
||||
block 0: 0x000000 - 0x007fff (LPU RAM)
|
||||
block 1: 0x008000 - 0x00ffff (PPU RAM, only 0x00c000 - 0x00ffff used)
|
||||
block 2: 0x010000 - 0x017fff (unused)
|
||||
block 3: 0x018000 - 0x01ffff (LPU system ROM)
|
||||
block 4: 0x020000 - 0x027fff (LPU RAM)
|
||||
block 5: 0x028000 - 0x02ffff (PPU system ROM)
|
||||
block 6: 0x030000 - 0x037fff (LPU RAM)
|
||||
block 7: 0x038000 - 0x03ffff (LPU option ROM)
|
||||
block 10: 0x040000 - 0x047fff (LPU RAM)
|
||||
block 11: 0x048000 - 0x04ffff (PPU option ROM)
|
||||
block 12: 0x050000 - 0x057fff (LPU RAM)
|
||||
block 13: 0x058000 - 0x05ffff (LPU option ROM)
|
||||
block 14: 0x060000 - 0x067fff (LPU RAM)
|
||||
block 15: 0x068000 - 0x06ffff (PPU option ROM)
|
||||
block 16: 0x070000 - 0x077fff (LPU RAM)
|
||||
block 17: 0x078000 - 0x07ffff (unused)
|
||||
block 0: 0x000000 - 0x007fff (LPU RAM)
|
||||
block 1: 0x008000 - 0x00ffff (PPU RAM, only 0x00c000 - 0x00ffff used)
|
||||
block 2: 0x010000 - 0x017fff (unused)
|
||||
block 3: 0x018000 - 0x01ffff (LPU system ROM)
|
||||
block 4: 0x020000 - 0x027fff (LPU RAM)
|
||||
block 5: 0x028000 - 0x02ffff (PPU system ROM)
|
||||
block 6: 0x030000 - 0x037fff (LPU RAM)
|
||||
block 7: 0x038000 - 0x03ffff (LPU option ROM)
|
||||
block 10: 0x040000 - 0x047fff (LPU RAM)
|
||||
block 11: 0x048000 - 0x04ffff (PPU option ROM)
|
||||
block 12: 0x050000 - 0x057fff (LPU RAM)
|
||||
block 13: 0x058000 - 0x05ffff (LPU option ROM)
|
||||
block 14: 0x060000 - 0x067fff (LPU RAM)
|
||||
block 15: 0x068000 - 0x06ffff (PPU option ROM)
|
||||
block 16: 0x070000 - 0x077fff (LPU RAM)
|
||||
block 17: 0x078000 - 0x07ffff (unused)
|
||||
|
||||
notes:
|
||||
- all block numbers are octal
|
||||
- blocks 20 to 76 are reserved for 512 kbyte RAM boards (p/n 09845-66590)
|
||||
- block 45 is reserved for the Test ROM
|
||||
- memory addresses are continuous (for convenience, the mapping below uses block numbers as
|
||||
address part above 0xffff, so there are gaps between 0x8000 and 0xffff which are masked out).
|
||||
notes:
|
||||
- all block numbers are octal
|
||||
- blocks 20 to 76 are reserved for 512 kbyte RAM boards (p/n 09845-66590)
|
||||
- block 45 is reserved for the Test ROM
|
||||
- memory addresses are continuous (for convenience, the mapping below uses block numbers as
|
||||
address part above 0xffff, so there are gaps between 0x8000 and 0xffff which are masked out).
|
||||
- all LPU RAM is dynamically mapped at machine start according to -ramsize option
|
||||
*/
|
||||
|
||||
|
@ -306,43 +306,43 @@ Useful links etc.
|
||||
bitsavers://pdf/hp/integral/00095-90126_Integral_Personal_Computer_Service_Jan86.pdf
|
||||
|
||||
bitsavers://pdf/hp/hp-hil/45918A-90001_HP-HIL_Technical_Reference_Manual_Jan86.pdf
|
||||
HP-HIL MLC, SLC datasheets
|
||||
HP-HIL MLC, SLC datasheets
|
||||
|
||||
bitsavers://pdf/sony/floppy/Sony_OA-D32_Microfloppy_Service_Nov83.pdf
|
||||
OA-D32W
|
||||
OA-D32W
|
||||
|
||||
http://www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/1983-01.pdf
|
||||
HP-IL issue
|
||||
HP-IL issue
|
||||
|
||||
http://www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/1985-10.pdf
|
||||
IPC issue
|
||||
IPC issue
|
||||
|
||||
http://www.hpl.hp.com/hpjournal/pdfs/IssuePDFs/1987-06.pdf
|
||||
HP-HIL article
|
||||
HP-HIL article
|
||||
|
||||
http://www.hpmuseum.net/pdf/ComputerNews_1985_Jan15_37pages_OCR.pdf
|
||||
introducing the IPC
|
||||
introducing the IPC
|
||||
|
||||
http://www.hpmuseum.net/pdf/ComputerFocus_1985_Nov_25pages_OCR.pdf
|
||||
SysV upgrade
|
||||
SysV upgrade
|
||||
|
||||
http://www.hpmuseum.net/pdf/InformationSystemsAndManufacturingNews_81pages_Jun1-86_OCR.pdf
|
||||
EPROM/ROM modules
|
||||
EPROM/ROM modules
|
||||
|
||||
http://www.hpmuseum.net/pdf/HPChannels_1986_11_37pages_Nov86_OCR.pdf
|
||||
SW Eng ROM and serial option for it
|
||||
SW Eng ROM and serial option for it
|
||||
|
||||
http://www.coho.org/~pete/downloads/IPC/burst/Freeware/IPC_Driver_Writers_Disc/hp-ux.5.0.0
|
||||
kernel namelist
|
||||
kernel namelist
|
||||
|
||||
http://www.hpmuseum.net/display_item.php?hw=122
|
||||
overview, manuals, software
|
||||
overview, manuals, software
|
||||
|
||||
http://www.ambry.com/hp-computer-model/9807A.html
|
||||
replacement parts
|
||||
replacement parts
|
||||
|
||||
http://www.brouhaha.com/~eric/hpcalc/chips/
|
||||
chip part numbers
|
||||
chip part numbers
|
||||
|
||||
|
||||
Software to look for
|
||||
@ -473,20 +473,20 @@ static ADDRESS_MAP_START(hp_ipc_mem_inner, AS_PROGRAM, 16, hp_ipc_state)
|
||||
AM_RANGE(0x1E40000, 0x1E4002F) AM_DEVREADWRITE8("rtc", mm58167_device, read, write, 0x00ff)
|
||||
|
||||
// supervisor mode
|
||||
AM_RANGE(0x0000000, 0x007FFFF) AM_ROM AM_REGION("maincpu", 0) // Internal ROM (operating system PCA)
|
||||
AM_RANGE(0x0080000, 0x00FFFFF) AM_UNMAP // Internal ROM (option ROM PCA)
|
||||
AM_RANGE(0x0100000, 0x04FFFFF) AM_UNMAP // External ROM modules
|
||||
AM_RANGE(0x0000000, 0x007FFFF) AM_ROM AM_REGION("maincpu", 0) // Internal ROM (operating system PCA)
|
||||
AM_RANGE(0x0080000, 0x00FFFFF) AM_UNMAP // Internal ROM (option ROM PCA)
|
||||
AM_RANGE(0x0100000, 0x04FFFFF) AM_UNMAP // External ROM modules
|
||||
AM_RANGE(0x0600000, 0x060FFFF) AM_READWRITE(mmu_r, mmu_w)
|
||||
AM_RANGE(0x0610000, 0x0610007) AM_READWRITE8(floppy_id_r, floppy_id_w, 0x00ff)
|
||||
AM_RANGE(0x0610008, 0x061000F) AM_DEVREADWRITE8("fdc", wd2797_t, read, write, 0x00ff)
|
||||
AM_RANGE(0x0620000, 0x062000F) AM_DEVREADWRITE8("gpu", hp1ll3_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x0630000, 0x063FFFF) AM_NOP // AM_DEVREADWRITE8(TMS9914_TAG, tms9914_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x0630000, 0x063FFFF) AM_NOP // AM_DEVREADWRITE8(TMS9914_TAG, tms9914_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x0640000, 0x064002F) AM_DEVREADWRITE8("rtc", mm58167_device, read, write, 0x00ff)
|
||||
AM_RANGE(0x0650000, 0x065FFFF) AM_NOP // HP-IL Printer (optional; ROM sets _desktop to 0 if not mapped) -- sys/lpint.h
|
||||
AM_RANGE(0x0660000, 0x06600FF) AM_DEVREADWRITE8("mlc", hp_hil_mlc_device, read, write, 0x00ff) // 'caravan', scrn/caravan.h
|
||||
AM_RANGE(0x0670000, 0x067FFFF) AM_NOP // Speaker (NatSemi COP 452)
|
||||
AM_RANGE(0x0680000, 0x068FFFF) AM_NOP // 'SIMON (98628) fast HP-IB card' -- sys/simon.h
|
||||
AM_RANGE(0x0700000, 0x07FFFFF) AM_UNMAP // External I/O
|
||||
AM_RANGE(0x0650000, 0x065FFFF) AM_NOP // HP-IL Printer (optional; ROM sets _desktop to 0 if not mapped) -- sys/lpint.h
|
||||
AM_RANGE(0x0660000, 0x06600FF) AM_DEVREADWRITE8("mlc", hp_hil_mlc_device, read, write, 0x00ff) // 'caravan', scrn/caravan.h
|
||||
AM_RANGE(0x0670000, 0x067FFFF) AM_NOP // Speaker (NatSemi COP 452)
|
||||
AM_RANGE(0x0680000, 0x068FFFF) AM_NOP // 'SIMON (98628) fast HP-IB card' -- sys/simon.h
|
||||
AM_RANGE(0x0700000, 0x07FFFFF) AM_UNMAP // External I/O
|
||||
AM_RANGE(0x0800000, 0x0FFFFFF) AM_READWRITE(ram_r, ram_w)
|
||||
|
||||
// bus error handler
|
||||
@ -699,15 +699,15 @@ static SLOT_INTERFACE_START( hp_ipc_floppies )
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
/*
|
||||
* IRQ levels (page 5-4)
|
||||
* IRQ levels (page 5-4)
|
||||
*
|
||||
* 7 Soft reset from keyboard, non-maskable
|
||||
* 6 Real-time clock or NBIR3 (ext. I/O)
|
||||
* 5 Disc Drive or NBIR2
|
||||
* 4 GPU or NBIR1
|
||||
* 3 HP-IB, printer, or NBIR0
|
||||
* 2 HP-HIL devices (keyboard, mouse)
|
||||
* 1 Real-time clock
|
||||
* 7 Soft reset from keyboard, non-maskable
|
||||
* 6 Real-time clock or NBIR3 (ext. I/O)
|
||||
* 5 Disc Drive or NBIR2
|
||||
* 4 GPU or NBIR1
|
||||
* 3 HP-IB, printer, or NBIR0
|
||||
* 2 HP-HIL devices (keyboard, mouse)
|
||||
* 1 Real-time clock
|
||||
*/
|
||||
static MACHINE_CONFIG_START(hp_ipc, hp_ipc_state)
|
||||
MCFG_CPU_ADD("maincpu", M68000, XTAL_15_92MHz / 2)
|
||||
@ -726,8 +726,8 @@ static MACHINE_CONFIG_START(hp_ipc, hp_ipc_state)
|
||||
MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::amber())
|
||||
MCFG_SCREEN_UPDATE_DEVICE("gpu", hp1ll3_device, screen_update)
|
||||
MCFG_SCREEN_RAW_PARAMS(XTAL_6MHz * 2, 720, 0, 512, 278, 0, 256)
|
||||
// when _desktop == 0:
|
||||
// MCFG_SCREEN_RAW_PARAMS(XTAL_6MHz * 2, 720, 0, 640, 480, 0, 400)
|
||||
// when _desktop == 0:
|
||||
// MCFG_SCREEN_RAW_PARAMS(XTAL_6MHz * 2, 720, 0, 640, 480, 0, 400)
|
||||
MCFG_SCREEN_VBLANK_CALLBACK(DEVWRITELINE("mlc", hp_hil_mlc_device, ap_w)) // XXX actually it's driven by 555 (U59)
|
||||
MCFG_DEFAULT_LAYOUT(layout_lcd)
|
||||
|
||||
@ -735,7 +735,7 @@ static MACHINE_CONFIG_START(hp_ipc, hp_ipc_state)
|
||||
MCFG_PALETTE_ADD_MONOCHROME("palette")
|
||||
|
||||
MCFG_HP1LL3_ADD("gpu")
|
||||
// MCFG_HP1LL3_IRQ_CALLBACK(WRITELINE(hp_ipc_state, irq_4))
|
||||
// MCFG_HP1LL3_IRQ_CALLBACK(WRITELINE(hp_ipc_state, irq_4))
|
||||
MCFG_VIDEO_SET_SCREEN("screen")
|
||||
|
||||
// XXX actual clock is 1MHz; remove this workaround (and change 2000 to 100 in hp_ipc_dsk.cpp)
|
||||
@ -748,7 +748,7 @@ static MACHINE_CONFIG_START(hp_ipc, hp_ipc_state)
|
||||
|
||||
MCFG_DEVICE_ADD("rtc", MM58167, XTAL_32_768kHz)
|
||||
MCFG_MM58167_IRQ_CALLBACK(WRITELINE(hp_ipc_state, irq_1))
|
||||
// MCFG_MM58167_STANDBY_IRQ_CALLBACK(WRITELINE(hp_ipc_state, irq_6))
|
||||
// MCFG_MM58167_STANDBY_IRQ_CALLBACK(WRITELINE(hp_ipc_state, irq_6))
|
||||
|
||||
MCFG_DEVICE_ADD("mlc", HP_HIL_MLC, XTAL_15_92MHz/2)
|
||||
MCFG_HP_HIL_INT_CALLBACK(WRITELINE(hp_ipc_state, irq_2))
|
||||
|
@ -51,7 +51,7 @@ public:
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<i8251_device> m_uart8251;
|
||||
// optional_device<i8274_device> m_uart8274;
|
||||
// optional_device<i8274_device> m_uart8274;
|
||||
optional_device<i8274N_device> m_uart8274;
|
||||
required_device<pic8259_device> m_pic_0;
|
||||
optional_device<pic8259_device> m_pic_1;
|
||||
@ -64,7 +64,7 @@ public:
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(isbc86_tmr2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(isbc286_tmr2_w);
|
||||
// DECLARE_WRITE_LINE_MEMBER(isbc_uart8274_irq);
|
||||
// DECLARE_WRITE_LINE_MEMBER(isbc_uart8274_irq);
|
||||
DECLARE_READ8_MEMBER(get_slave_ack);
|
||||
DECLARE_WRITE8_MEMBER(ppi_c_w);
|
||||
DECLARE_WRITE8_MEMBER(upperen_w);
|
||||
@ -168,7 +168,7 @@ static ADDRESS_MAP_START(isbc2861_mem, AS_PROGRAM, 16, isbc_state)
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x00000, 0xdffff) AM_RAM
|
||||
AM_RANGE(0xe0000, 0xfffff) AM_READWRITE(bioslo_r, bioslo_w) AM_SHARE("biosram")
|
||||
// AM_RANGE(0x100000, 0x1fffff) AM_RAM // FIXME: XENIX doesn't like this, IRMX is okay with it
|
||||
// AM_RANGE(0x100000, 0x1fffff) AM_RAM // FIXME: XENIX doesn't like this, IRMX is okay with it
|
||||
AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("user1",0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -361,7 +361,7 @@ static MACHINE_CONFIG_START( isbc286, isbc_state )
|
||||
MCFG_PIT8253_CLK0(XTAL_22_1184MHz/18)
|
||||
MCFG_PIT8253_OUT0_HANDLER(DEVWRITELINE("pic_0", pic8259_device, ir0_w))
|
||||
MCFG_PIT8253_CLK1(XTAL_22_1184MHz/18)
|
||||
// MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("uart8274", z80dart_device, rxtxcb_w))
|
||||
// MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("uart8274", z80dart_device, rxtxcb_w))
|
||||
MCFG_PIT8253_OUT1_HANDLER(DEVWRITELINE("uart8274", i8274N_device, rxtxcb_w))
|
||||
MCFG_PIT8253_CLK2(XTAL_22_1184MHz/18)
|
||||
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(isbc_state, isbc286_tmr2_w))
|
||||
@ -396,7 +396,7 @@ static MACHINE_CONFIG_START( isbc286, isbc_state )
|
||||
MCFG_Z80SIO_OUT_TXDB_CB(DEVWRITELINE("rs232b", rs232_port_device, write_txd))
|
||||
MCFG_Z80SIO_OUT_DTRB_CB(DEVWRITELINE("rs232b", rs232_port_device, write_dtr))
|
||||
MCFG_Z80SIO_OUT_RTSB_CB(DEVWRITELINE("rs232b", rs232_port_device, write_rts))
|
||||
// MCFG_Z80SIO_OUT_INT_CB(WRITELINE(isbc_state, isbc_uart8274_irq))
|
||||
// MCFG_Z80SIO_OUT_INT_CB(WRITELINE(isbc_state, isbc_uart8274_irq))
|
||||
MCFG_Z80SIO_OUT_INT_CB(DEVWRITELINE("pic_0", pic8259_device, ir6_w))
|
||||
#endif
|
||||
|
||||
|
@ -2,15 +2,15 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/***************************************************************************
|
||||
|
||||
drivers/iskr103x.c
|
||||
drivers/iskr103x.c
|
||||
|
||||
Driver file for Iskra-1030, 1031
|
||||
Driver file for Iskra-1030, 1031
|
||||
|
||||
TODO
|
||||
- fix cyrillic chargen upload for CGA and MDA
|
||||
- replace DIP switch definition
|
||||
- keyboard test is not passing (code 301)
|
||||
- hard disk is connected but untested
|
||||
TODO
|
||||
- fix cyrillic chargen upload for CGA and MDA
|
||||
- replace DIP switch definition
|
||||
- keyboard test is not passing (code 301)
|
||||
- hard disk is connected but untested
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/***************************************************************************
|
||||
|
||||
drivers/mc1502.c
|
||||
drivers/mc1502.c
|
||||
|
||||
Driver file for Elektronika MS 1502
|
||||
Driver file for Elektronika MS 1502
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -196,10 +196,10 @@ MACHINE_START_MEMBER(mc1502_state, mc1502)
|
||||
DBG_LOG(0, "init", ("machine_start()\n"));
|
||||
|
||||
/*
|
||||
Keyboard polling circuit holds IRQ1 high until a key is
|
||||
pressed, then it starts a timer that pulses IRQ1 low each
|
||||
40ms (check) for 20ms (check) until all keys are released.
|
||||
Last pulse causes BIOS to write a 'break' scancode into port 60h.
|
||||
Keyboard polling circuit holds IRQ1 high until a key is
|
||||
pressed, then it starts a timer that pulses IRQ1 low each
|
||||
40ms (check) for 20ms (check) until all keys are released.
|
||||
Last pulse causes BIOS to write a 'break' scancode into port 60h.
|
||||
*/
|
||||
m_pic8259->ir1_w(1);
|
||||
memset(&m_kbd, 0, sizeof(m_kbd));
|
||||
@ -318,7 +318,7 @@ static MACHINE_CONFIG_START( mc1502, mc1502_state )
|
||||
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
|
||||
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list","mc1502_flop")
|
||||
// MCFG_SOFTWARE_LIST_ADD("cass_list","mc1502_cass")
|
||||
// MCFG_SOFTWARE_LIST_ADD("cass_list","mc1502_cass")
|
||||
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("608K") /* 96 base + 512 on expansion card */
|
||||
|
@ -6681,8 +6681,8 @@ ROM_START( kick4csh )
|
||||
// LED6,7 - 7seg LEDs
|
||||
// BT1 - Panasonic CR2032 battery
|
||||
ROM_REGION(0x220000, "hopper_board", 0)
|
||||
ROM_LOAD( "fpr-24150.ic6", 0x0000000, 0x200000, CRC(3845c34c) SHA1(027b17bac64482ee152773d5fab30fcbc6e2bcb7) ) // SH4 code
|
||||
ROM_LOAD( "6372a.ic3", 0x0200000, 0x020000, CRC(f30839ad) SHA1(ea1a32c4da1ed9745300bcdd7964a7c0964e3221) ) // FPGA config
|
||||
ROM_LOAD( "fpr-24150.ic6", 0x0000000, 0x200000, CRC(3845c34c) SHA1(027b17bac64482ee152773d5fab30fcbc6e2bcb7) ) // SH4 code
|
||||
ROM_LOAD( "6372a.ic3", 0x0200000, 0x020000, CRC(f30839ad) SHA1(ea1a32c4da1ed9745300bcdd7964a7c0964e3221) ) // FPGA config
|
||||
|
||||
// 840-0140 2004 317-0397-COM Naomi
|
||||
ROM_PARAMETER( ":rom_board:key", "820857c9" )
|
||||
|
@ -2,22 +2,22 @@
|
||||
// copyright-holders:Sergey Svishchev
|
||||
/***************************************************************************
|
||||
|
||||
drivers/poisk1.c
|
||||
drivers/poisk1.c
|
||||
|
||||
Driver file for Poisk-1
|
||||
Driver file for Poisk-1
|
||||
|
||||
to do:
|
||||
- cassette i/o and softlist
|
||||
- verify palette
|
||||
- monochrome output
|
||||
- trap: does memory always get written or it's up to NMI ISR to complete writes?
|
||||
- keyboard layout for earliest revision (v89r0)
|
||||
to do:
|
||||
- cassette i/o and softlist
|
||||
- verify palette
|
||||
- monochrome output
|
||||
- trap: does memory always get written or it's up to NMI ISR to complete writes?
|
||||
- keyboard layout for earliest revision (v89r0)
|
||||
|
||||
slot devices:
|
||||
- hard disk controllers
|
||||
- network cards
|
||||
- joystick, mouse, serial, parallel ports
|
||||
- sound card
|
||||
slot devices:
|
||||
- hard disk controllers
|
||||
- network cards
|
||||
- joystick, mouse, serial, parallel ports
|
||||
- sound card
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -247,7 +247,7 @@ WRITE8_MEMBER(p1_state::p1_ppi2_porta_w)
|
||||
|
||||
/*
|
||||
06Ah Dxx 6 Enable/Disable color burst (?)
|
||||
7 Enable/Disable D7H/D7L
|
||||
7 Enable/Disable D7H/D7L
|
||||
*/
|
||||
|
||||
WRITE8_MEMBER(p1_state::p1_ppi_portc_w)
|
||||
|
@ -245,8 +245,8 @@ static const res_net_decode_info popper_decode_info =
|
||||
static const res_net_info popper_net_info =
|
||||
{
|
||||
RES_NET_VCC_5V | RES_NET_VBIAS_5V | RES_NET_VIN_TTL_OUT,
|
||||
{
|
||||
{ RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
|
||||
{
|
||||
{ RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
|
||||
{ RES_NET_AMP_NONE, 0, 0, 3, { 1000, 470, 220 } },
|
||||
{ RES_NET_AMP_NONE, 0, 0, 2, { 470, 220, 0 } }
|
||||
}
|
||||
@ -389,7 +389,7 @@ WRITE8_MEMBER( popper_state::ay1_w )
|
||||
|
||||
WRITE8_MEMBER( popper_state::nmi_control_w )
|
||||
{
|
||||
// logerror("nmi_control_w: %02x\n", data);
|
||||
// logerror("nmi_control_w: %02x\n", data);
|
||||
m_nmi_enable = data & 1;
|
||||
}
|
||||
|
||||
|
@ -876,7 +876,7 @@ ROM_START( shinygld )
|
||||
ROM_LOAD( "22.u145", 0x080000, 0x20000, CRC(113ccf81) SHA1(c2192e81a4be38911c971e1593b902f92d9a02d5) ) // 27C1001
|
||||
|
||||
/* Dumper's note: Board carries five PLDs : one GAL22V10 near the 68000 CPU (which most likely acts as main address decoder),
|
||||
three PALCE22V10H (two are near the GFX ROMs, probably for enabling them), one PALCE16V8H.*/
|
||||
three PALCE22V10H (two are near the GFX ROMs, probably for enabling them), one PALCE16V8H.*/
|
||||
ROM_REGION( 0x1000, "plds", 0)
|
||||
ROM_LOAD( "gal22v10.bin", 0x0400, 0x02e5, NO_DUMP ) // soldered
|
||||
ROM_LOAD( "palce22v10_1.bin", 0x2dd, 0x2dd, NO_DUMP ) // soldered
|
||||
|
@ -51,7 +51,7 @@ ROM_START(spcship)
|
||||
ROM_REGION(0x4000, "maincpu", 0)
|
||||
ROM_LOAD("sss-1g.bin", 0x0000, 0x4000, CRC(119a3064) SHA1(d915ecf44279a9e16a50a723eb9523afec1fb380))
|
||||
ROM_REGION(0x4000, "audiocpu", 0)
|
||||
ROM_LOAD("sss-1a0.bin", 0x0000, 0x4000, CRC(eae78e63) SHA1(9fa3587ae3ee6f674bb16102680e70069e9d275e))
|
||||
ROM_LOAD("sss-1a0.bin", 0x0000, 0x4000, CRC(eae78e63) SHA1(9fa3587ae3ee6f674bb16102680e70069e9d275e))
|
||||
ROM_END
|
||||
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
|
||||
Useful links:
|
||||
- board photo: http://s8.hostingkartinok.com/uploads/images/2016/05/579e9d152bc772d9c16bc8ac611eb97f.jpg
|
||||
- manuals: http://www.minuszerodegrees.net/manuals/Toshiba/Toshiba.htm
|
||||
- manuals: http://www.minuszerodegrees.net/manuals/Toshiba/Toshiba.htm
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
@ -126,7 +126,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( tosh1000_io, AS_IO, 8, tosh1000_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x00ff) AM_DEVICE("mb", ibm5160_mb_device, map)
|
||||
AM_RANGE(0x00c8, 0x00c8) AM_WRITE(romdos_bank_w) // ROM-DOS page select [p. B-15]
|
||||
AM_RANGE(0x00c8, 0x00c8) AM_WRITE(romdos_bank_w) // ROM-DOS page select [p. B-15]
|
||||
AM_RANGE(0x02c0, 0x02df) AM_DEVREADWRITE("rtc", rp5c01_device, read, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -202,7 +202,7 @@ static INPUT_PORTS_START( vg5k )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_NAME("CTRL ACCENT") PORT_CHAR(UCHAR_SHIFT_2)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_NAME("CTRL ACCENT") PORT_CHAR(UCHAR_SHIFT_2)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_NAME("INSC INSL") PORT_CHAR(UCHAR_MAMEKEY(INSERT))
|
||||
PORT_START("ROW2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_NAME("RUN STOP") PORT_CHAR(UCHAR_MAMEKEY(F2)) PORT_CHAR(UCHAR_MAMEKEY(PAUSE))
|
||||
|
@ -12,7 +12,7 @@
|
||||
AC97 audio with custom DMA frontend which streams 8 stereo channels
|
||||
PIC18c442 protection chip (not readable) on VP101 only (VP100 is unprotected?)
|
||||
|
||||
1 MB of VRAM at main RAM offset 0x07400000
|
||||
1 MB of VRAM at main RAM offset 0x07400000
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
@ -100,7 +100,7 @@ WRITE_LINE_MEMBER(vp10x_state::dmarq_w)
|
||||
while (m_dmarq_state)
|
||||
{
|
||||
*RAM++ = m_ata->read_dma();
|
||||
m_dma_ptr += 2; // pointer must advance
|
||||
m_dma_ptr += 2; // pointer must advance
|
||||
}
|
||||
|
||||
m_ata->write_dmack(CLEAR_LINE);
|
||||
@ -123,7 +123,7 @@ READ32_MEMBER(vp10x_state::pic_r)
|
||||
case 0x22:
|
||||
return serial[pic_state++];
|
||||
|
||||
case 0x23: // this is the same for jnero and specfrce. great security!
|
||||
case 0x23: // this is the same for jnero and specfrce. great security!
|
||||
return magic[pic_state++];
|
||||
}
|
||||
|
||||
@ -189,13 +189,13 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 32, vp10x_state )
|
||||
AM_RANGE(0x1c400000, 0x1c400003) AM_WRITE(tty_w) // boot ROM code uses this one
|
||||
AM_RANGE(0x1c400014, 0x1c400017) AM_READ(tty_ready_r)
|
||||
AM_RANGE(0x1ca0000c, 0x1ca0000f) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x1ca00010, 0x1ca00013) AM_READ(test_r) // bits here cause various test mode stuff
|
||||
AM_RANGE(0x1ca00010, 0x1ca00013) AM_READ(test_r) // bits here cause various test mode stuff
|
||||
AM_RANGE(0x1cf00000, 0x1cf00003) AM_NOP AM_READNOP
|
||||
AM_RANGE(0x1d000030, 0x1d000033) AM_WRITE(dmaaddr_w) // ATA DMA destination address
|
||||
AM_RANGE(0x1d000030, 0x1d000033) AM_WRITE(dmaaddr_w) // ATA DMA destination address
|
||||
AM_RANGE(0x1d000040, 0x1d00005f) AM_DEVREADWRITE16("ata", ata_interface_device, read_cs0, write_cs0, 0x0000ffff)
|
||||
AM_RANGE(0x1d000060, 0x1d00007f) AM_DEVREADWRITE16("ata", ata_interface_device, read_cs1, write_cs1, 0x0000ffff)
|
||||
AM_RANGE(0x1f200000, 0x1f200003) AM_READWRITE(pic_r, pic_w)
|
||||
AM_RANGE(0x1f807000, 0x1f807fff) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE(0x1f807000, 0x1f807fff) AM_RAM AM_SHARE("nvram")
|
||||
AM_RANGE(0x1fc00000, 0x1fffffff) AM_ROM AM_REGION("maincpu", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
#define GRIDLEE_MASTER_CLOCK (20000000)
|
||||
#define GRIDLEE_CPU_CLOCK (GRIDLEE_MASTER_CLOCK / 16)
|
||||
#define GRIDLEE_PIXEL_CLOCK (GRIDLEE_MASTER_CLOCK / 4)
|
||||
#define GRIDLEE_PIXEL_CLOCK (GRIDLEE_MASTER_CLOCK / 4)
|
||||
#define GRIDLEE_HTOTAL (0x140)
|
||||
#define GRIDLEE_HBEND (0x000)
|
||||
#define GRIDLEE_HBSTART (0x100)
|
||||
|
@ -12107,8 +12107,8 @@ promutrvc // (c) 1985 Enerdyne Technologies Inc
|
||||
strvmstr // (c) 1986 Enerdyne Technologies Inc
|
||||
|
||||
@source:eurocom2.cpp
|
||||
eurocom2 //
|
||||
waveterm //
|
||||
eurocom2 //
|
||||
waveterm //
|
||||
|
||||
@source:europc.cpp
|
||||
europc // 1988 Schneider Euro PC (CGA or Hercules)
|
||||
@ -36942,7 +36942,7 @@ voyager // (c) 2002 Team Play, Inc.
|
||||
@source:vp101.cpp
|
||||
jnero // (c) 2004 ICE/Play Mechanix
|
||||
specfrce // (c) 2002 ICE/Play Mechanix
|
||||
zoofari // (c) 2006 ICE/Play Mechanix
|
||||
zoofari // (c) 2006 ICE/Play Mechanix
|
||||
|
||||
@source:vpoker.cpp
|
||||
5acespkr // (c) 198?
|
||||
|
@ -6,14 +6,14 @@
|
||||
|
||||
Implementation of Agat-7 onboard video.
|
||||
|
||||
5 video modes:
|
||||
- 32x32 color text
|
||||
- 64x32 mono text with reverse video
|
||||
- 64x64 color graphics
|
||||
- 128x128 color graphics
|
||||
- 256x256 mono graphics
|
||||
5 video modes:
|
||||
- 32x32 color text
|
||||
- 64x32 mono text with reverse video
|
||||
- 64x64 color graphics
|
||||
- 128x128 color graphics
|
||||
- 256x256 mono graphics
|
||||
|
||||
Character generator ROM could have 128 or 256 chars.
|
||||
Character generator ROM could have 128 or 256 chars.
|
||||
|
||||
C7xx: video mode select
|
||||
|
||||
@ -75,7 +75,7 @@ agat7video_device::agat7video_device(const machine_config &mconfig, const char *
|
||||
|
||||
void agat7video_device::device_start()
|
||||
{
|
||||
// save_item(NAME(m_video_mode));
|
||||
// save_item(NAME(m_video_mode));
|
||||
save_item(NAME(m_start_address));
|
||||
}
|
||||
|
||||
|
@ -624,15 +624,15 @@ uint8_t gime_base_device::read(offs_t offset)
|
||||
switch(offset & 0xF0)
|
||||
{
|
||||
case 0x00:
|
||||
data = read_gime_register(offset); // $FF90 - $FF9F
|
||||
data = read_gime_register(offset); // $FF90 - $FF9F
|
||||
break;
|
||||
|
||||
case 0x10:
|
||||
data = read_mmu_register(offset); // $FFA0 - $FFAF
|
||||
data = read_mmu_register(offset); // $FFA0 - $FFAF
|
||||
break;
|
||||
|
||||
case 0x20:
|
||||
data = read_palette_register(offset); // $FFB0 - $FFBF
|
||||
data = read_palette_register(offset); // $FFB0 - $FFBF
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -733,20 +733,20 @@ void gime_base_device::write(offs_t offset, uint8_t data)
|
||||
switch(offset & 0xF0)
|
||||
{
|
||||
case 0x00:
|
||||
write_gime_register(offset & 0x0F, data); // $FF90 - $FF9F
|
||||
write_gime_register(offset & 0x0F, data); // $FF90 - $FF9F
|
||||
break;
|
||||
|
||||
case 0x10:
|
||||
write_mmu_register(offset & 0x0F, data); // $FFA0 - $FFAF
|
||||
write_mmu_register(offset & 0x0F, data); // $FFA0 - $FFAF
|
||||
break;
|
||||
|
||||
case 0x20:
|
||||
write_palette_register(offset & 0x0F, data & 0x3F); // $FFB0 - $FFBF
|
||||
write_palette_register(offset & 0x0F, data & 0x3F); // $FFB0 - $FFBF
|
||||
break;
|
||||
|
||||
case 0x30:
|
||||
case 0x40:
|
||||
write_sam_register(offset - 0x30); // $FFC0 - $FFDF
|
||||
write_sam_register(offset - 0x30); // $FFC0 - $FFDF
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user