summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/isa/3c505.cpp25
-rw-r--r--src/mame/machine/apollo_kbd.cpp18
-rw-r--r--src/mame/video/apollo.cpp8
-rw-r--r--src/osd/modules/input/input_common.cpp4
4 files changed, 38 insertions, 17 deletions
diff --git a/src/devices/bus/isa/3c505.cpp b/src/devices/bus/isa/3c505.cpp
index 6c4dcd234a5..0e22d52fe65 100644
--- a/src/devices/bus/isa/3c505.cpp
+++ b/src/devices/bus/isa/3c505.cpp
@@ -1288,6 +1288,31 @@ UINT8 threecom3c505_device::read_command_port()
case CMD_TRANSMIT_PACKET_18_COMPLETE:
m_netstat.tot_xmit++;
+ // append the Ethernet Frame Check Sequence
+ // see also http://www.edaboard.com/thread120700.html
+ {
+ // compute the Ethernet Frame Check Sequence
+ static const UINT32 crc_table[] =
+ { 0x4DBDF21C, 0x500AE278, 0x76D3D2D4, 0x6B64C2B0,
+ 0x3B61B38C, 0x26D6A3E8, 0x000F9344, 0x1DB88320,
+ 0xA005713C, 0xBDB26158, 0x9B6B51F4, 0x86DC4190,
+ 0xD6D930AC, 0xCB6E20C8, 0xEDB71064, 0xF0000000 };
+ UINT32 n, crc = 0;
+ for (n = 0; n < m_tx_data_buffer.get_length(); n++)
+ {
+ UINT8 data = m_tx_data_buffer.get(n);
+ crc = (crc >> 4) ^ crc_table[(crc ^ (data >> 0)) & 0x0f]; /* lower nibble */
+ crc = (crc >> 4) ^ crc_table[(crc ^ (data >> 4)) & 0x0f]; /* upper nibble */
+ }
+
+ // append the Ethernet Frame Check Sequence
+ for (n = 0; n < 4; n++)
+ {
+ m_tx_data_buffer.append(crc & 0xff);
+ crc >>= 8;
+ }
+ }
+
if (!send(m_tx_data_buffer.get_data(), m_tx_data_buffer.get_length()))
{
// FIXME: failed to send the Ethernet packet
diff --git a/src/mame/machine/apollo_kbd.cpp b/src/mame/machine/apollo_kbd.cpp
index 1907e464688..837418b4adc 100644
--- a/src/mame/machine/apollo_kbd.cpp
+++ b/src/mame/machine/apollo_kbd.cpp
@@ -518,8 +518,8 @@ int apollo_kbd_device::push_scancode(UINT8 code, UINT8 repeat)
switch (code)
{
case 0x00: code = 0x68; break; // _
- case 0x0e: code = 0x6b; break; // #
- case 0x29: code = 0x69; break; // <>
+ case 0x0e: code = 0x69; break; // #
+ case 0x29: code = 0x6b; break; // <>
case 0x42: code = 0x6f; break; // NP-
case 0x46: code = 0x6e; break; // NP+
case 0x4e: code = 0x73; break; // NP ENTER
@@ -633,7 +633,7 @@ void apollo_kbd_device::scan_keyboard()
m_keytime[x] = 0;
m_keyon[x] = 0;
m_last_pressed = 0;
- LOG2(("released key 0x%02x at time %d",x, m_keytime[x]));
+ LOG1(("released key 0x%02x at time %d",x, m_keytime[x]));
}
}
else if (m_keyon[x] == 0)
@@ -644,7 +644,7 @@ void apollo_kbd_device::scan_keyboard()
m_keytime[x] = m_mode == KBD_MODE_0_COMPATIBILITY ? m_delay : m_repeat;
m_keyon[x] = 1;
m_last_pressed = x;
- LOG2(("pushed key 0x%02x at time %d",x, m_keytime[x]));
+ LOG1(("pushed key 0x%02x at time %d",x, m_keytime[x]));
}
}
else if (m_last_pressed == x)
@@ -690,7 +690,7 @@ UINT16 apollo_kbd_device::m_code_table[] = {
/* B11 ) 0 */ 0x21, 0xA1, 0x30, 0x29, NOP, 0x30, NOP, No,
/* B12 _ - */ 0x22, 0xA2, 0x2D, 0x5F, NOP, 0x2D, NOP, Yes,
/* B13 + = */ 0x23, 0xA3, 0x3D, 0x2B, NOP, 0x3D, NOP, Yes,
- /* B14 ~ ' / BS */ 0x24, 0xA4, 0x60, 0x7E, 0x1E, 0x60, NOP, No,
+ /* D14 \\ | */ 0x53, 0xD3, 0xC8, 0xC9, NOP, 0xC8, NOP, No,
/* B15 BACKSPACE */ 0x25, 0xA5, 0xDE, 0xDE, NOP, 0xDE, NOP, Yes,
/* C1 TAB */ 0x2C, 0xAC, 0xCA, 0xDA, 0xFA, 0xCA, NOP, No,
@@ -717,22 +717,22 @@ UINT16 apollo_kbd_device::m_code_table[] = {
/* D8 J */ 0x4C, 0xCC, 0x6A, 0x4A, 0x0A, 0x4A, NOP, No,
/* D9 K */ 0x4D, 0xCD, 0x6B, 0x4B, 0x0B, 0x4B, NOP, No,
/* D10 L */ 0x4E, 0xCE, 0x6C, 0x4C, 0x0C, 0x4C, NOP, No,
- /* D11 : ; */ 0x4F, 0xCF, 0x3B, 0x3A, 0xFB, 0x3B, NOP, No,
+ /* D11 : ; / Oe */ 0x4F, 0xCF, 0x3B, 0x3A, 0xFB, 0x3B, NOP, No,
/* D12 " ' / Ae */ 0x50, 0xD0, 0x27, 0x22, 0xF8, 0x27, NOP, No,
- /* D14 ! \ */ 0x53, 0xD3, 0xC8, 0xC9, NOP, 0xC8, NOP, No,
+// Apollo US keyboards have no hash key (#)
+ /* D14 ' # */ NOP, NOP, 0x23, 0x27, NOP, 0x23, NOP, No,
/* E2 Z */ 0x60, 0xE0, 0x7A, 0x5A, 0x1A, 0x5A, NOP, No,
/* E3 X */ 0x61, 0xE1, 0x78, 0x58, 0x18, 0x58, NOP, No,
/* E4 C */ 0x62, 0xE2, 0x63, 0x43, 0x03, 0x43, NOP, No,
/* E5 V */ 0x63, 0xE3, 0x76, 0x56, 0x16, 0x56, NOP, No,
- /* E6 8 */ 0x64, 0xE4, 0x62, 0x42, 0x02, 0x42, NOP, No,
+ /* E6 B */ 0x64, 0xE4, 0x62, 0x42, 0x02, 0x42, NOP, No,
/* E7 N */ 0x65, 0xE5, 0x6E, 0x4E, 0x0E, 0x4E, NOP, No,
/* E8 M */ 0x66, 0xE6, 0x6D, 0x4D, 0x0D, 0x4D, NOP, No,
/* E9 < , */ 0x67, 0xE7, 0x2C, 0x3C, NOP, 0x2C, NOP, No,
/* E10 > . */ 0x68, 0xE8, 0x2E, 0x3E, NOP, 0x2E, NOP, Yes,
/* E11 ? / */ 0x69, 0xE9, 0xCC, 0xDC, 0xFC, 0xCC, NOP, No,
-// /* B14 ~ ' */ 0x24, 0xA4, 0x60, 0x7E, 0x1E, 0x60, NOP, No,
/* _ */ NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP,
/* F1 (space bar) */ 0x76, 0xF6, 0x20, 0x20, 0x20, 0x20, NOP, Yes,
/* LC0 Home */ 0x27, 0xA7, 0x84, 0x94, 0x84, 0x84, 0xA4, No,
diff --git a/src/mame/video/apollo.cpp b/src/mame/video/apollo.cpp
index 32f7256aa94..41c0727fe2e 100644
--- a/src/mame/video/apollo.cpp
+++ b/src/mame/video/apollo.cpp
@@ -1710,10 +1710,7 @@ MACHINE_CONFIG_FRAGMENT( apollo_graphics )
MCFG_DEFAULT_LAYOUT( layout_apollo_15i )
MCFG_SCREEN_ADD(VIDEO_SCREEN_TAG, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(76)
- MCFG_SCREEN_RAW_PARAMS(68000000, 1343, 0, 1024, 841, 0, 800)
- MCFG_SCREEN_SIZE(1024, 800)
- MCFG_SCREEN_VISIBLE_AREA(0, 1023, 0, 799)
+ MCFG_SCREEN_RAW_PARAMS(68000000, 1346, 0, 1024, 841, 0, 800)
MCFG_SCREEN_UPDATE_DEVICE(APOLLO_SCREEN_TAG, apollo_graphics_15i, screen_update)
MACHINE_CONFIG_END
@@ -1894,10 +1891,7 @@ MACHINE_CONFIG_FRAGMENT( apollo_mono19i )
MCFG_PALETTE_ADD_MONOCHROME("palette")
MCFG_SCREEN_ADD(VIDEO_SCREEN_TAG, RASTER)
MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
- MCFG_SCREEN_REFRESH_RATE(64)
MCFG_SCREEN_RAW_PARAMS(120000000, 1728, 0, 1280, 1066, 0, 1024)
- MCFG_SCREEN_SIZE(1280, 1024)
- MCFG_SCREEN_VISIBLE_AREA(0, 1279, 0, 1023)
MCFG_SCREEN_UPDATE_DEVICE(APOLLO_SCREEN_TAG, apollo_graphics_19i, screen_update)
MACHINE_CONFIG_END
diff --git a/src/osd/modules/input/input_common.cpp b/src/osd/modules/input/input_common.cpp
index 05c7511cdd7..65b1ce144a6 100644
--- a/src/osd/modules/input/input_common.cpp
+++ b/src/osd/modules/input/input_common.cpp
@@ -87,7 +87,9 @@ key_trans_entry keyboard_trans_table::s_default_table[] =
KEY_TRANS_ENTRY1(TILDE, GRAVE, BACKQUOTE, GRAVE, VK_OEM_3, '`'),
KEY_TRANS_ENTRY1(LSHIFT, LSHIFT, LSHIFT, LSHIFT, VK_LSHIFT, 0),
KEY_TRANS_ENTRY1(BACKSLASH, BACKSLASH, BACKSLASH, BACKSLASH, VK_OEM_5, '\\'),
- KEY_TRANS_ENTRY1(BACKSLASH2, NONUSHASH, UNKNOWN, OEM_102, VK_OEM_102, '<'),
+// KEY_TRANS_ENTRY1(BACKSLASH2, NONUSHASH, UNKNOWN, OEM_102, VK_OEM_102, '<'),
+// This is the additional key that ISO keyboards have over ANSI ones, located between left shift and Y.
+ KEY_TRANS_ENTRY1(BACKSLASH2, NONUSBACKSLASH, UNKNOWN, OEM_102, VK_OEM_102, '<'),
KEY_TRANS_ENTRY1(Z, Z, z, Z, 'Z', 'Z'),
KEY_TRANS_ENTRY1(X, X, x, X, 'X', 'X'),
KEY_TRANS_ENTRY1(C, C, c, C, 'C', 'C'),