diff options
Diffstat (limited to 'src/devices/machine/com8116.cpp')
-rw-r--r-- | src/devices/machine/com8116.cpp | 29 |
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); } |