summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/com8116.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/com8116.cpp')
-rw-r--r--src/devices/machine/com8116.cpp29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/devices/machine/com8116.cpp b/src/devices/machine/com8116.cpp
index 0a3da24042e..06ebfb2f5b0 100644
--- a/src/devices/machine/com8116.cpp
+++ b/src/devices/machine/com8116.cpp
@@ -25,6 +25,7 @@ DEFINE_DEVICE_TYPE(COM8116, com8116_device, "com8116", "COM8116 Dual BRG")
DEFINE_DEVICE_TYPE(COM8116_003, com8116_003_device, "com8116_003", "COM8116-003 Dual BRG")
DEFINE_DEVICE_TYPE(COM5016_5, com5016_5_device, "com5016_5", "COM5016-5 Dual BRG")
DEFINE_DEVICE_TYPE(COM5016_013, com5016_013_device, "com5016_013", "COM5016-013 Dual BRG")
+DEFINE_DEVICE_TYPE(COM8116_020, com8116_020_device, "com8116_020", "COM8116-020 Dual BRG")
// Parts with T after the number do not have an internal oscillator and require an external clock source
// The SMC/COM 5xxx parts are all dual 5v/12v parts, while the 8xxx parts are 5v only
@@ -40,7 +41,6 @@ const int com8116_device::divisors_16X_5_0688MHz[16] =
// SMC/COM8116-003 and WD WD-1943-03
// from http://www.vintagecomputer.net/fjkraan/comp/divcomp/doc/SMC_BaudGen.pdf page 283 (pdf page 20)
// baud rates are 50, 75, 110, 134.5, 150, 200, 300, 600, 1200, 1800, 2000, 2400, 3600, 4800, 9600, 19200
-// SMC/COM8116T-020 should have similar output rates, but clock is unknown and probably different
const int com8116_device::divisors_16X_6_01835MHz[16] =
{ 7523, 5015, 3420, 2797, 2508, 1881, 1254, 627, 313, 209, 188, 157, 104, 78, 39, 20 };
@@ -63,6 +63,12 @@ const int com8116_device::divisors_32X_5_0688MHz[16] =
const int com8116_device::divisors_16X_2_7648MHz[16] =
{ 3456, 2304, 1571, 1285, 1152, 864, 576, 288, 144, 96, 86, 72, 48, 36, 18, 9 };
+// SMC/COM8116T-020 (corrected from http://bitsavers.org/pdf/visualTechnology/Visual_100/MM-100-001-0A_Visual_100_and_Visual_400_Video_Display_Terminal_Maintenance_Manual_Sep1980.pdf (pdf page 99))
+// (75, 134.5 and 2000 baud divisors given as 1,807, 856 and 57, which do not match stated actual frequencies)
+// baud rates are 50, 75, 110, 134.5, 150, 200, 300, 600, 1200, 1800, 2000, 2400, 3600, 4800, 9600, 19200
+const int com8116_device::divisors_16X_1_8432MHz[16] =
+ { 2304, 1536, 1047, 857, 768, 576, 384, 192, 96, 64, 58, 48, 32, 24, 12, 6 };
+
// SMC/COM5026(T)-030 (non-standard serial rates, from http://bitsavers.informatik.uni-stuttgart.de/pdf/standardMicrosystems/_dataBooks/1979_StandardMicrosystems.pdf page 135)
const int com8116_device::divisors_16X_5_0688MHz_030[16] =
{ 731, 733, 735, 737, 741, 743, 745, 751, 6970, 5569, 5433, 4752, 4269, 1920, 1584, 301 };
@@ -120,6 +126,11 @@ com5016_013_device::com5016_013_device(const machine_config &mconfig, const char
{
}
+com8116_020_device::com8116_020_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ com8116_device(mconfig, COM8116_020, tag, owner, clock, divisors_16X_1_8432MHz)
+{
+}
+
//-------------------------------------------------
// device_start - device-specific startup
@@ -193,7 +204,7 @@ void com8116_device::device_timer(emu_timer &timer, device_timer_id id, int para
// str_w -
//-------------------------------------------------
-void com8116_device::write_str(uint8_t data)
+void com8116_device::str_w(uint8_t data)
{
int fr_divider = data & 0x0f;
int fr_clock = clock() / m_divisors[fr_divider];
@@ -208,7 +219,7 @@ void com8116_device::write_str(uint8_t data)
// stt_w -
//-------------------------------------------------
-void com8116_device::write_stt(uint8_t data)
+void com8116_device::stt_w(uint8_t data)
{
int ft_divider = data & 0x0f;
int ft_clock = clock() / m_divisors[ft_divider];
@@ -223,10 +234,10 @@ void com8116_device::write_stt(uint8_t data)
// str_stt_w -
//-------------------------------------------------
-WRITE8_MEMBER(com8116_device::str_stt_w)
+void com8116_device::str_stt_w(uint8_t data)
{
- write_str(data >> 4);
- write_stt(data & 0x0f);
+ str_w(data >> 4);
+ stt_w(data & 0x0f);
}
@@ -234,8 +245,8 @@ WRITE8_MEMBER(com8116_device::str_stt_w)
// stt_str_w -
//-------------------------------------------------
-WRITE8_MEMBER(com8116_device::stt_str_w)
+void com8116_device::stt_str_w(uint8_t data)
{
- write_stt(data >> 4);
- write_str(data & 0x0f);
+ stt_w(data >> 4);
+ str_w(data & 0x0f);
}