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
162
hash/ibm5170.xml
162
hash/ibm5170.xml
@ -2859,7 +2859,7 @@ Missing files come here
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
|
||||
<software name="scrlmous">
|
||||
<description>Genius Scroll Mouse</description>
|
||||
<year>2004</year>
|
||||
@ -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;
|
||||
}
|
||||
@ -170,7 +170,7 @@ READ8_MEMBER(hp_hil_mlc_device::read)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
switch (offset)
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
if (!m_fifo.empty())
|
||||
@ -201,16 +201,16 @@ READ8_MEMBER(hp_hil_mlc_device::read)
|
||||
|
||||
void hp_hil_mlc_device::hil_write(uint16_t data)
|
||||
{
|
||||
DBG_LOG(1,"Receive", ("%s %04X fifo %s\n",
|
||||
DBG_LOG(1,"Receive", ("%s %04X fifo %s\n",
|
||||
BIT(data, 11)?"command":"data", data, m_fifo.full()?"full":(m_fifo.empty()?"empty":"ok")));
|
||||
|
||||
if (!m_fifo.full())
|
||||
if (!m_fifo.full())
|
||||
{
|
||||
if (!BIT(data, 11))
|
||||
if (!BIT(data, 11))
|
||||
{
|
||||
m_fifo.enqueue(data);
|
||||
}
|
||||
else if (!m_fifo.empty() || !(m_w2 & HPMLC_W2_IPF))
|
||||
else if (!m_fifo.empty() || !(m_w2 & HPMLC_W2_IPF))
|
||||
{
|
||||
m_fifo.enqueue(data);
|
||||
m_r3 |= HPMLC_R3_INT;
|
||||
|
@ -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.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
@ -146,7 +146,7 @@ void nes_subor2_device::pcb_reset()
|
||||
and studying VirtuaNESEx. The latter makes the
|
||||
read at 0x5300 return 0x8F, perhaps as a form
|
||||
of copy protection?
|
||||
|
||||
|
||||
There are two revisions of Type 2 that are
|
||||
currently known;
|
||||
|
||||
@ -322,4 +322,4 @@ WRITE8_MEMBER(nes_subor2_device::write_l)
|
||||
update_banks();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -75,4 +75,4 @@ extern const device_type NES_SUBOR0;
|
||||
extern const device_type NES_SUBOR1;
|
||||
extern const device_type NES_SUBOR2;
|
||||
|
||||
#endif /* MAME_BUS_NES_SUBOR_H */
|
||||
#endif /* MAME_BUS_NES_SUBOR_H */
|
||||
|
@ -65,12 +65,12 @@ void nes_zemina_device::pcb_reset()
|
||||
-------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
|
||||
Zemina board emulation
|
||||
|
||||
Currently, this board is only known to be used
|
||||
by one game: Magic Kid GooGoo.
|
||||
|
||||
|
||||
Info from kevtris at NESDev, who dumped the game:
|
||||
wiki.nesdev.com/w/index.php/INES_Mapper_190
|
||||
|
||||
|
@ -28,4 +28,4 @@ public:
|
||||
// device type definition
|
||||
extern const device_type NES_ZEMINA;
|
||||
|
||||
#endif /* MAME_BUS_NES_ZEMINA_H */
|
||||
#endif /* MAME_BUS_NES_ZEMINA_H */
|
||||
|
@ -52,4 +52,4 @@ private:
|
||||
|
||||
} } // namespace bus::ti8x
|
||||
|
||||
#endif // MAME_DEVICES_BUS_TI8X_BITSOCKET_H
|
||||
#endif // MAME_DEVICES_BUS_TI8X_BITSOCKET_H
|
||||
|
@ -63,4 +63,4 @@ private:
|
||||
|
||||
} } // namespace bus::ti8x
|
||||
|
||||
#endif // MAME_DEVICES_BUS_TI8X_GRAPHLINKHLE_H
|
||||
#endif // MAME_DEVICES_BUS_TI8X_GRAPHLINKHLE_H
|
||||
|
@ -243,7 +243,7 @@ void drc_cache::request_oob_codegen(drc_oob_delegate callback, void *param1, voi
|
||||
oob_handler *oob = (oob_handler *)alloc(sizeof(*oob));
|
||||
assert(oob != nullptr);
|
||||
new (oob) oob_handler();
|
||||
|
||||
|
||||
// fill it in
|
||||
oob->m_callback = callback;
|
||||
oob->m_param1 = param1;
|
||||
|
@ -74,7 +74,7 @@ private:
|
||||
|
||||
/* These are the official XTAL values and clock rates used by Nintendo for
|
||||
manufacturing throughout the production of the 2A03. PALC_APU_CLOCK is
|
||||
the clock rate devised by UMC(?) for PAL Famicom clone hardware. */
|
||||
the clock rate devised by UMC(?) for PAL Famicom clone hardware. */
|
||||
|
||||
#define N2A03_NTSC_XTAL XTAL_21_4772MHz
|
||||
#define N2A03_PAL_XTAL XTAL_26_601712MHz
|
||||
|
@ -10,7 +10,7 @@
|
||||
0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
0 b0 b1 x0 x1 x2 i0 i1 i2 sp pag vsm dmc c0 c1 pc -
|
||||
1 a ah al b bh bl c ch cl d dh dl p ph pl sft
|
||||
|
||||
|
||||
Second register bank:
|
||||
0 1 2 3 4 5 6 7 8 9 a b c d e f
|
||||
2 <register file>
|
||||
@ -69,7 +69,7 @@
|
||||
1011 11.c 0110 1110 .... .... .... .... iret
|
||||
|
||||
Top 3 bits = instruction group, except when it isn't.
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@ -161,7 +161,7 @@ static std::string memory(uint32_t reg, bool x1)
|
||||
else
|
||||
util::stream_format(stream, "x0");
|
||||
}
|
||||
|
||||
|
||||
if(reg & 0x10) {
|
||||
if((0x10 - (reg & 0xf)) < 10)
|
||||
util::stream_format(stream, "-%d", 0x10 - (reg & 0xf));
|
||||
@ -334,7 +334,7 @@ static unsigned dasm_mb86233(std::ostream &stream, uint32_t opcode )
|
||||
default:
|
||||
util::stream_format(stream, "mov {%d} %s, %s", op, memory(r1, false), memory(r2, true));
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@ -398,7 +398,7 @@ static unsigned dasm_mb86233(std::ostream &stream, uint32_t opcode )
|
||||
case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17:
|
||||
util::stream_format(stream, "ldi #0x%x, %s", opcode & 0xffffff, regnames[(opcode >> 24) & 0x3f]); break;
|
||||
break;
|
||||
|
||||
|
||||
case 0x2f: case 0x3f: {
|
||||
uint32_t cond = ( opcode >> 20 ) & 0x1f;
|
||||
uint32_t subtype = ( opcode >> 17 ) & 7;
|
||||
|
@ -983,7 +983,7 @@ inline bool mips3_device::RBYTE(offs_t address, uint32_t *result)
|
||||
*result = (*m_memory.read_byte)(*m_program, address);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_READ_ALLOWED)
|
||||
{
|
||||
@ -1022,7 +1022,7 @@ inline bool mips3_device::RHALF(offs_t address, uint32_t *result)
|
||||
*result = (*m_memory.read_word)(*m_program, address);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_READ_ALLOWED)
|
||||
{
|
||||
@ -1061,7 +1061,7 @@ inline bool mips3_device::RWORD(offs_t address, uint32_t *result)
|
||||
*result = (*m_memory.read_dword)(*m_program, address);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_READ_ALLOWED)
|
||||
{
|
||||
@ -1100,7 +1100,7 @@ inline bool mips3_device::RWORD_MASKED(offs_t address, uint32_t *result, uint32_
|
||||
*result = (*m_memory.read_dword_masked)(*m_program, address, mem_mask);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_READ_ALLOWED)
|
||||
{
|
||||
@ -1157,7 +1157,7 @@ inline bool mips3_device::RDOUBLE_MASKED(offs_t address, uint64_t *result, uint6
|
||||
*result = (*m_memory.read_qword_masked)(*m_program, address, mem_mask);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_READ_ALLOWED)
|
||||
{
|
||||
@ -1186,7 +1186,7 @@ inline void mips3_device::WBYTE(offs_t address, uint8_t data)
|
||||
(*m_memory.write_byte)(*m_program, address, data);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_WRITE_ALLOWED)
|
||||
{
|
||||
@ -1265,7 +1265,7 @@ inline void mips3_device::WWORD(offs_t address, uint32_t data)
|
||||
(*m_memory.write_dword)(*m_program, address, data);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_WRITE_ALLOWED)
|
||||
{
|
||||
@ -1305,7 +1305,7 @@ inline void mips3_device::WWORD_MASKED(offs_t address, uint32_t data, uint32_t m
|
||||
(*m_memory.write_dword_masked)(*m_program, address, data, mem_mask);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_WRITE_ALLOWED)
|
||||
{
|
||||
@ -1365,7 +1365,7 @@ inline void mips3_device::WDOUBLE_MASKED(offs_t address, uint64_t data, uint64_t
|
||||
(*m_memory.write_qword_masked)(*m_program, address, data, mem_mask);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
const uint32_t tlbval = vtlb_table()[address >> 12];
|
||||
if (tlbval & VTLB_WRITE_ALLOWED)
|
||||
{
|
||||
|
@ -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++);
|
||||
|
||||
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 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);
|
||||
|
||||
UML_LABEL(block, 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++);
|
||||
|
||||
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 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);
|
||||
|
||||
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);
|
||||
|
@ -195,7 +195,7 @@ private:
|
||||
// m_irq_firing: if an irq has fired; 0 = not fired or has already finished firing
|
||||
// 1 = next opcode is the first half of int firing 'NOP+push pc'
|
||||
// 2 = next opcode is the second half of int firing 'JMP 0100'
|
||||
int m_irq_firing;
|
||||
int m_irq_firing;
|
||||
address_space *m_program, *m_data;
|
||||
direct_read_data *m_direct;
|
||||
|
||||
|
@ -1573,12 +1573,12 @@ int z180_device::z180_dma0(int max_cycles)
|
||||
offs_t sar0 = 65536 * IO_SAR0B + 256 * IO_SAR0H + IO_SAR0L;
|
||||
offs_t dar0 = 65536 * IO_DAR0B + 256 * IO_DAR0H + IO_DAR0L;
|
||||
int bcr0 = 256 * IO_BCR0H + IO_BCR0L;
|
||||
|
||||
if (bcr0 == 0)
|
||||
|
||||
if (bcr0 == 0)
|
||||
{
|
||||
bcr0 = 0x10000;
|
||||
}
|
||||
|
||||
|
||||
int count = (IO_DMODE & Z180_DMODE_MMOD) ? bcr0 : 1;
|
||||
int cycles = 0;
|
||||
|
||||
@ -1710,12 +1710,12 @@ int z180_device::z180_dma1()
|
||||
offs_t mar1 = 65536 * IO_MAR1B + 256 * IO_MAR1H + IO_MAR1L;
|
||||
offs_t iar1 = 256 * IO_IAR1H + IO_IAR1L;
|
||||
int bcr1 = 256 * IO_BCR1H + IO_BCR1L;
|
||||
|
||||
if (bcr1 == 0)
|
||||
|
||||
if (bcr1 == 0)
|
||||
{
|
||||
bcr1 = 0x10000;
|
||||
}
|
||||
|
||||
|
||||
int cycles = 0;
|
||||
|
||||
if ((m_iol & Z180_DREQ1) == 0)
|
||||
@ -2391,7 +2391,7 @@ again:
|
||||
else
|
||||
{
|
||||
do
|
||||
{
|
||||
{
|
||||
curcycles = check_interrupts();
|
||||
m_icount -= curcycles;
|
||||
handle_io_timers(curcycles);
|
||||
@ -2413,7 +2413,7 @@ again:
|
||||
m_icount -= curcycles;
|
||||
|
||||
handle_io_timers(curcycles);
|
||||
|
||||
|
||||
/* if channel 0 was started in burst mode, go recheck the mode */
|
||||
if ((IO_DSTAT & Z180_DSTAT_DE0) == Z180_DSTAT_DE0 &&
|
||||
(IO_DMODE & Z180_DMODE_MMOD) == Z180_DMODE_MMOD)
|
||||
@ -2434,7 +2434,7 @@ again:
|
||||
curcycles = z180_dma1();
|
||||
m_icount -= curcycles;
|
||||
handle_io_timers(curcycles);
|
||||
|
||||
|
||||
/* If DMA is done break out to the faster loop */
|
||||
if ((IO_DSTAT & Z180_DSTAT_DME) != Z180_DSTAT_DME)
|
||||
break;
|
||||
@ -2449,7 +2449,7 @@ again:
|
||||
/* If DMA is started go to check the mode */
|
||||
if ((IO_DSTAT & Z180_DSTAT_DME) == Z180_DSTAT_DME)
|
||||
goto again;
|
||||
|
||||
|
||||
curcycles = check_interrupts();
|
||||
m_icount -= curcycles;
|
||||
handle_io_timers(curcycles);
|
||||
|
@ -1111,7 +1111,7 @@ WRITE_LINE_MEMBER( pia6821_device::cb2_w )
|
||||
bool pia6821_device::cb2_output()
|
||||
{
|
||||
m_out_cb2_needs_pulled = false;
|
||||
|
||||
|
||||
return m_out_cb2;
|
||||
}
|
||||
|
||||
@ -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()
|
||||
{
|
||||
|
@ -73,7 +73,7 @@ uint32_t mm5740_device::calc_effective_clock_key_debounce(uint32_t capacitance)
|
||||
void mm5740_device::device_start()
|
||||
{
|
||||
// resolve callbacks
|
||||
for(int i = 0; i < 9; i++)
|
||||
for(int i = 0; i < 9; i++)
|
||||
{
|
||||
m_read_x[i].resolve_safe(0x3ff);
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
@ -55,9 +55,9 @@ Control 19 Control key pressed
|
||||
|
||||
Shift Lock I/O 20 Togglable input to signify shift (NOT caps) lock.
|
||||
|
||||
Clock 3 A TTL compatible clock signal
|
||||
Clock 3 A TTL compatible clock signal
|
||||
|
||||
Vss 32 +5.0V
|
||||
Vss 32 +5.0V
|
||||
|
||||
Vll 2 Ground
|
||||
|
||||
@ -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
|
||||
@ -111,7 +111,7 @@ public:
|
||||
// public interface
|
||||
uint16_t b_r();
|
||||
|
||||
template<typename Object> static devcb_base &set_x_cb(device_t &device, Object &&object, uint8_t i)
|
||||
template<typename Object> static devcb_base &set_x_cb(device_t &device, Object &&object, uint8_t i)
|
||||
{
|
||||
assert(i<9); return downcast<mm5740_device &>(device).m_read_x[i].set_callback(std::forward<Object>(object));
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ READ8_MEMBER(tms1024_device::read_h)
|
||||
// read selected port data
|
||||
if (m_s != 0)
|
||||
m_h = (m_read_port[m_s-1])((offs_t)(m_s-1)) & 0xf;
|
||||
|
||||
|
||||
// high-impedance otherwise
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ WRITE_LINE_MEMBER(tms1024_device::write_std)
|
||||
{
|
||||
if (m_s != 0)
|
||||
(m_write_port[m_s-1])((offs_t)(m_s-1), m_h);
|
||||
|
||||
|
||||
else
|
||||
{
|
||||
// reset all ports
|
||||
|
@ -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,45 +356,45 @@ 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;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
8274: "RR2 contains the vector which gets modified to indicate the source of interrupt. However, the state of
|
||||
the vector does not change if no new interrupts are generated. The contents of RR2 are only changed when
|
||||
a new interrupt is generated. In order to get the correct information, RR2 must be read only after an
|
||||
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -773,7 +773,7 @@ int z80sio_channel::get_clock_mode()
|
||||
return clocks;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
From "uPD7201/7201A MULTI PROTOCOL SERIAL COMMUNICATION CONTROLLER" by NEC:
|
||||
"RTSA (Request to Send A): The state of the RTS bit (01 of the CR5 register) controls this pin. If
|
||||
the RTS bit is reset in the asynchronous mode, a high level will not be output on the RTS pin until
|
||||
@ -898,14 +898,14 @@ uint8_t z80sio_channel::do_sioreg_rr1()
|
||||
highest priority interrupting condition at the time of the read. If
|
||||
no interrupts are pending, the vector is modified with V3 = 0, V2 = 1, and
|
||||
V1 = 1. This register is read only through Channel B."
|
||||
|
||||
|
||||
Intel 8274 datasheet: "RR2 - Channel B: Interrupt Vector - Contains the interrupt
|
||||
vector programmed in into WR2. If the status affects vector mode is selected (WR1:D2),
|
||||
it containes the modified vector for the highest priority interrupt pending.
|
||||
If no interrupts are pending the variable bits in the vector are set to one."
|
||||
|
||||
NEC upd7201 MPSC2 Technical Manual: "When the MPSC2 is used in vectored mode, the
|
||||
contents of this register are placed on the bus during the appropriate portion of
|
||||
contents of this register are placed on the bus during the appropriate portion of
|
||||
interrupt acknowledge sequence. You can read the value of CR2B at any time.
|
||||
This is particularly useful in determining the cause of an interrup when using the
|
||||
MPSC2 in Non-vectored mode."
|
||||
@ -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;
|
||||
}
|
||||
|
||||
static void configure_channels(device_t &device, int rxa, int txa, int rxb, int txb)
|
||||
dev.m_cputag = tag;
|
||||
}
|
||||
|
||||
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,
|
||||
|
@ -408,7 +408,7 @@ static const struct tms5100_coeffs T0280D_0281D_coeff =
|
||||
an unvoiced frame follows a silent one (which in turn followed a
|
||||
voiced frame), the k5-k10 parameters are not zeroed as they should be,
|
||||
producing a loud noise.
|
||||
This bug is fixed correctly on the tms52xx chips.
|
||||
This bug is fixed correctly on the tms52xx chips.
|
||||
*/
|
||||
static const struct tms5100_coeffs T0280F_2801A_coeff =
|
||||
{
|
||||
|
@ -83,7 +83,7 @@ public:
|
||||
go active or inactive at slightly different times by separate write_line
|
||||
writes, which causes the chip to incorrectly reset itself on the 99/8,
|
||||
where the writes are supposed to happen simultaneously;
|
||||
/RS is bit 1, /WS is bit 0
|
||||
/RS is bit 1, /WS is bit 0
|
||||
Note this is a hack and probably can be removed later, once the 'real'
|
||||
line handlers above defer by at least 4 clock cycles before taking effect */
|
||||
DECLARE_WRITE8_MEMBER( data_w );
|
||||
|
@ -73,18 +73,18 @@ void hlcd0538_device::device_start()
|
||||
WRITE_LINE_MEMBER(hlcd0538_device::write_clk)
|
||||
{
|
||||
state = (state) ? 1 : 0;
|
||||
|
||||
|
||||
// clock in data on falling edge
|
||||
if (!state && m_clk)
|
||||
m_shift = (m_shift << 1 | m_data) & u64(0x3ffffffff);
|
||||
|
||||
|
||||
m_clk = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(hlcd0538_device::write_lcd)
|
||||
{
|
||||
state = (state) ? 1 : 0;
|
||||
|
||||
|
||||
// transfer to latches on rising edge
|
||||
if (state && !m_lcd)
|
||||
{
|
||||
@ -93,7 +93,7 @@ WRITE_LINE_MEMBER(hlcd0538_device::write_lcd)
|
||||
}
|
||||
|
||||
m_lcd = state;
|
||||
|
||||
|
||||
// interrupt output follows lcd input
|
||||
m_write_interrupt(state);
|
||||
}
|
||||
|
@ -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,76 +30,76 @@
|
||||
* 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
|
||||
|
||||
|
||||
/*
|
||||
* Replacement Rules (rops). sources:
|
||||
* Replacement Rules (rops). sources:
|
||||
*
|
||||
* - NetBSD's diofbvar.h (definitions for Topcat chip)
|
||||
* - 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
|
||||
|
||||
|
@ -331,7 +331,7 @@ void vga_device::device_start()
|
||||
save_item(NAME(vga.gc.memory_map_sel));
|
||||
save_item(NAME(vga.gc.host_oe));
|
||||
save_item(NAME(vga.gc.chain_oe));
|
||||
|
||||
|
||||
save_item(NAME(vga.attribute.index));
|
||||
save_item(NAME(vga.attribute.data));
|
||||
save_item(NAME(vga.attribute.state));
|
||||
|
@ -981,7 +981,7 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
|
||||
if (!with_se) {
|
||||
auto dis = m_machine.disable_side_effect();
|
||||
return read_memory(space, space.address_to_byte(address), size, false);
|
||||
} else
|
||||
} else
|
||||
return read_memory(space, space.address_to_byte(address), size, false);
|
||||
}
|
||||
break;
|
||||
|
@ -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 */
|
||||
|
@ -202,7 +202,7 @@ void http_manager::update()
|
||||
|
||||
m_server->clear();
|
||||
for (auto handler : m_handlers)
|
||||
{
|
||||
{
|
||||
m_server->on_get(handler.first, [handler](auto response, auto request)
|
||||
{
|
||||
std::tuple<std::string,int, std::string> output = handler.second(request->path);
|
||||
|
@ -14,8 +14,8 @@ Controls execution of the core MAME system.
|
||||
machine_manager::machine_manager(emu_options& options, osd_interface& osd)
|
||||
: m_osd(osd),
|
||||
m_options(options),
|
||||
m_machine(nullptr)
|
||||
{
|
||||
m_machine(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
void machine_manager::start_http_server()
|
||||
|
@ -90,7 +90,7 @@ public:
|
||||
virtual void ui_initialize(running_machine& machine) { }
|
||||
|
||||
virtual void update_machine() { }
|
||||
|
||||
|
||||
http_manager *http() { return m_http.get(); }
|
||||
void start_http_server();
|
||||
|
||||
|
@ -160,7 +160,7 @@ public:
|
||||
static software_list_device *find_by_name(const machine_config &mconfig, const std::string &name);
|
||||
static void display_matches(const machine_config &config, const char *interface, const std::string &name);
|
||||
static device_image_interface *find_mountable_image(const machine_config &mconfig, const software_part &part, std::function<bool (const device_image_interface &)> filter);
|
||||
static device_image_interface *find_mountable_image(const machine_config &mconfig, const software_part &part);
|
||||
static device_image_interface *find_mountable_image(const machine_config &mconfig, const software_part &part);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
|
@ -231,7 +231,7 @@ void cli_frontend::start_execution(mame_machine_manager *manager, std::vector<st
|
||||
manager->start_http_server();
|
||||
|
||||
manager->start_luaengine();
|
||||
|
||||
|
||||
if (!option_errors.empty())
|
||||
osd_printf_error("Error in command line:\n%s\n", strtrimspace(option_errors).c_str());
|
||||
|
||||
|
@ -51,7 +51,7 @@ public:
|
||||
virtual ui_manager* create_ui(running_machine& machine) override;
|
||||
|
||||
virtual void create_custom(running_machine& machine) override;
|
||||
|
||||
|
||||
virtual void load_cheatfiles(running_machine& machine) override;
|
||||
|
||||
virtual void ui_initialize(running_machine& machine) override;
|
||||
|
@ -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)
|
||||
@ -272,7 +272,7 @@ bool mame_options::parse_command_line(emu_options &options, std::vector<std::str
|
||||
if (!options.parse_command_line(args, OPTION_PRIORITY_CMDLINE, error_string))
|
||||
return false;
|
||||
|
||||
// identify any options as a result of softlists
|
||||
// identify any options as a result of softlists
|
||||
auto softlist_opts = evaluate_initial_softlist_options(options);
|
||||
|
||||
// assemble a "value specifier" that will be used to specify options set up as a consequence
|
||||
@ -401,13 +401,13 @@ std::map<std::string, std::string> mame_options::evaluate_initial_softlist_optio
|
||||
}
|
||||
|
||||
// identify other shared features specified as '<<slot name>>_default'
|
||||
//
|
||||
//
|
||||
// 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";
|
||||
|
@ -159,7 +159,7 @@ void menu_slot_devices::populate(float &customtop, float &custombottom)
|
||||
// does this slot have any selectable options?
|
||||
bool has_selectable_options = slot.has_selectable_options();
|
||||
|
||||
// name this option
|
||||
// name this option
|
||||
std::string opt_name("------");
|
||||
const device_slot_option *option = slot_get_current_option(slot);
|
||||
if (option)
|
||||
|
@ -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
|
||||
|
||||
*********************************************************************/
|
||||
|
||||
|
@ -339,7 +339,7 @@ bool jfd_format::load(io_generic *io, uint32_t form_factor, floppy_image *image)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (discop3)
|
||||
{
|
||||
generate_track_from_levels(track / 2, track % 2, track_data, 0, image);
|
||||
|
@ -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 */
|
||||
|
@ -407,7 +407,7 @@ void abc80_state::device_timer(emu_timer &timer, device_timer_id id, int param,
|
||||
{
|
||||
case TIMER_ID_SCANLINE:
|
||||
draw_scanline(m_bitmap, m_screen->vpos());
|
||||
|
||||
|
||||
m_pio_astb = !m_pio_astb;
|
||||
|
||||
m_pio->strobe_a(m_pio_astb);
|
||||
|
@ -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
|
||||
|
@ -1961,35 +1961,35 @@ READ8_MEMBER(apple2e_state::c100_int_bank_r) { return read_int_rom(space, 0x410
|
||||
WRITE8_MEMBER(apple2e_state::c100_w) { write_slot_rom(space, 1, offset, data); }
|
||||
READ8_MEMBER(apple2e_state::c300_r) { return read_slot_rom(space, 3, offset); }
|
||||
|
||||
READ8_MEMBER(apple2e_state::c300_int_r)
|
||||
{
|
||||
READ8_MEMBER(apple2e_state::c300_int_r)
|
||||
{
|
||||
if (!m_slotc3rom)
|
||||
{
|
||||
m_intc8rom = true;
|
||||
update_slotrom_banks();
|
||||
}
|
||||
return read_int_rom(space, 0x300, offset);
|
||||
return read_int_rom(space, 0x300, offset);
|
||||
}
|
||||
|
||||
READ8_MEMBER(apple2e_state::c300_int_bank_r)
|
||||
{
|
||||
READ8_MEMBER(apple2e_state::c300_int_bank_r)
|
||||
{
|
||||
if (!m_slotc3rom)
|
||||
{
|
||||
m_intc8rom = true;
|
||||
update_slotrom_banks();
|
||||
}
|
||||
return read_int_rom(space, 0x4300, offset);
|
||||
return read_int_rom(space, 0x4300, offset);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(apple2e_state::c300_w)
|
||||
{
|
||||
WRITE8_MEMBER(apple2e_state::c300_w)
|
||||
{
|
||||
if (!m_slotc3rom)
|
||||
{
|
||||
m_intc8rom = true;
|
||||
update_slotrom_banks();
|
||||
}
|
||||
|
||||
write_slot_rom(space, 3, offset, data);
|
||||
write_slot_rom(space, 3, offset, data);
|
||||
}
|
||||
READ8_MEMBER(apple2e_state::c400_r) { return read_slot_rom(space, 4, offset); }
|
||||
READ8_MEMBER(apple2e_state::c400_int_r)
|
||||
|
@ -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
|
||||
|
||||
@ -1453,7 +1453,7 @@ static INPUT_PORTS_START(wamazona)
|
||||
PORT_BIT(0x00000020, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("Bet 2 Credits")
|
||||
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Bet 1 Credit / Red")
|
||||
PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Diamond")
|
||||
PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Club")
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -1468,7 +1468,7 @@ static INPUT_PORTS_START(sbuk2)
|
||||
PORT_BIT(0x00000040, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Bet 1 Credit / Red")
|
||||
PORT_BIT(0x00000200, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x00000400, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x00000800, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x00001000, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x00002000, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
INPUT_PORTS_END
|
||||
@ -3572,7 +3572,7 @@ ROM_START( kgbirda5 )
|
||||
ROM_LOAD32_WORD( "0200024v.u11", 0x000002, 0x80000, CRC(52791ad8) SHA1(6e4cf553b355f03ef69ef3c4e2816bbd0cbe6599) )
|
||||
ROM_LOAD32_WORD( "0200024v.u8", 0x100000, 0x80000, CRC(c0477ae3) SHA1(5005944b8b28553dd959192d614be7f1b6228a30) )
|
||||
ROM_LOAD32_WORD( "0200024v.u12", 0x100002, 0x80000, CRC(df176c5a) SHA1(dcaecdefb7c880b9425a6445dbed969968fe3d1c) )
|
||||
|
||||
|
||||
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
@ -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) )
|
||||
@ -5491,7 +5491,7 @@ ROM_START( toutango )
|
||||
ROM_LOAD32_WORD( "0100782v.u13", 0x200002, 0x80000, CRC(f8a67a69) SHA1(b1a28047cb4572ae15359c30f71cafa4bd70658c) )
|
||||
ROM_LOAD32_WORD( "0100782v.u10", 0x300000, 0x80000, CRC(e6528de7) SHA1(b3aa1937f0b673ba2cfa68acc7cb540ebefc66d4) )
|
||||
ROM_LOAD32_WORD( "0100782v.u14", 0x300002, 0x80000, CRC(69f2acde) SHA1(cda52548e675a06677a2d9fee89b33f9abb96f64) )
|
||||
|
||||
|
||||
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) /* ARM Code */
|
||||
ROM_REGION( 0x200000, "vram", ROMREGION_ERASE00 )
|
||||
ROM_REGION( 0x20000*4, "sram", ROMREGION_ERASE00 )
|
||||
@ -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)
|
||||
{
|
||||
|
@ -304,7 +304,7 @@ READ8_MEMBER(cc40_state::bankswitch_r)
|
||||
WRITE8_MEMBER(cc40_state::bankswitch_w)
|
||||
{
|
||||
data &= 0x0f;
|
||||
|
||||
|
||||
// d0-d1: system rom bankswitch
|
||||
membank("sysbank")->set_entry(data & 3);
|
||||
|
||||
@ -330,7 +330,7 @@ void cc40_state::update_clock_divider()
|
||||
WRITE8_MEMBER(cc40_state::clock_control_w)
|
||||
{
|
||||
data &= 0x0f;
|
||||
|
||||
|
||||
// d0-d2: clock divider
|
||||
// d3: enable clock divider always
|
||||
// other bits: unused?
|
||||
|
@ -72,7 +72,7 @@ public:
|
||||
u16 m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments
|
||||
u32 m_display_cache[0x20]; // (internal use)
|
||||
u8 m_display_decay[0x20][0x20]; // (internal use)
|
||||
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||
void display_update();
|
||||
void set_display_size(int maxx, int maxy);
|
||||
@ -260,7 +260,7 @@ WRITE8_MEMBER(cxgz80_state::ch2001_leds_w)
|
||||
// 74ls273 Q1-Q4: 74ls145 A-D
|
||||
// 74ls145 0-9: input mux/led select
|
||||
m_inp_mux = 1 << (data & 0xf) & 0x3ff;
|
||||
|
||||
|
||||
// 74ls273 Q5-Q8: MC14028 A-D
|
||||
// MC14028 Q0-Q7: led data, Q8,Q9: N/C
|
||||
u8 led_data = 1 << (data >> 4 & 0xf) & 0xff;
|
||||
|
@ -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)
|
||||
|
||||
|
@ -493,7 +493,7 @@ public:
|
||||
DECLARE_WRITE8_MEMBER(fdesdis_lcd_w);
|
||||
DECLARE_READ8_MEMBER(fdesdis_input_r);
|
||||
DECLARE_DRIVER_INIT(fdesdis);
|
||||
|
||||
|
||||
// Phantom
|
||||
DECLARE_MACHINE_RESET(fphantom);
|
||||
DECLARE_DRIVER_INIT(fphantom);
|
||||
@ -1008,7 +1008,7 @@ WRITE8_MEMBER(fidel6502_state::chesster_control_w)
|
||||
WRITE8_MEMBER(fidel6502_state::kishon_control_w)
|
||||
{
|
||||
chesster_control_w(space, offset, data);
|
||||
|
||||
|
||||
// 2 more bankswitch bits: 74259(2) Q2 to A17, Q0 to A18
|
||||
membank("bank1")->set_entry((m_led_select >> 2 & 3) | (m_speech_bank >> 1 & 4) | (m_speech_bank << 1 & 8) | (m_speech_bank << 4 & 0x10));
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
****************************************************************************/
|
||||
/***************************************************************************
|
||||
@ -176,7 +176,7 @@ ADDRESS_MAP_END
|
||||
static INPUT_PORTS_START( h19 )
|
||||
|
||||
PORT_START("MODIFIERS")
|
||||
// bit 0 connects to B8 of MM5740 - low if either shift key is
|
||||
// bit 0 connects to B8 of MM5740 - low if either shift key is
|
||||
// bit 7 is low if a key is pressed
|
||||
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CapsLock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
|
||||
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("Break") PORT_CODE(KEYCODE_PAUSE)
|
||||
@ -530,7 +530,7 @@ static MACHINE_CONFIG_START( h19, h19_state )
|
||||
|
||||
MCFG_MC6845_ADD("crtc", MC6845, "screen", MC6845_CLOCK)
|
||||
MCFG_MC6845_SHOW_BORDER_AREA(true)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_CHAR_WIDTH(8)
|
||||
MCFG_MC6845_UPDATE_ROW_CB(h19_state, crtc_update_row)
|
||||
MCFG_MC6845_OUT_VSYNC_CB(INPUTLINE("maincpu", INPUT_LINE_NMI)) // frame pulse
|
||||
|
||||
|
@ -431,7 +431,7 @@ void pabball_state::prepare_display()
|
||||
u16 sel = m_c & 0xf;
|
||||
if (sel & 8) sel &= 9;
|
||||
sel = 1 << sel;
|
||||
|
||||
|
||||
// CD4028 9 is 7seg
|
||||
set_display_segmask(0x200, 0xff);
|
||||
display_matrix(8, 10, m_b, sel);
|
||||
@ -448,10 +448,10 @@ WRITE8_MEMBER(pabball_state::write_c)
|
||||
{
|
||||
// C2: RTCC pin
|
||||
m_maincpu->set_input_line(PIC16C5x_RTCC, data >> 2 & 1);
|
||||
|
||||
|
||||
// C7: speaker out
|
||||
m_speaker->level_w(data >> 7 & 1);
|
||||
|
||||
|
||||
// C0-C3: CD4028 A-D
|
||||
m_c = data;
|
||||
prepare_display();
|
||||
@ -1535,7 +1535,7 @@ WRITE8_MEMBER(us2pfball_state::write_c)
|
||||
{
|
||||
// C7: speaker out
|
||||
m_speaker->level_w(data >> 7 & 1);
|
||||
|
||||
|
||||
// C0-C6: digit segments
|
||||
m_c = data;
|
||||
prepare_display();
|
||||
|
@ -1628,7 +1628,7 @@ MACHINE_CONFIG_END
|
||||
Coleco Quiz Wiz Challenger
|
||||
* TMS1000NLL M32001-N2 (die label 1000E, M32001)
|
||||
* 4 7seg LEDs, 17 other LEDs, 1-bit sound
|
||||
|
||||
|
||||
This is a 4-player version of Quiz Wiz, a multiple choice quiz game.
|
||||
According to the manual, Quiz Wiz cartridges are compatible with it.
|
||||
The question books are needed to play, as well as optional game pieces.
|
||||
@ -2435,7 +2435,7 @@ MACHINE_CONFIG_END
|
||||
CONIC 102-001, led PCB: CONIC 100-003 REV A itac
|
||||
* TMS1000NLL MP0908 (die label 1000B, MP0908)
|
||||
* 2 7seg LEDs, 30 other LEDs, 1-bit sound
|
||||
|
||||
|
||||
This is a peg solitaire game, with random start position.
|
||||
|
||||
known releases:
|
||||
|
@ -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
|
||||
|
||||
@ -481,13 +481,13 @@ ROM_END
|
||||
* :uart8274 B Reg 00 <- 18 - Channel reset command
|
||||
* :uart8274 B Reg 04 <- 44 - x16 clock, 1 stop bit, no parity
|
||||
* :uart8274 B Reg 05 <- ea - Tx Enabled, Transmitter Bits/Character 8, Send Break 0, RTS=0, DTR=0
|
||||
* :uart8274 B Reg 03 <- c1 - Rx 8 bits, No Auto Enables, Rx Enabled,
|
||||
* :uart8274 B Reg 03 <- c1 - Rx 8 bits, No Auto Enables, Rx Enabled,
|
||||
|
||||
* :uart8274 B Reg 00 <- 18 - Channel reset command
|
||||
* :uart8274 B Reg 04 <- 4e - x16 clock, 2 stop bit, even parity but parity disabled
|
||||
* :uart8274 B Reg 05 <- ea - Tx Enabled, Tx 8 bits, Send Break 0, RTS=0, DTR=0
|
||||
* :uart8274 B Reg 03 <- c1 - Rx Enabled, Rx 8 bits, No Auto Enables
|
||||
* :uart8274 B Reg 07 <- 00 - Hi SYNC bits
|
||||
* :uart8274 B Reg 07 <- 00 - Hi SYNC bits
|
||||
* :uart8274 B Reg 06 <- 00 - Lo SYNC bits
|
||||
* :uart8274 A Reg 02 <- 04 - RTSB selected, non vectored mode, 85-1 mode selected, A over B interleaved int prios
|
||||
* :uart8274 B Reg 02 <- 26 - interrupt vector 26
|
||||
@ -497,7 +497,7 @@ ROM_END
|
||||
* :uart8274 B Reg 00 <- 18 - Channel reset command
|
||||
* :uart8274 B Reg 04 <- 44 - x16 clock, 1 stop bit, no parity
|
||||
* :uart8274 B Reg 05 <- ea - Tx Enabled, Tx 8 bits, Send Break 0, RTS=0, DTR=0
|
||||
* :uart8274 B Reg 03 <- c1 - Rx Enabled, Rx 8 bits, No Auto Enables
|
||||
* :uart8274 B Reg 03 <- c1 - Rx Enabled, Rx 8 bits, No Auto Enables
|
||||
* :uart8274 B Reg 00 <- 28 - Reset Transmitter Interrupt Pending
|
||||
* :uart8274 B Reg 00 <- 28 - Reset Transmitter Interrupt Pending
|
||||
* :uart8274 B Reg 00 <- 28 - Reset Transmitter Interrupt Pending
|
||||
@ -507,7 +507,7 @@ ROM_END
|
||||
* :uart8274 A Reg 04 <- 4e - x16 clock, 2 stop bit, even parity but parity disabled
|
||||
* :uart8274 A Reg 05 <- ea - Tx Enabled, Tx 8 bits, Send Break 0, RTS=0, DTR=0
|
||||
* :uart8274 A Reg 03 <- c1 - Rx Enabled, Rx 8 bits, No Auto Enables
|
||||
* :uart8274 A Reg 07 <- 00 - Hi SYNC bits
|
||||
* :uart8274 A Reg 07 <- 00 - Hi SYNC bits
|
||||
* :uart8274 A Reg 06 <- 00 - Lo SYNC bits
|
||||
* :uart8274 A Reg 02 <- 04 - RTSB selected, non vectored mode, 85-1 mode selected, A over B interleaved int prios
|
||||
* :uart8274 B Reg 02 <- 26 - interrupt vector 26
|
||||
@ -520,7 +520,7 @@ ROM_END
|
||||
* :uart8274 A Reg 04 <- 4e - x16 clock, 2 stop bit, even parity but parity disabled
|
||||
* :uart8274 A Reg 05 <- ea - Tx Enabled, Tx 8 bits, Send Break 0, RTS=0, DTR=0
|
||||
* :uart8274 A Reg 03 <- c1 - Rx Enabled, Rx 8 bits, No Auto Enables
|
||||
* :uart8274 A Reg 07 <- 00 - Hi SYNC bits
|
||||
* :uart8274 A Reg 07 <- 00 - Hi SYNC bits
|
||||
* :uart8274 A Reg 06 <- 00 - Lo SYNC bits
|
||||
* :uart8274 A Reg 02 <- 04 - RTSB selected, non vectored mode, 85-1 mode selected, A over B interleaved int prios
|
||||
* :uart8274 B Reg 02 <- 26 - interrupt vector 26
|
||||
|
@ -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
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
|
@ -849,7 +849,7 @@ static MACHINE_CONFIG_START( karnov, karnov_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( karnovjbl, karnov )
|
||||
/* X-TALs:
|
||||
/* X-TALs:
|
||||
Top board next to #9 is 20.000 MHz
|
||||
Top board next to the microcontroller is 6.000 MHz
|
||||
Bottom board next to the ribbon cable is 12.000 MHz*/
|
||||
|
@ -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 */
|
||||
|
@ -2719,7 +2719,7 @@ static MACHINE_CONFIG_START( naomi_base, naomi_state )
|
||||
|
||||
MCFG_EEPROM_SERIAL_93C46_ADD("main_eeprom")
|
||||
MCFG_EEPROM_SERIAL_DEFAULT_VALUE(0)
|
||||
|
||||
|
||||
// clock was measured using GPIO (13.499Mhz) and UART (13.260MHz) access
|
||||
// IO ports access may have latency so actual CPU core clock can be higher, possible OSC3 14.7456MHz
|
||||
MCFG_MIE_ADD("mie", 13500000, "maple_dc", 0, nullptr, nullptr, nullptr, ":MIE.3", nullptr, ":MIE.5", nullptr, nullptr)
|
||||
@ -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" )
|
||||
|
@ -348,7 +348,7 @@ void novag6502_state::cforte_prepare_display()
|
||||
{
|
||||
// 3 led rows
|
||||
display_matrix(8, 3, m_led_data, m_led_select, false);
|
||||
|
||||
|
||||
// lcd panel (mostly handled in cforte_lcd_output_w)
|
||||
set_display_segmask(0x3ff0, 0xff);
|
||||
set_display_size(8, 3+13);
|
||||
@ -368,10 +368,10 @@ WRITE64_MEMBER(novag6502_state::cforte_lcd_output_w)
|
||||
m_display_state[dig+3] = 0;
|
||||
for (int i = 0; i < 4; i++)
|
||||
m_display_state[dig+3] |= ((rowdata[i] >> (2*dig) & 3) << (2*i));
|
||||
|
||||
|
||||
m_display_state[dig+3] = BITSWAP8(m_display_state[dig+3],7,2,0,4,6,5,3,1);
|
||||
}
|
||||
|
||||
|
||||
cforte_prepare_display();
|
||||
}
|
||||
|
||||
|
@ -777,7 +777,7 @@ main PCB is marked: "PH2"
|
||||
main PCB is labeled: "03814367" and "280402" and "N 132073"
|
||||
ROMs PCB is marked: "PH1"
|
||||
On top of main PCB there is a small piggyback PCB. it is a replacement for MN6221 Melody-Alarm Generator - sound. There are 3 PROMs (dumped) and a few 74xx logics.
|
||||
This board was in a cocktail table cabinet manufactured by Model Racing and labeled "Thunderbird".
|
||||
This board was in a cocktail table cabinet manufactured by Model Racing and labeled "Thunderbird".
|
||||
*/
|
||||
|
||||
ROM_START( phoenixc2 ) // verified main and ROMs PCBs and 2 PROMs
|
||||
@ -1158,7 +1158,7 @@ ROM_START( avefenixl )
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
PCB is marked: "003 LATO A" on component side and "003 LATO B" on solder side. (In Italian "lato" means "side")
|
||||
PCB is marked: "003 LATO A" on component side and "003 LATO B" on solder side. (In Italian "lato" means "side")
|
||||
*/
|
||||
|
||||
ROM_START( griffon ) // verified single PCB, single PROM
|
||||
@ -1570,7 +1570,7 @@ GAME( 1981, phoenixass, phoenix, phoenix, phoenix, driver_device, 0,
|
||||
GAME( 1980, avefenix, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Video Game)", "Ave Fenix (Electrogame, Spanish bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE ) // Electrogame (Barcelona) made the dedicated cabinet and is likely the real manufacturer, ingame shows 'Video Game'
|
||||
GAME( 1980, avefenixrf, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Recreativos Franco S.A.)", "Ave Fenix (Recreativos Franco, Spanish bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1980, avefenixl, phoenix, phoenix, phoenix, driver_device, 0, ROT90, "bootleg (Laguna)", "Ave Fenix (Laguna, Spanish bootleg of Phoenix)", MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
|
||||
/*** Pleiads (& clones) ***/
|
||||
GAME( 1981, pleiads, 0, pleiads, pleiads, driver_device, 0, ROT90, "Tehkan", "Pleiads (Tehkan)", MACHINE_IMPERFECT_COLORS )
|
||||
GAME( 1981, pleiadsb2, pleiads, pleiads, pleiads, driver_device, 0, ROT90, "bootleg (ESG)", "Pleiads (bootleg set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
@ -1580,6 +1580,6 @@ GAME( 1981, pleiadsi, pleiads, pleiads, pleiadce, driver_device, 0,
|
||||
GAME( 1981, pleiadsn, pleiads, phoenix, pleiadce, driver_device, 0, ROT90, "Niemer S.A.", "Pleiads (Niemer S.A.)", MACHINE_IMPERFECT_COLORS ) // possibly licensed, but some of the roms match the bootlegs
|
||||
GAME( 1981, pleiadss, pleiads, phoenix, pleiadce, driver_device, 0, ROT90, "bootleg", "Pleiads (Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // colours match PCB (but are ugly)
|
||||
GAME( 1981, capitol, pleiads, phoenix, capitol, driver_device, 0, ROT90, "bootleg? (Universal Video Spiel)", "Capitol", MACHINE_IMPERFECT_COLORS )
|
||||
|
||||
|
||||
/*** Others ***/
|
||||
GAME( 1982, survival, 0, survival, survival, driver_device, 0, ROT90, "Rock-Ola", "Survival", MACHINE_IMPERFECT_COLORS )
|
||||
|
@ -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
|
||||
|
@ -5337,14 +5337,14 @@ void segas32_state::init_arescue(int m_hasdsp)
|
||||
uint8_t *dspsrc = (uint8_t *)memregion("dsp")->base();
|
||||
uint32_t *dspprg = (uint32_t *)memregion("dspprg")->base();
|
||||
uint16_t *dspdata = (uint16_t *)memregion("dspdata")->base();
|
||||
|
||||
|
||||
// copy DSP program
|
||||
for (int i = 0; i < 0x2000; i+= 4)
|
||||
{
|
||||
*dspprg = dspsrc[0+i]<<24 | dspsrc[1+i]<<16 | dspsrc[2+i]<<8;
|
||||
dspprg++;
|
||||
}
|
||||
|
||||
|
||||
// copy DSP data
|
||||
for (int i = 0; i < 0x800; i+= 2)
|
||||
{
|
||||
|
@ -397,7 +397,7 @@ static ADDRESS_MAP_START( penbros_map, AS_PROGRAM, 16, seta2_state )
|
||||
AM_RANGE(0x500302, 0x500303) AM_READ_PORT("DSW2") // DSW 2
|
||||
AM_RANGE(0x500300, 0x50030f) AM_WRITE(sound_bank_w) // Samples Banks
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( penbrosk_map, AS_PROGRAM, 16, seta2_state )
|
||||
AM_IMPORT_FROM(penbros_base_map)
|
||||
AM_RANGE(0x508300, 0x508301) AM_READ_PORT("DSW1") // DSW 1
|
||||
|
@ -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
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
@ -36,20 +36,20 @@ public:
|
||||
|
||||
virtual void machine_reset() override;
|
||||
virtual void machine_start() override;
|
||||
|
||||
|
||||
DECLARE_READ32_MEMBER(tty_ready_r);
|
||||
DECLARE_WRITE32_MEMBER(tty_w);
|
||||
DECLARE_READ32_MEMBER(test_r) { return 0xffffffff; }
|
||||
|
||||
|
||||
DECLARE_READ32_MEMBER(pic_r);
|
||||
DECLARE_WRITE32_MEMBER(pic_w);
|
||||
|
||||
|
||||
DECLARE_WRITE32_MEMBER(dmaaddr_w);
|
||||
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(dmarq_w);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
@ -78,7 +78,7 @@ void vp10x_state::machine_start()
|
||||
m_maincpu->mips3drc_set_options(MIPS3DRC_FASTEST_OPTIONS);
|
||||
m_maincpu->add_fastram(0x00000000, 0x07ffffff, false, m_mainram);
|
||||
}
|
||||
|
||||
|
||||
WRITE32_MEMBER(vp10x_state::dmaaddr_w)
|
||||
{
|
||||
m_dma_ptr = (data & 0x07ffffff);
|
||||
@ -89,18 +89,18 @@ WRITE_LINE_MEMBER(vp10x_state::dmarq_w)
|
||||
if (state != m_dmarq_state)
|
||||
{
|
||||
m_dmarq_state = state;
|
||||
|
||||
|
||||
if (state)
|
||||
{
|
||||
uint16_t *RAMbase = (uint16_t *)&m_mainram[0];
|
||||
uint16_t *RAM = &RAMbase[m_dma_ptr>>1];
|
||||
uint16_t *RAM = &RAMbase[m_dma_ptr>>1];
|
||||
|
||||
m_ata->write_dmack(ASSERT_LINE);
|
||||
m_ata->write_dmack(ASSERT_LINE);
|
||||
|
||||
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);
|
||||
@ -108,7 +108,7 @@ WRITE_LINE_MEMBER(vp10x_state::dmarq_w)
|
||||
}
|
||||
}
|
||||
|
||||
READ32_MEMBER(vp10x_state::pic_r)
|
||||
READ32_MEMBER(vp10x_state::pic_r)
|
||||
{
|
||||
static const uint8_t vers[5] = { 0x00, 0x01, 0x00, 0x00, 0x00 };
|
||||
static const uint8_t serial[10] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a };
|
||||
@ -118,15 +118,15 @@ READ32_MEMBER(vp10x_state::pic_r)
|
||||
{
|
||||
case 0x20:
|
||||
return vers[pic_state++];
|
||||
|
||||
|
||||
case 0x21:
|
||||
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++];
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -165,7 +165,7 @@ uint32_t vp10x_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
|
||||
*line++ = word;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -205,7 +205,7 @@ static INPUT_PORTS_START( vp101 )
|
||||
PORT_BIT( 0x00000002, IP_ACTIVE_LOW, IPT_START1 )
|
||||
PORT_BIT( 0x00000004, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||
PORT_BIT( 0x00000008, IP_ACTIVE_LOW, IPT_START2 )
|
||||
|
||||
|
||||
PORT_BIT( 0xfffffff0, IP_ACTIVE_HIGH, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -223,10 +223,10 @@ static MACHINE_CONFIG_START( vp101, vp10x_state )
|
||||
MCFG_SCREEN_UPDATE_DRIVER(vp10x_state, screen_update)
|
||||
MCFG_SCREEN_SIZE(320, 240)
|
||||
MCFG_SCREEN_VISIBLE_AREA(0, 319, 0, 239)
|
||||
|
||||
|
||||
MCFG_ATA_INTERFACE_ADD("ata", ata_devices, "hdd", nullptr, false)
|
||||
MCFG_ATA_INTERFACE_DMARQ_HANDLER(WRITELINE(vp10x_state, dmarq_w))
|
||||
|
||||
|
||||
MCFG_NVRAM_ADD_0FILL("nvram")
|
||||
MACHINE_CONFIG_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)
|
||||
|
@ -55,4 +55,4 @@ public:
|
||||
INTERRUPT_GEN_MEMBER(marineb_vblank_irq);
|
||||
INTERRUPT_GEN_MEMBER(wanted_vblank_irq);
|
||||
void set_tilemap_scrolly( int cols );
|
||||
};
|
||||
};
|
||||
|
@ -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?
|
||||
|
@ -157,7 +157,7 @@ void abc80_state::draw_scanline(bitmap_rgb32 &bitmap, int y)
|
||||
void abc80_state::video_start()
|
||||
{
|
||||
m_screen->register_screen_bitmap(m_bitmap);
|
||||
|
||||
|
||||
// start timers
|
||||
m_scanline_timer = timer_alloc(TIMER_ID_SCANLINE);
|
||||
m_scanline_timer->adjust(m_screen->time_until_pos(0, ABC80_HBEND), 0, m_screen->scan_period());
|
||||
|
@ -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