CINXE.COM

Ken Shirriff's blog: January 2018

<!DOCTYPE html> <html class='v2' dir='ltr' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'> <head> <link href='https://www.blogger.com/static/v1/widgets/3566091532-css_bundle_v2.css' rel='stylesheet' type='text/css'/> <meta content='width=1100' name='viewport'/> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> <meta content='blogger' name='generator'/> <link href='http://www.righto.com/favicon.ico' rel='icon' type='image/x-icon'/> <link href='http://www.righto.com/2018/01/' rel='canonical'/> <link rel="alternate" type="application/atom+xml" title="Ken Shirriff&#39;s blog - Atom" href="http://www.righto.com/feeds/posts/default" /> <link rel="alternate" type="application/rss+xml" title="Ken Shirriff&#39;s blog - RSS" href="http://www.righto.com/feeds/posts/default?alt=rss" /> <link rel="service.post" type="application/atom+xml" title="Ken Shirriff&#39;s blog - Atom" href="https://www.blogger.com/feeds/6264947694886887540/posts/default" /> <!--Can't find substitution for tag [blog.ieCssRetrofitLinks]--> <meta content='http://www.righto.com/2018/01/' property='og:url'/> <meta content='Ken Shirriff&#39;s blog' property='og:title'/> <meta content='Computer history, restoring vintage computers, IC reverse engineering, and whatever' property='og:description'/> <title>Ken Shirriff's blog: January 2018</title> <style type='text/css'>@font-face{font-family:'Play';font-style:normal;font-weight:400;font-display:swap;src:url(//fonts.gstatic.com/s/play/v19/6aez4K2oVqwIvtU2Gw.eot);}</style> <style id='page-skin-1' type='text/css'><!-- /* ----------------------------------------------- Blogger Template Style Name: Simple Designer: Blogger URL: www.blogger.com ----------------------------------------------- */ /* Variable definitions ==================== <Variable name="keycolor" description="Main Color" type="color" default="#66bbdd"/> <Group description="Page Text" selector="body"> <Variable name="body.font" description="Font" type="font" default="normal normal 12px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="body.text.color" description="Text Color" type="color" default="#222222"/> </Group> <Group description="Backgrounds" selector=".body-fauxcolumns-outer"> <Variable name="body.background.color" description="Outer Background" type="color" default="#66bbdd"/> <Variable name="content.background.color" description="Main Background" type="color" default="#ffffff"/> <Variable name="header.background.color" description="Header Background" type="color" default="transparent"/> </Group> <Group description="Links" selector=".main-outer"> <Variable name="link.color" description="Link Color" type="color" default="#2288bb"/> <Variable name="link.visited.color" description="Visited Color" type="color" default="#888888"/> <Variable name="link.hover.color" description="Hover Color" type="color" default="#33aaff"/> </Group> <Group description="Blog Title" selector=".header h1"> <Variable name="header.font" description="Font" type="font" default="normal normal 60px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="header.text.color" description="Title Color" type="color" default="#3399bb" /> </Group> <Group description="Blog Description" selector=".header .description"> <Variable name="description.text.color" description="Description Color" type="color" default="#777777" /> </Group> <Group description="Tabs Text" selector=".tabs-inner .widget li a"> <Variable name="tabs.font" description="Font" type="font" default="normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="tabs.text.color" description="Text Color" type="color" default="#999999"/> <Variable name="tabs.selected.text.color" description="Selected Color" type="color" default="#000000"/> </Group> <Group description="Tabs Background" selector=".tabs-outer .PageList"> <Variable name="tabs.background.color" description="Background Color" type="color" default="#f5f5f5"/> <Variable name="tabs.selected.background.color" description="Selected Color" type="color" default="#eeeeee"/> </Group> <Group description="Post Title" selector="h3.post-title, .comments h4"> <Variable name="post.title.font" description="Font" type="font" default="normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> </Group> <Group description="Date Header" selector=".date-header"> <Variable name="date.header.color" description="Text Color" type="color" default="#222222"/> <Variable name="date.header.background.color" description="Background Color" type="color" default="transparent"/> <Variable name="date.header.font" description="Text Font" type="font" default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="date.header.padding" description="Date Header Padding" type="string" default="inherit"/> <Variable name="date.header.letterspacing" description="Date Header Letter Spacing" type="string" default="inherit"/> <Variable name="date.header.margin" description="Date Header Margin" type="string" default="inherit"/> </Group> <Group description="Post Footer" selector=".post-footer"> <Variable name="post.footer.text.color" description="Text Color" type="color" default="#666666"/> <Variable name="post.footer.background.color" description="Background Color" type="color" default="#f9f9f9"/> <Variable name="post.footer.border.color" description="Shadow Color" type="color" default="#eeeeee"/> </Group> <Group description="Gadgets" selector="h2"> <Variable name="widget.title.font" description="Title Font" type="font" default="normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif"/> <Variable name="widget.title.text.color" description="Title Color" type="color" default="#000000"/> <Variable name="widget.alternate.text.color" description="Alternate Color" type="color" default="#999999"/> </Group> <Group description="Images" selector=".main-inner"> <Variable name="image.background.color" description="Background Color" type="color" default="#ffffff"/> <Variable name="image.border.color" description="Border Color" type="color" default="#eeeeee"/> <Variable name="image.text.color" description="Caption Text Color" type="color" default="#222222"/> </Group> <Group description="Accents" selector=".content-inner"> <Variable name="body.rule.color" description="Separator Line Color" type="color" default="#eeeeee"/> <Variable name="tabs.border.color" description="Tabs Border Color" type="color" default="#eeeeee"/> </Group> <Variable name="body.background" description="Body Background" type="background" color="#f6fbf6" default="$(color) none repeat scroll top left"/> <Variable name="body.background.override" description="Body Background Override" type="string" default=""/> <Variable name="body.background.gradient.cap" description="Body Gradient Cap" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png)"/> <Variable name="body.background.gradient.tile" description="Body Gradient Tile" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/body_gradient_tile_light.png)"/> <Variable name="content.background.color.selector" description="Content Background Color Selector" type="string" default=".content-inner"/> <Variable name="content.padding" description="Content Padding" type="length" default="10px" min="0" max="100px"/> <Variable name="content.padding.horizontal" description="Content Horizontal Padding" type="length" default="10px" min="0" max="100px"/> <Variable name="content.shadow.spread" description="Content Shadow Spread" type="length" default="40px" min="0" max="100px"/> <Variable name="content.shadow.spread.webkit" description="Content Shadow Spread (WebKit)" type="length" default="5px" min="0" max="100px"/> <Variable name="content.shadow.spread.ie" description="Content Shadow Spread (IE)" type="length" default="10px" min="0" max="100px"/> <Variable name="main.border.width" description="Main Border Width" type="length" default="0" min="0" max="10px"/> <Variable name="header.background.gradient" description="Header Gradient" type="url" default="none"/> <Variable name="header.shadow.offset.left" description="Header Shadow Offset Left" type="length" default="-1px" min="-50px" max="50px"/> <Variable name="header.shadow.offset.top" description="Header Shadow Offset Top" type="length" default="-1px" min="-50px" max="50px"/> <Variable name="header.shadow.spread" description="Header Shadow Spread" type="length" default="1px" min="0" max="100px"/> <Variable name="header.padding" description="Header Padding" type="length" default="30px" min="0" max="100px"/> <Variable name="header.border.size" description="Header Border Size" type="length" default="1px" min="0" max="10px"/> <Variable name="header.bottom.border.size" description="Header Bottom Border Size" type="length" default="0" min="0" max="10px"/> <Variable name="header.border.horizontalsize" description="Header Horizontal Border Size" type="length" default="0" min="0" max="10px"/> <Variable name="description.text.size" description="Description Text Size" type="string" default="140%"/> <Variable name="tabs.margin.top" description="Tabs Margin Top" type="length" default="0" min="0" max="100px"/> <Variable name="tabs.margin.side" description="Tabs Side Margin" type="length" default="30px" min="0" max="100px"/> <Variable name="tabs.background.gradient" description="Tabs Background Gradient" type="url" default="url(https://resources.blogblog.com/blogblog/data/1kt/simple/gradients_light.png)"/> <Variable name="tabs.border.width" description="Tabs Border Width" type="length" default="1px" min="0" max="10px"/> <Variable name="tabs.bevel.border.width" description="Tabs Bevel Border Width" type="length" default="1px" min="0" max="10px"/> <Variable name="post.margin.bottom" description="Post Bottom Margin" type="length" default="25px" min="0" max="100px"/> <Variable name="image.border.small.size" description="Image Border Small Size" type="length" default="2px" min="0" max="10px"/> <Variable name="image.border.large.size" description="Image Border Large Size" type="length" default="5px" min="0" max="10px"/> <Variable name="page.width.selector" description="Page Width Selector" type="string" default=".region-inner"/> <Variable name="page.width" description="Page Width" type="string" default="auto"/> <Variable name="main.section.margin" description="Main Section Margin" type="length" default="15px" min="0" max="100px"/> <Variable name="main.padding" description="Main Padding" type="length" default="15px" min="0" max="100px"/> <Variable name="main.padding.top" description="Main Padding Top" type="length" default="30px" min="0" max="100px"/> <Variable name="main.padding.bottom" description="Main Padding Bottom" type="length" default="30px" min="0" max="100px"/> <Variable name="paging.background" color="#ffffff" description="Background of blog paging area" type="background" default="transparent none no-repeat scroll top center"/> <Variable name="footer.bevel" description="Bevel border length of footer" type="length" default="0" min="0" max="10px"/> <Variable name="mobile.background.overlay" description="Mobile Background Overlay" type="string" default="transparent none repeat scroll top left"/> <Variable name="mobile.background.size" description="Mobile Background Size" type="string" default="auto"/> <Variable name="mobile.button.color" description="Mobile Button Color" type="color" default="#ffffff" /> <Variable name="startSide" description="Side where text starts in blog language" type="automatic" default="left"/> <Variable name="endSide" description="Side where text ends in blog language" type="automatic" default="right"/> */ /* Content ----------------------------------------------- */ body { font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #222222; background: #f6fbf6 none repeat scroll top left; padding: 0 40px 40px 40px; } html body .region-inner { min-width: 0; max-width: 100%; width: auto; } h2 { font-size: 22px; } a:link { text-decoration:none; color: #121fb3; } a:visited { text-decoration:none; color: #121fb3; } a:hover { text-decoration:underline; color: #1a00ff; } .body-fauxcolumn-outer .fauxcolumn-inner { background: transparent url(//www.blogblog.com/1kt/simple/body_gradient_tile_light.png) repeat scroll top left; _background-image: none; } .body-fauxcolumn-outer .cap-top { position: absolute; z-index: 1; height: 400px; width: 100%; } .body-fauxcolumn-outer .cap-top .cap-left { width: 100%; background: transparent url(//www.blogblog.com/1kt/simple/gradients_light.png) repeat-x scroll top left; _background-image: none; } .content-outer { -moz-box-shadow: 0 0 40px rgba(0, 0, 0, .15); -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .15); -goog-ms-box-shadow: 0 0 10px #333333; box-shadow: 0 0 40px rgba(0, 0, 0, .15); margin-bottom: 1px; } .content-inner { padding: 10px 10px; } .content-inner { background-color: #ffffff; } /* Header ----------------------------------------------- */ .header-outer { background: #f6fbf7 url(//www.blogblog.com/1kt/simple/gradients_light.png) repeat-x scroll 0 -400px; _background-image: none; } .Header h1 { font: normal normal 42px Play; color: #666666; text-shadow: 1px 2px 3px rgba(0, 0, 0, .2); } .Header h1 a { color: #666666; } .Header .description { font-size: 140%; color: #666666; } .header-inner .Header .titlewrapper { padding: 22px 30px; } .header-inner .Header .descriptionwrapper { padding: 0 30px; } /* Tabs ----------------------------------------------- */ .tabs-inner .section:first-child { border-top: 0 solid #eeeeee; } .tabs-inner .section:first-child ul { margin-top: -0; border-top: 0 solid #eeeeee; border-left: 0 solid #eeeeee; border-right: 0 solid #eeeeee; } .tabs-inner .widget ul { background: #f5f5f5 url(//www.blogblog.com/1kt/simple/gradients_light.png) repeat-x scroll 0 -800px; _background-image: none; border-bottom: 1px solid #eeeeee; margin-top: 0; margin-left: -30px; margin-right: -30px; } .tabs-inner .widget li a { display: inline-block; padding: .6em 1em; font: normal normal 14px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #999999; border-left: 1px solid #ffffff; border-right: 1px solid #eeeeee; } .tabs-inner .widget li:first-child a { border-left: none; } .tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover { color: #000000; background-color: #eeeeee; text-decoration: none; } /* Columns ----------------------------------------------- */ .main-outer { border-top: 0 solid #eeeeee; } .fauxcolumn-left-outer .fauxcolumn-inner { border-right: 1px solid #eeeeee; } .fauxcolumn-right-outer .fauxcolumn-inner { border-left: 1px solid #eeeeee; } /* Headings ----------------------------------------------- */ div.widget > h2, div.widget h2.title { margin: 0 0 1em 0; font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif; color: #000000; } /* Widgets ----------------------------------------------- */ .widget .zippy { color: #999999; text-shadow: 2px 2px 1px rgba(0, 0, 0, .1); } .widget .popular-posts ul { list-style: none; } /* Posts ----------------------------------------------- */ h2.date-header { font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif; } .date-header span { background-color: transparent; color: transparent; padding: inherit; letter-spacing: inherit; margin: inherit; } .main-inner { padding-top: 30px; padding-bottom: 30px; } .main-inner .column-center-inner { padding: 0 15px; } .main-inner .column-center-inner .section { margin: 0 15px; } .post { margin: 0 0 25px 0; } h3.post-title, .comments h4 { font: normal normal 22px Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: .75em 0 0; } .post-body { font-size: 110%; line-height: 1.4; position: relative; } .post-body img, .post-body .tr-caption-container, .Profile img, .Image img, .BlogList .item-thumbnail img { padding: 2px; background: #ffffff; border: 1px solid #ffffff; -moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); -webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); box-shadow: 1px 1px 5px rgba(0, 0, 0, .1); } .post-body img, .post-body .tr-caption-container { padding: 5px; } .post-body .tr-caption-container { color: #222222; } .post-body .tr-caption-container img { padding: 0; background: transparent; border: none; -moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1); -webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1); box-shadow: 0 0 0 rgba(0, 0, 0, .1); } .post-header { margin: 0 0 1.5em; line-height: 1.6; font-size: 90%; } .post-footer { margin: 20px -2px 0; padding: 5px 10px; color: #666666; background-color: #f9f9f9; border-bottom: 1px solid #eeeeee; line-height: 1.6; font-size: 90%; } #comments .comment-author { padding-top: 1.5em; border-top: 1px solid #eeeeee; background-position: 0 1.5em; } #comments .comment-author:first-child { padding-top: 0; border-top: none; } .avatar-image-container { margin: .2em 0 0; } #comments .avatar-image-container img { border: 1px solid #ffffff; } /* Comments ----------------------------------------------- */ .comments .comments-content .icon.blog-author { background-repeat: no-repeat; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==); } .comments .comments-content .loadmore a { border-top: 1px solid #999999; border-bottom: 1px solid #999999; } .comments .comment-thread.inline-thread { background-color: #f9f9f9; } .comments .continue { border-top: 2px solid #999999; } /* Accents ---------------------------------------------- */ .section-columns td.columns-cell { border-left: 1px solid #eeeeee; } .blog-pager { background: transparent none no-repeat scroll top center; } .blog-pager-older-link, .home-link, .blog-pager-newer-link { background-color: #ffffff; padding: 5px; } .footer-outer { border-top: 0 dashed #bbbbbb; } /* Mobile ----------------------------------------------- */ body.mobile { background-size: auto; } .mobile .body-fauxcolumn-outer { background: transparent none repeat scroll top left; } .mobile .body-fauxcolumn-outer .cap-top { background-size: 100% auto; } .mobile .content-outer { -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15); box-shadow: 0 0 3px rgba(0, 0, 0, .15); } .mobile .tabs-inner .widget ul { margin-left: 0; margin-right: 0; } .mobile .post { margin: 0; } .mobile .main-inner .column-center-inner .section { margin: 0; } .mobile .date-header span { padding: 0.1em 10px; margin: 0 -10px; } .mobile h3.post-title { margin: 0; } .mobile .blog-pager { background: transparent none no-repeat scroll top center; } .mobile .footer-outer { border-top: none; } .mobile .main-inner, .mobile .footer-inner { background-color: #ffffff; } .mobile-index-contents { color: #222222; } .mobile-link-button { background-color: #121fb3; } .mobile-link-button a:link, .mobile-link-button a:visited { color: #ffffff; } .mobile .tabs-inner .section:first-child { border-top: none; } .mobile .tabs-inner .PageList .widget-content { background-color: #eeeeee; color: #000000; border-top: 1px solid #eeeeee; border-bottom: 1px solid #eeeeee; } .mobile .tabs-inner .PageList .widget-content .pagelist-arrow { border-left: 1px solid #eeeeee; } .content-outer { max-width: 1400px !important; } /* fix header */ #header-inner { width: 100% !important; background-position: right !important; } .titlewrapper { padding: 11px 30px 0 !important; } .descriptionwrapper { margin-bottom: 0 !important; } .description { font-size: 120% !important; } /* suppress things */ .date-header { display: none; } #Attribution1 { display: none; } .post-author, .post-timestamp, .reaction-buttons { display: none; } /* h2: sidebar titles */ /* h3: post title */ .post-title , .entry-title { font-size: 180% !important; margin-top: 0 !important; } .entry-title a:link, .entry-title a:visited, .entry-title a:active{ color: #a03; } #main h2 { color:#333; margin-bottom:.4em; margin-top: 13px; font-size:140%; } #main h3 { color:#333; margin-bottom:.4em; margin-top: 13px; font-size:110%; } #main h4 { color:#333; margin-bottom:.5em; } #sidebar-right-1 a:link, #sidebar-right-1 a:visited, #sidebar-right-1 a:active { color: #666; } #sidebar-right-1 h2 { font-size: 100%; color: #666; } /* disable image box */ element.style { } table.chargers img { height: 18px; } table.chargers img { height: 18px; } .post-body img, .post-body .tr-caption-container { padding: 5px; } .post-body img, .post-body .tr-caption-container, .Profile img, .Image img, .BlogList .item-thumbnail img { padding: 0; background: #ffffff; border: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } /* Special items */ a:link img.hilite, a:visited img.hilite { color: #fff; } a:hover img.hilite, a:hover img.hilite2 { color: #f66; } a:active img.hilite { color: #33c; } .hilite {cursor:zoom-in} pre {color:#000000;border:1px solid #000000;} pre.repl { background-color:#e0e0f0; font-size:120%;} pre.arc { background-color:#e0e0f0; font-size:120%;} pre.code { background-color:#e0f0e0; font-size:120%; white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;word-wrap:break-word;text-wrap:unrestricted;} code { font-size: 100%;} blockquote { font-size: 110%; background: transparent url("//static.righto.com/images/blockquote.gif") no-repeat 0 0; margin: 20px 0px; padding: 0px 40px;} div.cite {font-size: .8em;.; font-style: italic; color: #888; margin-bottom: 9px;} a.ref { color: gray;vertical-align: super; text-decoration: none; font-size:60%;margin-left: 2px;} a img.hilite { border: 1px solid; color: #888; z-index: 2; } a img.hilite2, a:active img.hilite2 { border: 1px solid; color: #f6fbf6; } table.chargers { border-width: 1px; border-spacing: 2px; border-style: outset; border-color: gray; border-collapse: collapse; background-color: white; } table.chargers th.maker { padding-right: 5px; text-align: right; } table.chargers th { border-width: 1px; padding: 3px; border-style: inset; border-color: gray; background-color: white; text-align: center; } table.chargers img { height: 18px; } table.chargers td { text-align: center; border-width: 1px; padding: 2px 8px; border-style: inset; border-color: gray; background-color: white; } --></style> <style id='template-skin-1' type='text/css'><!-- body { min-width: 750px; } .content-outer, .content-fauxcolumn-outer, .region-inner { min-width: 750px; max-width: 750px; _width: 750px; } .main-inner .columns { padding-left: 0px; padding-right: 240px; } .main-inner .fauxcolumn-center-outer { left: 0px; right: 240px; /* IE6 does not respect left and right together */ _width: expression(this.parentNode.offsetWidth - parseInt("0px") - parseInt("240px") + 'px'); } .main-inner .fauxcolumn-left-outer { width: 0px; } .main-inner .fauxcolumn-right-outer { width: 240px; } .main-inner .column-left-outer { width: 0px; right: 100%; margin-left: -0px; } .main-inner .column-right-outer { width: 240px; margin-right: -240px; } #layout { min-width: 0; } #layout .content-outer { min-width: 0; width: 800px; } #layout .region-inner { min-width: 0; width: auto; } --></style> <meta content='width=device-width, initial-scale=1.0, maximum-scale=12.0, minimum-scale=.25, user-scalable=yes' name='viewport'/> <meta content='mw8ww70r3jW0GzXY6j1d' name='follow_it-verification-code'/> <link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=6264947694886887540&amp;zx=c26a9fbf-fe77-4d5f-920c-7ba0d42cc985' media='none' onload='if(media!=&#39;all&#39;)media=&#39;all&#39;' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=6264947694886887540&amp;zx=c26a9fbf-fe77-4d5f-920c-7ba0d42cc985' rel='stylesheet'/></noscript> <meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/> <meta name='google-adsense-platform-domain' content='blogspot.com'/> </head> <body class='loading'> <div class='navbar no-items section' id='navbar'> </div> <div class='body-fauxcolumns'> <div class='fauxcolumn-outer body-fauxcolumn-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <div class='content'> <div class='content-fauxcolumns'> <div class='fauxcolumn-outer content-fauxcolumn-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <div class='content-outer'> <div class='content-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left content-fauxborder-left'> <div class='fauxborder-right content-fauxborder-right'></div> <div class='content-inner'> <header> <div class='header-outer'> <div class='header-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left header-fauxborder-left'> <div class='fauxborder-right header-fauxborder-right'></div> <div class='region-inner header-inner'> <div class='header section' id='header'><div class='widget Header' data-version='1' id='Header1'> <div id='header-inner' style='background-image: url("https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-4KXwYe0lQ4HFzhAye9vvRlij2ZYvMbfPCnqEE__1o85Fjo3XgefxJQhWRdwR3EzNWNMWT3yMaj2QZaT9GazqQx3C6oWa3-hBNlRHG7f-Oib-lv1Wq_C2_A0rt8xZgs87iNqzRVKK7H0A/s800/background.jpg"); background-position: left; width: 550px; min-height: 105px; _height: 105px; background-repeat: no-repeat; '> <div class='titlewrapper' style='background: transparent'> <h1 class='title' style='background: transparent; border-width: 0px'> <a href='http://www.righto.com/'> Ken Shirriff's blog </a> </h1> </div> <div class='descriptionwrapper'> <p class='description'><span>Computer history, restoring vintage computers, IC reverse engineering, and whatever</span></p> </div> </div> </div></div> </div> </div> <div class='header-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </header> <div class='tabs-outer'> <div class='tabs-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left tabs-fauxborder-left'> <div class='fauxborder-right tabs-fauxborder-right'></div> <div class='region-inner tabs-inner'> <div class='tabs no-items section' id='crosscol'></div> <div class='tabs no-items section' id='crosscol-overflow'></div> </div> </div> <div class='tabs-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='main-outer'> <div class='main-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left main-fauxborder-left'> <div class='fauxborder-right main-fauxborder-right'></div> <div class='region-inner main-inner'> <div class='columns fauxcolumns'> <div class='fauxcolumn-outer fauxcolumn-center-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='fauxcolumn-outer fauxcolumn-left-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <div class='fauxcolumn-outer fauxcolumn-right-outer'> <div class='cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left'> <div class='fauxborder-right'></div> <div class='fauxcolumn-inner'> </div> </div> <div class='cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <!-- corrects IE6 width calculation --> <div class='columns-inner'> <div class='column-center-outer'> <div class='column-center-inner'> <div class='main section' id='main'><div class='widget Blog' data-version='1' id='Blog1'> <div class='blog-posts hfeed'> <div class="date-outer"> <div class="date-posts"> <div class='post-outer'> <div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixMWLCspUTijbXsNWoOaKFBUkQ4I3uZ_SNKUMRB1PFiwUMTEB_IfyKGr4rK69BVSO_uHPh4WqitkjP4jybyZpVP1zxKMkhjGeRbzQSWwoIwqt9PT0dm5w2Jz-N9KemlmcCh9SZ6jwo1050/w500/module-powered-up.jpg' itemprop='image_url'/> <meta content='6264947694886887540' itemprop='blogId'/> <meta content='2765567241382409490' itemprop='postId'/> <a name='2765567241382409490'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='http://www.righto.com/2018/01/ibm-mainframe-tube-module-part-ii.html'>IBM mainframe tube module part II: Powering up and using a 1950s key debouncer</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-2765567241382409490' itemprop='description articleBody'> <p>In the 1950s, before integrated circuits or even transistors, mainframe computers were built from thousands of power-hungry vacuum tubes filling massive cabinets. To simplify construction and maintenance of these computers, IBM invented a pluggable module with eight tubes;<span id="fnref:byte"><a class="ref" href="#fn:byte" rel="footnote">1</a></span> failed modules could be quickly pulled out of the computer and replaced. I came across one of these tube modules and wondered if it would still work decades later. Could I power it up and demonstrate it in a circuit, or would the components have failed with time?</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixMWLCspUTijbXsNWoOaKFBUkQ4I3uZ_SNKUMRB1PFiwUMTEB_IfyKGr4rK69BVSO_uHPh4WqitkjP4jybyZpVP1zxKMkhjGeRbzQSWwoIwqt9PT0dm5w2Jz-N9KemlmcCh9SZ6jwo1050/w9999/module-powered-up.jpg"><img alt="The glowing orange filaments are visible in the tubes of this IBM tube module. This 8-tube module is a key debouncer from the IBM 705 business computer." class="hilite" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixMWLCspUTijbXsNWoOaKFBUkQ4I3uZ_SNKUMRB1PFiwUMTEB_IfyKGr4rK69BVSO_uHPh4WqitkjP4jybyZpVP1zxKMkhjGeRbzQSWwoIwqt9PT0dm5w2Jz-N9KemlmcCh9SZ6jwo1050/w500/module-powered-up.jpg" title="The glowing orange filaments are visible in the tubes of this IBM tube module. This 8-tube module is a key debouncer from the IBM 705 business computer." width="500" /></a><div class="cite">The glowing orange filaments are visible in the tubes of this IBM tube module. This 8-tube module is a key debouncer from the IBM 705 business computer.</div></p> <p><a href="http://www.righto.com/2018/01/examining-1954-ibm-mainframes-pluggable.html">Part I of my post</a> discussed tube modules and described the IBM 705 that used this module. To recap, the IBM 705 was a large business computer introduced in 1954. It weighed 16 tons, used 70 kilowatts of power and cost $15 million (in 2018 dollars). A few dozen 705 systems were built, mostly used by large companies and the US government. For example, Texaco<span id="fnref:applications"><a class="ref" href="#fn:applications" rel="footnote">2</a></span> used the 705 for accounting applications such as payroll, marketing, and distribution. Even though the 705 was intended as a business computer, Texaco also used it for technical applications such as refinery simulation and pipe stress analysis. Below you can see the large CPU of an IBM 705 computer. Each of the four panels in the front held up to 80 tube modules.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcBsfWioQ-zm0GuuHrhW4v2aqjQS4av5sEs-Q4rQuAH8nrDFkHa1lRDjCoz47hN8_3Tyb-KqKicwmQhuhNVba3aVCFRm4zIbZOlV7FWDJf1-KRhacau5wNDujTXu5CjLCy468NzAImOUc2/w9999/ibm-705-edpm.jpg"><img alt="The CPU of an IBM 705. From IBM 705 Electronic Data Processing Machine brochure." class="hilite" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcBsfWioQ-zm0GuuHrhW4v2aqjQS4av5sEs-Q4rQuAH8nrDFkHa1lRDjCoz47hN8_3Tyb-KqKicwmQhuhNVba3aVCFRm4zIbZOlV7FWDJf1-KRhacau5wNDujTXu5CjLCy468NzAImOUc2/w500/ibm-705-edpm.jpg" title="The CPU of an IBM 705. From IBM 705 Electronic Data Processing Machine brochure." width="500" /></a><div class="cite">The CPU of an IBM 705. From <a href="http://s3data.computerhistory.org/brochures/ibm.705-edpm.1955.102646306.pdf">IBM 705 Electronic Data Processing Machine brochure</a>.</div></p> <h2>The debouncer</h2> <p>By tracing out the circuitry of the tube module and studying old IBM documents, I determined that the module consisted of five key debouncing circuits. When you press a key or button, the metal contacts inside the switch tend to bounce against each other a few times before closing, so you end up with multiple open/closed signals, rather than a nice, clean signal. To use a key signal in a computer, it needs to be "debounced", with the multiple rapid transitions replaced by a single, clean transition. (Perhaps you have used a cheap keyboard that occasionally gives you double letters; this happens when the keyboard bounces more than the debounce circuit can handle.) In modern systems, debouncing is usually done in software, but back in the 1950s tubes were used for debouncing.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjObbN6LPXrA-DgDpK3tyeWnh0Qr2tpyebDSkQHfPDcnqrP5neVxM6PPjRmXEQ-rG6U7bLpQNIa7UooOGqzZwSoKYQ5tSbSBquM8c61fNGlR412Nvekix8b4MZccrxKAE3QP8CHI1N_1Dn_/w9999/module-front.jpg"><img alt="This tube module from an IBM 705 mainframe computer, implemented five key debouncing circuits." class="hilite" height="327" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjObbN6LPXrA-DgDpK3tyeWnh0Qr2tpyebDSkQHfPDcnqrP5neVxM6PPjRmXEQ-rG6U7bLpQNIa7UooOGqzZwSoKYQ5tSbSBquM8c61fNGlR412Nvekix8b4MZccrxKAE3QP8CHI1N_1Dn_/w500/module-front.jpg" title="This tube module from an IBM 705 mainframe computer, implemented five key debouncing circuits." width="500" /></a><div class="cite">This tube module from an IBM 705 mainframe computer, implemented five key debouncing circuits.</div></p> <p>The IBM 705 was controlled from a complex console with control keys and neon status lights (below). The console was used for manual control of the computer, monitoring status, detecting and correcting errors, and debugging. (While memory could be modified from the console keyboard, programs were normally read from punch cards.) Tube-based debouncing circuits were used on many of the console keys to ensure proper operation, so that's probably the role of the module I examined.<span id="fnref:console"><a class="ref" href="#fn:console" rel="footnote">3</a></span></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDhWoQyXsPBLtHnHB1qDWphNVnUy_uZjLDFN3jyQxi2NGOg9KovP1lG2_crf7KuppFNUNWHAEeXA8dUenTtlI9HqI-cCKfuLC5MZGEkOaEqOQNq7FYLgDWFiDJBBhyphenhypheneOuJXm7xl8N8sAQS/w9999/ibm-705-console.jpg"><img alt="Console of an IBM 705 computer. That console was used to control the computer and for debugging it. Photo from IBM." class="hilite" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDhWoQyXsPBLtHnHB1qDWphNVnUy_uZjLDFN3jyQxi2NGOg9KovP1lG2_crf7KuppFNUNWHAEeXA8dUenTtlI9HqI-cCKfuLC5MZGEkOaEqOQNq7FYLgDWFiDJBBhyphenhypheneOuJXm7xl8N8sAQS/w500/ibm-705-console.jpg" title="Console of an IBM 705 computer. That console was used to control the computer and for debugging it. Photo from IBM." width="500" /></a><div class="cite">Console of an IBM 705 computer. That console was used to control the computer and for debugging it. Photo from <a href="http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/ibm700series/transform/">IBM</a>.</div></p> <h2>Vacuum tubes</h2> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEeNQKwKYo2Z44BjMfKPIV3z6rCQ5lkrfgD3eJ-qSbg77LWmjyUdOmFt6zJ8piDWKejDmXZK7emVjdmH6L6F_9ld_D6MW6JkS-QkAmt1ZXxNqNhOgKaPPLC66V4C08IcXna7et_xrL4-IM/w9999/ibm-6211-tube.jpg"><img alt="IBM 6211 vacuum tube: a dual triode. The pins plug into a socket on the top of the tube module. The plates are visible inside the tube. The number 6211 is faintly visible near the top of the tube." class="hilite" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEeNQKwKYo2Z44BjMfKPIV3z6rCQ5lkrfgD3eJ-qSbg77LWmjyUdOmFt6zJ8piDWKejDmXZK7emVjdmH6L6F_9ld_D6MW6JkS-QkAmt1ZXxNqNhOgKaPPLC66V4C08IcXna7et_xrL4-IM/w150/ibm-6211-tube.jpg" title="IBM 6211 vacuum tube: a dual triode. The pins plug into a socket on the top of the tube module. The plates are visible inside the tube. The number 6211 is faintly visible near the top of the tube." width="150" /></a><div class="cite">IBM 6211 vacuum tube: a dual triode. The pins plug into a socket on the top of the tube module. The plates are visible inside the tube. The number 6211 is faintly visible near the top of the tube.</div></p> <p>Since most readers probably haven't used vacuum tubes, I'll give a bit of background. This module was built from a common type of vacuum tube known as a triode. In a triode, electrons flow from the cathode to the plate (or anode), under the control of the grid. The heater, similar to a light bulb filament, heats the cathode to around 1000&#176;F, causing electrons to "boil" off the cathode. The anode has a large positive voltage (+140V in this module), which attracts the negatively-charged electrons. The grid is placed between the cathode and the anode to control the electron flow. If the grid is negative, it repels the electrons, blocking the flow to the plate. Thus, the triode can act as a switch, with the grid turning on and off the flow of electrons. The module I examined used dual triode tubes, combining two triodes into one tube for compactness.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSC83_hEKoiEmsLFS8olWTkQtB1s0RMcSrLw8GWgv6xPgqzvwZrSj7E6Lnytliser3V2CEXkzH1msIpDemUt0SEYhoP6TjvCOdH3wDrimtcY4jkkKsdlm8Gwd8i1GGaJjP1DXZL3JI8use/w9999/Triode_schematic_labeled.png"><img alt="Schematic symbol for a triode tube" class="hilite" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSC83_hEKoiEmsLFS8olWTkQtB1s0RMcSrLw8GWgv6xPgqzvwZrSj7E6Lnytliser3V2CEXkzH1msIpDemUt0SEYhoP6TjvCOdH3wDrimtcY4jkkKsdlm8Gwd8i1GGaJjP1DXZL3JI8use/w250/Triode_schematic_labeled.png" title="Schematic symbol for a triode tube" width="250" /></a><div class="cite">Schematic symbol for a triode tube</div></p> <p>Two vacuum tube circuits form the building blocks of this tube module: the inverting amplifier and the cathode follower. The schematic below shows a vacuum tube inverting amplifier (slightly simplified). If the input to the grid is negative, the flow of electrons through the tube is blocked, and the output is pulled up to +140 volts by the resistor. If the input to the grid is positive, electrons flow through the tube, pulling the plate output close to ground. Thus, the circuit both amplifies the input (since a small input change causes a large output change) and inverts the input. </p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2kn9C41M4DVrNKEMCe7W8lbE4tkBTYWiPHRwhcILAjoF7Z8xcy_sBJHmgWV4hZgGITswzZmZLy1CSYi3BgSNbK3-xomxSQZ54horiQlpUgpSnJBkvRkfT0IG6rdLwzF1CoXkhatGjMnnb/w9999/amplifier.png"><img alt="An inverting amplifier built from a vacuum tube triode." class="hilite" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2kn9C41M4DVrNKEMCe7W8lbE4tkBTYWiPHRwhcILAjoF7Z8xcy_sBJHmgWV4hZgGITswzZmZLy1CSYi3BgSNbK3-xomxSQZ54horiQlpUgpSnJBkvRkfT0IG6rdLwzF1CoXkhatGjMnnb/w249/amplifier.png" title="An inverting amplifier built from a vacuum tube triode." width="249" /></a><div class="cite">An inverting amplifier built from a vacuum tube triode.</div></p> <p>The second circuit used in the module is the cathode follower, which is essentially a buffer; its low-impedance output let it drive other circuits. While the schematic (below) looks similar to the inverter, it has the opposite effect since the output is from the cathode, not the plate. If a positive input voltage is fed into the grid, the tube will conduct. The voltage drop across the cathode resistor will cause the cathode voltage (and thus the output voltage) to rise. On the other hand, if the input voltage is negative, electron flow will be reduced, shrinking the voltage drop across the resistor and reducing the cathode voltage. Either way, the cathode voltage (and output) will adjust to be approximately equal to the input voltage. The trick is that it's not a negative grid <em>per se</em> that blocks electron flow, but a negative grid <em>with respect to the cathode</em>.<span id="fnref:oscillator"><a class="ref" href="#fn:oscillator" rel="footnote">4</a></span> Thus the cathode follower essentially copies its input voltage to the output, but providing higher current.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbAV7F2GMlxM_dYgqdUKYyFj5ZN7fbRjdojNFm3CJOBtFEBQNuXcVpb-p61a2b-hwXVVMjhX6SJQKqNhwnGRh_uMXHQuWZCFDd6CisLYEn6gfULKNQMWlEOZybgz3Eeulqf0KnJzrzhp41/w9999/cf.png"><img alt="A cathode follower buffer built from a vacuum tube triode." class="hilite" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbAV7F2GMlxM_dYgqdUKYyFj5ZN7fbRjdojNFm3CJOBtFEBQNuXcVpb-p61a2b-hwXVVMjhX6SJQKqNhwnGRh_uMXHQuWZCFDd6CisLYEn6gfULKNQMWlEOZybgz3Eeulqf0KnJzrzhp41/w264/cf.png" title="A cathode follower buffer built from a vacuum tube triode." width="264" /></a><div class="cite">A cathode follower buffer built from a vacuum tube triode.</div></p> <h2>Powering the filaments</h2> <p>The first step in making the module operational was to power up the vacuum tube filaments. Filaments usually operate at 6.3V AC for <a href="https://electronics.stackexchange.com/questions/292466/why-are-thermionic-valve-tube-heaters-generally-designed-to-be-6-3-v">historical reasons</a> (a 6V lead-acid battery contained three 2.1V cells, yielding 6.3V). Each tube's filament uses almost 3 watts, so a large filament transformer is necessary. The filament energy consumption is part of the reason tube-based computers used so much power.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh5X-R8i6-NZgJ-Mw5_wSHbBCT_9ay6akukuKBAmclhYaxc3JdxCL8ZGmXbe9nA2W8D9O46xwB0FDoeZi3J8NIpusvFzFPYmXALEN4FrbBGr0ZP_kVHDstrWhQ23KCsB4tuqPU0w-aoaCs/w9999/transformer.jpg"><img alt="The filament transformer converts AC line input to 6.3V to power the filaments. The transformer weighs 3.5 pounds." class="hilite" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh5X-R8i6-NZgJ-Mw5_wSHbBCT_9ay6akukuKBAmclhYaxc3JdxCL8ZGmXbe9nA2W8D9O46xwB0FDoeZi3J8NIpusvFzFPYmXALEN4FrbBGr0ZP_kVHDstrWhQ23KCsB4tuqPU0w-aoaCs/w250/transformer.jpg" title="The filament transformer converts AC line input to 6.3V to power the filaments. The transformer weighs 3.5 pounds." width="250" /></a><div class="cite">The filament transformer converts AC line input to 6.3V to power the filaments. The transformer weighs 3.5 pounds.</div></p> <p>We connected the transformer and inserted tubes one at a time to power up their filaments. Everything went smoothly&mdash;the tubes all lit up with a nice orange glow and none were burnt out. Each tube has two filaments (since they are dual triodes), so we could see two orange spots in each.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEievtO-v3vSdd5d0QWtJYg84KZPAFjDGfmc5vhRLpy7ZvT2fI44rDjZ0DrN-TY0QZjNWA9bDi099bGB3lOrCN_o6hDMtwAdLraz9tgWC8SaktpeMQ0-nbM34JWH1ixEldYQ35xUlc8AcG8y/w9999/filaments.jpg"><img alt="The tubes give off an orange glow when the filaments are powered with 6.3V AC." class="hilite" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEievtO-v3vSdd5d0QWtJYg84KZPAFjDGfmc5vhRLpy7ZvT2fI44rDjZ0DrN-TY0QZjNWA9bDi099bGB3lOrCN_o6hDMtwAdLraz9tgWC8SaktpeMQ0-nbM34JWH1ixEldYQ35xUlc8AcG8y/w400/filaments.jpg" title="The tubes give off an orange glow when the filaments are powered with 6.3V AC." width="400" /></a><div class="cite">The tubes give off an orange glow when the filaments are powered with 6.3V AC.</div></p> <h2>Powering the circuitry</h2> <p>Powering the tube module is inconvenient because of the multiple large voltages required. This tube module uses +140V, -60V and -130V, with input signals of probably 48V.<span id="fnref:voltages"><a class="ref" href="#fn:voltages" rel="footnote">10</a></span> The power supplies we had available only went up to +/- 120V, but I did some simulations with <a href="http://www.linear.com/solutions/ltspice">LTspice</a> that showed the module should work with the lower voltages. We used a stack of power supplies to power the module, mostly vintage HP supplies from Marc's collection.<span id="fnref:powersupplies"><a class="ref" href="#fn:powersupplies" rel="footnote">5</a></span></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimqTdtBzU0zisE-21OF1F1wWVdkbaMDOYTwQGGV_RiySgOJhI5RaaPnNZRrDqIPsjUcbI_YIqhXNZK5E8Dah6OsIGJfPG7Trs3JycZ12OuBd86On9vjsT_Tpzg0iJ917ZNUbJjBlBse8KU/w9999/test-setup.jpg"><img alt="To run the tube module, we used a stack of power supplies and test equipment. Two more power supplies are under the table." class="hilite" height="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimqTdtBzU0zisE-21OF1F1wWVdkbaMDOYTwQGGV_RiySgOJhI5RaaPnNZRrDqIPsjUcbI_YIqhXNZK5E8Dah6OsIGJfPG7Trs3JycZ12OuBd86On9vjsT_Tpzg0iJ917ZNUbJjBlBse8KU/w300/test-setup.jpg" title="To run the tube module, we used a stack of power supplies and test equipment. Two more power supplies are under the table." width="300" /></a><div class="cite">To run the tube module, we used a stack of power supplies and test equipment. Two more power supplies are under the table.</div></p> <p>The connector for the tube module probably hasn't been manufactured in 50 years, so I needed to find a way to connect wires to the module. I could have soldered wires directly to the module, but I didn't want to modify the module since it's a historical artifact. Instead I found that .110 quick-disconnect terminals fit (more or less) on the module's pins. To manage all the connections to the tube module, I built a small junction box to connect banana plugs from the power supplies to the tube module. This box also had a button to trigger the input.<span id="fnref:neon"><a class="ref" href="#fn:neon" rel="footnote">6</a></span></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFKe9Bf45wMf8CiIfmiuB0jo9mwEcCC_xCjm69g7rKSbUBJQiQ7AJSChJml48WJTxCgwTl5zkKs5mJlkUJZxs6r6HK9Vyp38yhEzdL7VBitnj4dy45yP8ICV8odSHaHj11V8xMhiFXBI0n/w9999/junction-box.jpg"><img alt="To keep the wiring under control, I built a junction box between the power supplies and the tube module. It also includes a pushbutton to control the input." class="hilite" height="268" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFKe9Bf45wMf8CiIfmiuB0jo9mwEcCC_xCjm69g7rKSbUBJQiQ7AJSChJml48WJTxCgwTl5zkKs5mJlkUJZxs6r6HK9Vyp38yhEzdL7VBitnj4dy45yP8ICV8odSHaHj11V8xMhiFXBI0n/w400/junction-box.jpg" title="To keep the wiring under control, I built a junction box between the power supplies and the tube module. It also includes a pushbutton to control the input." width="400" /></a><div class="cite">To keep the wiring under control, I built a junction box between the power supplies and the tube module. It also includes a pushbutton to control the input.</div></p> <h2>The trigger circuit</h2> <p>The schematic<span id="fnref:cb"><a class="ref" href="#fn:cb" rel="footnote">7</a></span><span id="fnref:schematic"><a class="ref" href="#fn:schematic" rel="footnote">8</a></span> below shows one of the debounce circuits, which IBM called a "contact-operated trigger". (A trigger is the old term for a flip-flop, or a similar circuit that can be in two states.) The input goes through the resistor-capacitor low-pass filter on the left, smoothing out the input so the circuit won't respond to bounces. This goes to the grid (2) of a triode inverter amplifier as discussed earlier. The output from the first inverter (plate, 1) is connected to a second inverter (grid, 7) via the 91K resistor. The output from the second inverter (plate, 6) is shifted to the desired +30/-10 voltage range by a voltage divider (the 390K and 430K resistors). Shifting the voltage down is the reason a -130V supply is needed. <span id="fnref:neon"><a class="ref" href="#fn:neon" rel="footnote">6</a></span> (The two inverters form a Schmitt trigger<span id="fnref:schmitt"><a class="ref" href="#fn:schmitt" rel="footnote">9</a></span> due to the connected cathodes and 3K resistor.) The output from this circuit is connected to a cathode follower (described earlier but not shown in the schematic below), which buffers the signal for use by other modules.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTizoDHOOqiCWphYIqM7F3Ye3-9ncDlcG7bcZ_Sk4-0kAQRflmtlwEss0DxpYsocnvtK8w8QhKCOw3ATaoyZSxTB7YMs7WL27yqAt0yuLOE-r3YY5ek1lT4i4dTEOevT4ZusvuDIc7-dFf/w9999/trigger-schematic.png"><img alt="Schematic of one &quot;trigger&quot; circuit of the tube module." class="hilite" height="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTizoDHOOqiCWphYIqM7F3Ye3-9ncDlcG7bcZ_Sk4-0kAQRflmtlwEss0DxpYsocnvtK8w8QhKCOw3ATaoyZSxTB7YMs7WL27yqAt0yuLOE-r3YY5ek1lT4i4dTEOevT4ZusvuDIc7-dFf/w550/trigger-schematic.png" title="Schematic of one &quot;trigger&quot; circuit of the tube module." width="550" /></a><div class="cite">Schematic of one "trigger" circuit of the tube module.</div></p> <p>The diagram below illustrates how the debouncer functions. The red line shows the input, say from a button press. Notice that the switch opens and closes twice before closing for good. If the computer used this input as a control, it might perform the operation three times. The blue line shows the debounced signal, which turns on once cleanly. To perform the debouncing, the debouncer uses a resistor-capacitor filter to smooth out (i.e. integrate) the input signal into a slowly-changing signal; this is the green line. When the green signal gets high enough; the output turns on. Note that the output stays on even though the green signal drops in the last bounce. This is due to the Schmitt trigger; it turns off at a much lower level than where it turns on.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj31x39VL3ibApwvwa30ljKEvh_z1bAKBZRu8pZYnzQDuMZq7k6qEymnROChYDm520FUwKwoqPD4sPrc-iX8evRsBNcjKk3QhvZ2wmY8vNY1Vg6SKqR65tjCUZ5Rgb-hbs4aWcYOqoaNtQc/w9999/ltspice-sim.png"><img alt="Signals in the debouncer: red is the input (with bounce). Blue is the debounced output. Green is the internal signal after R-C filtering. This image is from an LTspice simulation of the module." class="hilite" height="199" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj31x39VL3ibApwvwa30ljKEvh_z1bAKBZRu8pZYnzQDuMZq7k6qEymnROChYDm520FUwKwoqPD4sPrc-iX8evRsBNcjKk3QhvZ2wmY8vNY1Vg6SKqR65tjCUZ5Rgb-hbs4aWcYOqoaNtQc/w300/ltspice-sim.png" title="Signals in the debouncer: red is the input (with bounce). Blue is the debounced output. Green is the internal signal after R-C filtering. This image is from an LTspice simulation of the module." width="300" /></a><div class="cite">Signals in the debouncer: red is the input (with bounce). Blue is the debounced output. Green is the internal signal after R-C filtering. This image is from an LTspice simulation of the module.</div></p> <h2>Using the tube module</h2> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK512LHEQf4NrCbz03kU1vfID71xH3yapxwDvQujerjEQy_fYjgxu0-ppNbwXcLAbo_Xut6P4b6g2c8dj97aWl7kmhRqpltZxpm1qGXE6S-qitHJmLOAfqhj6TRtvDzzxiw_2JGfej7ir6/w9999/module-labeled.jpg"><img alt="The tube module showing how the five debounce triggers are divided among the tubes." class="hilite" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK512LHEQf4NrCbz03kU1vfID71xH3yapxwDvQujerjEQy_fYjgxu0-ppNbwXcLAbo_Xut6P4b6g2c8dj97aWl7kmhRqpltZxpm1qGXE6S-qitHJmLOAfqhj6TRtvDzzxiw_2JGfej7ir6/w500/module-labeled.jpg" title="The tube module showing how the five debounce triggers are divided among the tubes." width="500" /></a><div class="cite">The tube module showing how the five debounce triggers are divided among the tubes.</div></p> <p>The tube module contains five debounce circuits, each made up of a trigger and a cathode follower. The diagram above shows how these circuits map onto the eight tubes. Each cathode follower (CF) uses one triode (half a tube) so there are two cathode followers per tube.<span id="fnref:tubetypes"><a class="ref" href="#fn:tubetypes" rel="footnote">11</a></span> Since there's one triode left over, the last debouncer (5) has a double cathode follower for a higher current output. The photo below shows that someone marked the top of the module with red and greed dots indicating the two tube types and functions, probably to simplify maintenance.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGlYySgfSlEBjnZ2_O5gE4L3SCT6lZ0Le9hrdIgAZTSRRGdZjNxscxVlawmrjSpf1z8OTCy8-o1wWows3P5Odn0lE9QqyDahhhw4meS_aVwJdu42UHKys0uRV3L7l0yzssp03vdBgEPx7V/w9999/module-top.jpg"><img alt="Top of an IBM tube module type 330567. The red dots indicate 6211 tubes and the green dots indicate 5965 tubes." class="hilite" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGlYySgfSlEBjnZ2_O5gE4L3SCT6lZ0Le9hrdIgAZTSRRGdZjNxscxVlawmrjSpf1z8OTCy8-o1wWows3P5Odn0lE9QqyDahhhw4meS_aVwJdu42UHKys0uRV3L7l0yzssp03vdBgEPx7V/w500/module-top.jpg" title="Top of an IBM tube module type 330567. The red dots indicate 6211 tubes and the green dots indicate 5965 tubes." width="500" /></a><div class="cite">Top of an IBM tube module type 330567. The red dots indicate 6211 tubes and the green dots indicate 5965 tubes.</div></p> <p>We tested one of the five debounce circuits in the module. Although the tube module contains five debouncers, some resistors were knocked off the module over the years, so debounce circuit 4 was the only one we could use without repairs. Below, you can see the power and signal wires hooked up to the tube module, along with an oscilloscope probe to view the output. At the left, we have wired a neon bulb to the debouncer's status output. In the computer, these status outputs were connected to neon bulbs on the console or on maintenance panels.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5xwr4VTLWe-ppvi-NOIsboHURNWowVS3MlR6x79Px5xFS5A9m-WAgwptSrgflUX5F2guBIyqKo_vo2Kls6YCFVdpDC8HdWes5yo4DydUKTO9b-dkOdlLqxXzSLcYomuy_6w0BkSPwQgMU/w9999/powered.jpg"><img alt="The tube module in operation. The filaments illuminate the tubes. At the left, a neon bulb is connected to the module&#39;s neon output." class="hilite" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5xwr4VTLWe-ppvi-NOIsboHURNWowVS3MlR6x79Px5xFS5A9m-WAgwptSrgflUX5F2guBIyqKo_vo2Kls6YCFVdpDC8HdWes5yo4DydUKTO9b-dkOdlLqxXzSLcYomuy_6w0BkSPwQgMU/w400/powered.jpg" title="The tube module in operation. The filaments illuminate the tubes. At the left, a neon bulb is connected to the module&#39;s neon output." width="400" /></a><div class="cite">The tube module in operation. The filaments illuminate the tubes. At the left, a neon bulb is connected to the module's neon output.</div></p> <p>The oscilloscope trace below shows the debounce circuit in operation. The input (yellow) is a pulse with contact bounce. You can see a bunch of large spikes due to bounce, as well as couple bounces of longer duration. There is also some bouncing at the end of the pulse. In contrast, the output (green) is a clean signal with a sharp transition. The bounce and noise in input signal could cause erroneous operation if used in a computer, for instance causing multiple operations. On the other hand, the output signal provides a single clean pulse to the computer, ensuring proper operation. Note that the output signal turns on and off about 1.3 ms after the input signal; this delay is due to slow charging and discharging of the R-C filter.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCbBS2GrXKM5IDubFw1EhyphenhyphenEF8M5cNskxsTPRsCbLBf-587BYYwKCDkVsd9gMB9RBowIs9V1IpkqEZX-gFL4Wa6qdMNwg1hQfl0qkHXjyzu8EZhh0NxZTAdSNFgu0koe4JGNe05jT3kiFI5/w9999/oscilloscope2.jpg"><img alt="The lower trace shows the input with contact bounce as it turns on. In the output from the tube module, contact bounce has been eliminated." class="hilite" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCbBS2GrXKM5IDubFw1EhyphenhyphenEF8M5cNskxsTPRsCbLBf-587BYYwKCDkVsd9gMB9RBowIs9V1IpkqEZX-gFL4Wa6qdMNwg1hQfl0qkHXjyzu8EZhh0NxZTAdSNFgu0koe4JGNe05jT3kiFI5/w400/oscilloscope2.jpg" title="The lower trace shows the input with contact bounce as it turns on. In the output from the tube module, contact bounce has been eliminated." width="400" /></a><div class="cite">The lower trace shows the input with contact bounce as it turns on. In the output from the tube module, contact bounce has been eliminated.</div></p> <p>Once we had the tube module operational, we hooked it up to a vintage HP pulse counter. Without the debouncer, pressing a button would result in multiple counts; each bounce incremented the count. But with the tube debouncer in the circuit, each button press resulted in a single count, showing the module was functioning. Marc's video below shows the pulse counter in operation. Because the pulse counter could only handle 5 volt inputs, we used a resistor divider to reduce the voltage from the tube module. The resistor divider was implemented with large <a href="https://en.wikipedia.org/wiki/Decade_box">resistor decade boxes</a>; they are on top of the stack of power supplies in the earlier photo.</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/zOlI1_i2HwQ" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen></iframe> <h2>Conclusion</h2> <p>Despite its age, the tube module still worked. (At least the one of the five debouncers we tested.) I was a little concerned about putting high voltages through such old electronics, but there were no sparks or smoke. Fortunately Marc had enough power supplies to power the module, and even though we fell a few volts short on the -130V and +140V the module still functioned. The module was bulky and consumed a lot of power&mdash;I could feel the warmth from it&mdash;so it's easy to understand why transistors rapidly made vacuum tube computers obsolete. Even so, its amazing to think that the principles of modern computers were developed using vacuum tubes so long ago.</p> <p>Thanks to <a href="https://rescue1130.blogspot.com/">Carl Claunch</a> for providing the module. Thanks to <a href="http://www.piercefuller.com/library/700circ.html">Paul Pierce</a>, <a href="http://bitsavers.org/pdf/ibm/705/">bitsavers</a> and the <a href="http://www.computerhistory.org/">Computer History Museum</a> for making IBM 700 documentation available.</p> <p>Follow me on <a href="https://twitter.com/kenshirriff">Twitter</a> or <a href="http://www.righto.com/feeds/posts/default">RSS</a> to find out about my latest blog posts.</p> <h2>Notes and references</h2> <div class="footnote"> <ol> <li id="fn:byte"> <p>Although each module contained eight tubes, this does not correspond to a byte. The eight tubes generally don't map onto eight of anything since circuits can use more or less than one tube. Also, the byte wasn't a thing back then; IBM's vacuum tube computers used 36-bit words (scientific models), or 6-bit characters (business models).&#160;<a class="footnote-backref" href="#fnref:byte" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> <li id="fn:applications"> <p>For a detailed list of companies using the IBM 705 and their applications, see the <a href="http://www.ed-thelen.org/comp-hist/BRL61-ibm0705.html">1961 BRL report</a>. This report has extensive information on early computers and how they were used.&#160;<a class="footnote-backref" href="#fnref:applications" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p> </li> <li id="fn:console"> <p>By studying the IBM 705 schematics, I found that the debouncing circuit was used with many keys on the IBM 705 console, such as reset, clear memory, initial reset, machine stop, display, test start and test stop. The debouncer was also used for relay-controlled console signals such as machine stop, manual stop, manual store, memory test, half/multiple step and display step. I didn't see this specific tube module in the schematics, so the module could have been part of an IBM 705 peripheral or the earlier IBM 702 computer.&#160;<a class="footnote-backref" href="#fnref:console" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p> </li> <li id="fn:oscillator"> <p>The cathode follower might seem like it should oscillate: when the cathode is low, current will flow, pulling the cathode high, which will block current flow, making the cathode low again. Yes, it could oscillate if the wires are too long, for instance. But it's designed so it will reach a stable intermediate point where everything balances out.&#160;<a class="footnote-backref" href="#fnref:oscillator" rev="footnote" title="Jump back to footnote 4 in the text">&#8617;</a></p> </li> <li id="fn:powersupplies"> <p>To supply the module with power, we used two vintage HP3068A power supplies (60V each) for the -60V and -120V. An HP6645A DC power supply provided 120V. A modern <a href="http://amzn.to/2D2l9SJ">Protek 3003B power supply</a> provided 30V for the input. We counted pulses using an HP 5334B universal counter.&#160;<a class="footnote-backref" href="#fnref:powersupplies" rev="footnote" title="Jump back to footnote 5 in the text">&#8617;</a></p> </li> <li id="fn:neon"> <p>There's a second output from the inverter's plate. This high-voltage output is used to drive a neon indicator bulb, showing the status of the circuit. The 1M&ohm; resistor limits current through the neon bulb.&#160;<a class="footnote-backref" href="#fnref:neon" rev="footnote" title="Jump back to footnote 6 in the text">&#8617;</a></p> </li> <li id="fn:cb"> <p>The schematic says the input is "from key, relay or CB." A "CB" is a circuit breaker, but not in the modern current-protection sense. In old IBM machines, a circuit breaker was a microswitch triggered by a rotating cam, providing a timing signal. That is, it breaks the circuit as it opens and closes. Circuit breakers were common in electromechanical systems such as tabulating machines and card readers.&#160;<a class="footnote-backref" href="#fnref:cb" rev="footnote" title="Jump back to footnote 7 in the text">&#8617;</a></p> </li> <li id="fn:schematic"> <p>The schematic is from <a href="http://www.piercefuller.com/scan/700circ.pdf">700 Series Component Circuits</a>, an IBM document that describes the wide variety of circuits used in IBM tube modules. If you want to understand tube modules in detail, this is the document to read. The contact-operated trigger is described on page C-35 and the schematic is on page C-36. The cathode follower is discussed on page A-43.&#160;<a class="footnote-backref" href="#fnref:schematic" rev="footnote" title="Jump back to footnote 8 in the text">&#8617;</a></p> </li> <li id="fn:schmitt"> <p>The tube module uses <a href="https://robotics.eecs.berkeley.edu/~pister/publications/FamousPapers/Schmitt1937.pdf">Schmitt triggers</a>, which were invented in 1937. A Schmitt trigger provides <em>hysteresis</em>; when it turns on, it stays on until the input drops significantly. The Schmitt trigger is implemented by connecting the cathodes together, along with a series resistor. When one triode turns on, the cathode voltage will rise due to the resistor, similar to the cathode follower circuit. But since both triodes have the same cathode voltage, the rising cathode voltage will tend to shut the other triode off. Since it's harder for the other triode to turn on, the Schmitt trigger will stay in its current state until there is a large voltage swing on the input.&#160;<a class="footnote-backref" href="#fnref:schmitt" rev="footnote" title="Jump back to footnote 9 in the text">&#8617;</a></p> </li> <li id="fn:voltages"> <p>Vacuum tube systems used many different inconveniently-large voltages. The table below (from <a href="http://www.piercefuller.com/scan/700circ.pdf">700 Series Component Circuits</a>) lists the voltages used by the IBM 704 (scientific) and IBM 705 (business) computers. I was surprised that the scientific computers and business computers used totally different voltages, but historically they were entirely different systems. IBM's 701 scientific computer started as the "Defense Calculator" project, while the 702 business computer came from IBM's TPM II (Tape Processing Machine) project. Thus, the two branches of the 700 series ended up with completely different architectures. (Among other differences, the 701 used binary while the 702 used binary-coded decimal characters.) They also ended up with different hardware components.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS2LGE16JbUET9Y2Z_cBGuEkwLFFGvZ3M4oaOPezanWrxb3KvD38b2zExghxZBbHcIoayF8VX3WvB5lmEkdC4SCmeS1W-riJWn0lr8e1w_Yrpq4mHdJz8pywt08RG9zMxnBEoV6ctVZ7Pq/w9999/tube-voltages.png"><img alt="IBM&#39;s vacuum tube computers use a large variety of voltages. Based on 700 Series Component Circuits, page E27." class="hilite" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS2LGE16JbUET9Y2Z_cBGuEkwLFFGvZ3M4oaOPezanWrxb3KvD38b2zExghxZBbHcIoayF8VX3WvB5lmEkdC4SCmeS1W-riJWn0lr8e1w_Yrpq4mHdJz8pywt08RG9zMxnBEoV6ctVZ7Pq/w300/tube-voltages.png" title="IBM&#39;s vacuum tube computers use a large variety of voltages. Based on 700 Series Component Circuits, page E27." width="300" /></a><div class="cite">IBM's vacuum tube computers use a large variety of voltages. Based on <a href="http://www.piercefuller.com/scan/700circ.pdf">700 Series Component Circuits</a>, page E27.</div></p> <p>The <a href="http://bitsavers.org/pdf/ibm/704/223-6818_704_CE_Manual/736_741_746_PwrSupply_CE_Oct58.pdf">power supply manual</a> explains some of the voltages and their uses. A +500V supply was used by the IBM 701 to power its electrostatic memory system, which stored bits on the surface of <a href="https://en.wikipedia.org/wiki/Williams_tube">Williams tubes</a>. Later machines used core memory instead, with the voltages listed above. The +15V and -30V were used as diode clamps to keep output voltages in the proper range. The +220V supply was typically used by AND gates, while OR gates used -250V. Tubes typically used the +150V supply for plates and -100V for cathodes. In the business computers (702/705), most logic used +270, +140V, -12V, -60V, -130V and -270V.&#160;<a class="footnote-backref" href="#fnref:voltages" rev="footnote" title="Jump back to footnote 10 in the text">&#8617;</a></p> </li> <li id="fn:tubetypes"> <p>The triggers are implemented with type 6211 tubes, while the cathode followers are implemented with the more powerful 5965 tubes. From the photo, it may appear that the tubes don't match the locations since there are four tubes with metallized tops and four tubes with metallized sides. However, the tube markings indicate that all tubes were in the right locations. The location of the shiny <a href="https://en.wikipedia.org/wiki/Getter">getter</a> is independent of the tube type.&#160;<a class="footnote-backref" href="#fnref:tubetypes" rev="footnote" title="Jump back to footnote 11 in the text">&#8617;</a></p> </li> </ol> </div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'><span class='post-comment-link'> <a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/6264947694886887540/2765567241382409490' onclick=''> 5 comments: </a> </span> <span class='post-icons'> <span class='item-action'> <a href='https://www.blogger.com/email-post.g?blogID=6264947694886887540&postID=2765567241382409490' title='Email Post'> <img alt='' class='icon-action' height='13' src='http://img1.blogblog.com/img/icon18_email.gif' width='18'/> </a> </span> <span class='item-control blog-admin pid-1138732533'> <a href='https://www.blogger.com/post-edit.g?blogID=6264947694886887540&postID=2765567241382409490&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <span class='post-backlinks post-comment-link'> </span> <div class='post-share-buttons goog-inline-block'> <a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=2765567241382409490&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=2765567241382409490&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=2765567241382409490&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=2765567241382409490&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=2765567241382409490&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a> </div> </div> <div class='post-footer-line post-footer-line-2'><span class='post-labels'> Labels: <a href='http://www.righto.com/search/label/electronics' rel='tag'>electronics</a>, <a href='http://www.righto.com/search/label/reverse-engineering' rel='tag'>reverse-engineering</a> </span> </div> <div class='post-footer-line post-footer-line-3'></div> </div> </div> </div> </div></div> <div class="date-outer"> <div class="date-posts"> <div class='post-outer'> <div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOp5b76CpWTRn2CIdgbch7po9zeBn5AjVihaCyQZrIR2LPTKzuZXy9eH5mcTEMMinquPpH3e0Ip1kM08MetgNmZk6bhD_e1T7d9eP4OFPS_wjur5EvG1jvomKewk_yW-tctDZWnIzuRNjr/w400/inside-transceiver.jpg' itemprop='image_url'/> <meta content='6264947694886887540' itemprop='blogId'/> <meta content='1182972412801248728' itemprop='postId'/> <a name='1182972412801248728'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='http://www.righto.com/2018/01/xerox-altos-3-mbs-ethernet-building.html'>Xerox Alto's 3 Mb/s Ethernet: Building a gateway with a BeagleBone</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-1182972412801248728' itemprop='description articleBody'> <style> code {background-color:#eee;font-size: 80%;} .gist table.lines { font-size: 12px; line-height: 10px; } .gist-meta { font-size: 80% !important; } .gist .blob-num { line-height: 10px !important;} .gist .blob-code { line-height: 10px !important;} </style> <p>The Alto was a revolutionary computer designed at Xerox PARC in 1973. It introduced the GUI, high-resolution bitmapped displays, the optical mouse and laser printers to the world. But one of its most important contributions was Ethernet, the local area network that is still heavily used today. While modern Ethernets handle up to 100 gigabits per second, the Alto's Ethernet was much slower, just 3 megabits per second over coaxial cable. Even so, the Alto used the Ethernet for file servers, email, distributed games, network boot, and even voice over Ethernet.</p> <p>The Alto's 3 Mb/s Ethernet isn't compatible with modern Ethernet, making it difficult to transfer data between an Alto and the outside world. To solve this, I built a gateway using the BeagleBone single-board computer to communicate with the Alto's Ethernet. In this article I discuss how the Alto's Ethernet works and how I implemented the gateway.</p> <h2>The Alto's Ethernet hardware</h2> <p>The Alto's Ethernet used a coaxial cable, rather than modern twisted-pair cable. A transceiver box was the interface between the Alto and the cable, converting the Alto's logic signals to the signals on the cable. In the photo below, you can see a transceiver clamped onto the coaxial cable; a "vampire tap" punctures the cable making contact with the central conductor.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOp5b76CpWTRn2CIdgbch7po9zeBn5AjVihaCyQZrIR2LPTKzuZXy9eH5mcTEMMinquPpH3e0Ip1kM08MetgNmZk6bhD_e1T7d9eP4OFPS_wjur5EvG1jvomKewk_yW-tctDZWnIzuRNjr/w9999/inside-transceiver.jpg"><img alt="Inside a transceiver box. The &quot;vampire tap&quot; on the right connects the transceiver to the Ethernet cable. The connector on the left goes to the Alto." class="hilite" height="299" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOp5b76CpWTRn2CIdgbch7po9zeBn5AjVihaCyQZrIR2LPTKzuZXy9eH5mcTEMMinquPpH3e0Ip1kM08MetgNmZk6bhD_e1T7d9eP4OFPS_wjur5EvG1jvomKewk_yW-tctDZWnIzuRNjr/w400/inside-transceiver.jpg" title="Inside a transceiver box. The &quot;vampire tap&quot; on the right connects the transceiver to the Ethernet cable. The connector on the left goes to the Alto." width="400" /></a><div class="cite">Inside a transceiver box. The "vampire tap" on the right connects the transceiver to the Ethernet cable. The connector on the left goes to the Alto.</div></p> <p>The Alto's Ethernet uses Manchester encoding of the bits. That is, a "1" is sent as "10" and a "0" is sent as "01". The reason to do this instead of just sending the raw bits is the Manchester encoding is self-clocking&mdash;there's a transition for every bit. If instead you just sent a raw stream of bits, e.g. "00000000000", the receiver would have a hard time knowing where the bits start and end. The figure below shows how <code>0110</code> is transmitted with Manchester encoding.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX4sQTPOebOOZRdAKDLExsktro7tIA0Debxr1v3DOwggUBjLxvPMLwIqElwuMbgOvhAdaAPWPqvCRtyK4NGPEiQqgtt7b9hfO-RtQjeGH_jmNmo_BUNS1m_UletfrSWCZYZMbBzwfOD4mN/w9999/waveform1.png"><img alt="An example of Manchester encoding, for the bits 0110." class="hilite" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhX4sQTPOebOOZRdAKDLExsktro7tIA0Debxr1v3DOwggUBjLxvPMLwIqElwuMbgOvhAdaAPWPqvCRtyK4NGPEiQqgtt7b9hfO-RtQjeGH_jmNmo_BUNS1m_UletfrSWCZYZMbBzwfOD4mN/w250/waveform1.png" title="An example of Manchester encoding, for the bits 0110." width="250" /></a><div class="cite">An example of Manchester encoding, for the bits 0110.</div></p> <h2>The Alto's network protocols</h2> <p>The Alto predates TCP/IP, instead using a protocol called Pup (the PARC Universal Packet).<span id="fnref:pup"><a class="ref" href="#fn:pup" rel="footnote">1</a></span> The protocol has many similarities with TCP/IP, since the Pup designers influenced the TCP design based on their experience. The basic Pup Internet Datagram is analogous to an IP packet. A packet contains a destination address for the packet consisting of a network id (1 byte), a host id on the network (1 byte), and a 4-byte socket. A machine's host id is specified by jumper wires on the backplane (below). Thus, packets can be routed through a large network to the right machine.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOxgT41YfDtmkPvgi7J5DAuVtEm2umvs0GiSewUZYAYUdEsGu4YzYcgTThfT_ik9ThMpAuIcORdvHYf_wsZBtCCQD4V2fVTnCDpmtHIO1BjnmN4K7iKlnzvpJBrf0Nw8Bu5Lsa6cK7Ctf1/w9999/backplane-jumpers.jpg"><img alt="Long blue jumper wires on the Alto&#39;s backplane specify the system&#39;s Ethernet address." class="hilite" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOxgT41YfDtmkPvgi7J5DAuVtEm2umvs0GiSewUZYAYUdEsGu4YzYcgTThfT_ik9ThMpAuIcORdvHYf_wsZBtCCQD4V2fVTnCDpmtHIO1BjnmN4K7iKlnzvpJBrf0Nw8Bu5Lsa6cK7Ctf1/w250/backplane-jumpers.jpg" title="Long blue jumper wires on the Alto&#39;s backplane specify the system&#39;s Ethernet address." width="250" /></a><div class="cite">Long blue jumper wires on the Alto's backplane specify the system's Ethernet address.</div></p> <p>Some simple network operations just exchanged Pup packets, for example requesting the time from a network server. But for more complex operations, Xerox built layers on top of Pup. For a long-lived connection between two machines, Xerox built RTP (Rendezvous/Termination Protocol), a protocol to establish connections between two ports. This is analogous to a TCP socket connection. Once the connection is established, the computers can communicate using Byte Steam Protocol (BSP). This protocol handles error correction and flow control, very similar to TCP.</p> <p>On top of these protocols, Xerox implemented email, FTP (File Transfer Protocol), network boot, networked games such as <a href="https://en.wikipedia.org/wiki/Maze_War">Maze War</a>, network error reporting, network disk backups and the first <a href="https://people.eecs.berkeley.edu/~prabal/resources/osprelim/SH82.pdf">computer worm</a>.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOXyCHkYQwDeilqYN_nhnJH8ZymxqRaU0OmeBc0_WE2babYaxiNLstH_HOPm9vvY9uawBh0LNrNtnFnf4F0q5i36wMlG2V9aNMOYPlmIx3cDCpUUzs7Rc9HtV8L7TvZiZXid3LLiYsN0xw/w9999/network-map.png"><img alt="Map of the Xerox PARC network, showing important servers. May 1978. From Alto User&#39;s Primer." class="hilite" height="504" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOXyCHkYQwDeilqYN_nhnJH8ZymxqRaU0OmeBc0_WE2babYaxiNLstH_HOPm9vvY9uawBh0LNrNtnFnf4F0q5i36wMlG2V9aNMOYPlmIx3cDCpUUzs7Rc9HtV8L7TvZiZXid3LLiYsN0xw/w500/network-map.png" title="Map of the Xerox PARC network, showing important servers. May 1978. From Alto User&#39;s Primer." width="500" /></a><div class="cite">Map of the Xerox PARC network, showing important servers. May 1978. From <a href="http://xeroxalto.computerhistory.org/_cd8_/altodocs/.altousersprimer.press!2.pdf">Alto User's Primer</a>.</div></p> <h2>Designing an Ethernet gateway</h2> <p>I decided to build a gateway that would allow the Alto to communicate with a modern system. The gateway would communicate with the Alto using its obsolete 3Mb/s Ethernet, but could also communicate with the outside world. This would let us network boot the Alto, transfer files to and from the Alto and backup disks. I expected this project to take a few weeks, but it ended up taking a year.</p> <p>The first decision was what hardware platform to use. My plan was to use a microcontroller to generate the 3Mb/s signals by "bit banging", i.e. directly generating the 1's and 0's on the wire. (A regular processor couldn't handle this in real time, due to interrupts and task switching.) But a microcontroller wouldn't be suitable for running the network stack and communicating with the outside world; I'd need a "real computer" for that. Someone suggested the BeagleBone: a credit-card sized Linux computer with an ARM processor that also incorporated two microcontrollers. This would provide a compact, low-cost implementation, so I started investigating the BeagleBone.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4WXXb41L8tjhoNT5Hci6ATZYsJXDfljUpNHvc5_-9c5kxEFraSC6BqcGlTDcG5eU7fNPp1xpJwznLxhLuBpB3bE-VSK6Kgne2bCBfEOJeDlErzN4ZUZM4xs1Jg8-qLyg35lUCDlZpUNS8/w9999/altoids2.jpg"><img alt="The BeagleBone single-board Linux computer is small enough to fit in an Altoids tin. It has many general/purpose I/O pins, accessible through the connectors along the top and bottom of the board." class="hilite" height="300" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4WXXb41L8tjhoNT5Hci6ATZYsJXDfljUpNHvc5_-9c5kxEFraSC6BqcGlTDcG5eU7fNPp1xpJwznLxhLuBpB3bE-VSK6Kgne2bCBfEOJeDlErzN4ZUZM4xs1Jg8-qLyg35lUCDlZpUNS8/w300/altoids2.jpg" title="The BeagleBone single-board Linux computer is small enough to fit in an Altoids tin. It has many general/purpose I/O pins, accessible through the connectors along the top and bottom of the board." width="300" /></a><div class="cite">The BeagleBone single-board Linux computer is small enough to fit in an Altoids tin. It has many general/purpose I/O pins, accessible through the connectors along the top and bottom of the board.</div></p> <p>The BeagleBone's microcontrollers, called PRUs,<span id="fnref:pru"><a class="ref" href="#fn:pru" rel="footnote">2</a></span> are designed to run each instruction in a single 5ns cycle. Since the Ethernet pulses are 170ns wide, I figured I had plenty of time to send and receive signals. (It turned out that getting everything done in 170ns was challenging, but it worked out in the end.) In my gateway, the PRU reads the Ethernet signal coming from the Alto, and generate the Ethernet signal going to the Alto, as well as sending a network collision signal to the Alto.</p> <p>In case you're wondering what PRU code looks like, the C code fragment below shows how a byte is encoded and sent. The PRU code outputs the right sequence of HIGH/LOW or LOW/HIGH pulses (the Manchester encoding), making sure each part is 170ns wide. Each bit of register <code>R30</code> controls an output pin, so the bit for the Ethernet write pin is set and cleared as needed. <code>wait_for_pwm_timer()</code> provides the 170ns timing for each pulse. The full code is <a href="https://github.com/shirriff/alto-ethernet-interface/blob/master/src/main.c">here</a>.</p> <script src="https://gist.github.com/shirriff/05d8a44ab844f959db86b28d8d27fb28.js"></script> <p>To receive data from Ethernet, my PRU code doesn't do any decoding; it just measures the time between input transitions and sends these timings to the BeagleBone's ARM processor. Originally my code decoded the Manchester encoding into bits and assembled the bits into words, but 170ns wasn't enough time to do this reliably. Instead, since this decoding doesn't need to be done in real time, I moved the decoding to the more powerful ARM processor. The ARM processor also does the higher-level Ethernet protocol handling, such as generating and checking packet checksums.</p> <p>Rather than deal with transceivers and coaxial cable, I connected the BeagleBone to the Alto's Ethernet port directly, omitting the transceiver that normally connects to this port. This port provides standard 5V TTL signals to the transceiver, but the BeagleBone inconveniently uses 3.3V signals. I needed a circuit to translate the voltage levels between the BeagleBone and the Alto. This should have been easy, but I ran into various problems along the way.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv4qwJbuEiBHuf-2VVMiCIv02L3ae_ndQibsslN2Ct4O_ruHWGzyNDLvGU8DRZ-otXjPgzQs6N4bcaN905RPQI3IRXHzh0kX16U6-Cn7R-r1DuJpfmipbtj_v4goc1ULfXXKA3X-NwbWjG/w9999/ethernet-connector.jpg"><img alt="On the back of the Alto, Ethernet is accessed via a DB-25 connector that connects to a transceiver box." class="hilite" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjv4qwJbuEiBHuf-2VVMiCIv02L3ae_ndQibsslN2Ct4O_ruHWGzyNDLvGU8DRZ-otXjPgzQs6N4bcaN905RPQI3IRXHzh0kX16U6-Cn7R-r1DuJpfmipbtj_v4goc1ULfXXKA3X-NwbWjG/w300/ethernet-connector.jpg" title="On the back of the Alto, Ethernet is accessed via a DB-25 connector that connects to a transceiver box." width="300" /></a><div class="cite">On the back of the Alto, Ethernet is accessed via a DB-25 connector that connects to a transceiver box.</div></p> <p>I built a prototype voltage translation circuit on a breadboard, using a <a href="https://www.adafruit.com/product/1787">74AHCT125</a> level shifter chip (<a href="https://github.com/shirriff/alto-ethernet-interface/blob/master/board/schematic.pdf">schematic</a>). However, I was getting no Ethernet signal at all from the Alto, so I started probing the Alto's board for a malfunction. I discovered that although the Alto's schematic showed pull-up resistors, these resistors didn't exist on the Alto's Ethernet board (see photo below). Without a resistor, the open-collector signal stayed at ground. Adding the resistors to my circuit fixed that problem.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf0ILnTNce4n-29hG2eMod5IH_adVtrJmmvGEPtZY-sVEtXAljBS3uFxqX8dkDsfWlXkRoKiiTlaHTWJAy4Cl0tnE0dRfjdbQDGCanaxAzb2FNko5cuCMnsmEbf0vOUv_wznXdnzNG-oIn/w9999/missing-resistors.jpg"><img alt="One problem I encountered was termination resistors R8 and R9 appeared on the schematic but were missing from the board (above the word &quot;ETHERNET&quot;)." class="hilite" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhf0ILnTNce4n-29hG2eMod5IH_adVtrJmmvGEPtZY-sVEtXAljBS3uFxqX8dkDsfWlXkRoKiiTlaHTWJAy4Cl0tnE0dRfjdbQDGCanaxAzb2FNko5cuCMnsmEbf0vOUv_wznXdnzNG-oIn/w400/missing-resistors.jpg" title="One problem I encountered was termination resistors R8 and R9 appeared on the schematic but were missing from the board (above the word &quot;ETHERNET&quot;)." width="400" /></a><div class="cite">One problem I encountered was termination resistors R8 and R9 appeared on the schematic but were missing from the board (above the word "ETHERNET").</div></p> <p>The next step was to write the PRU microcontroller code to send and receive Ethernet packets. After a lot of testing with the Alto's <em>Ethernet Diagnostic Program</em> (EDP), I was able to echo packets back and forth between the BeagleBone gateway and the Alto.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUKO0rboCyUWZqP7RG09OFy7ke-2vqo-YDdxbAuAwo_to3fhHA6vQsgK7S9q5B752IlnY71KG2CuTSPFhPFIiybt_QJLmxiCg3TQsf81SEBZyEHfdONK-nY7I3R_gtNYSHijhBXpeaMZqb/w9999/edp.jpg"><img alt="The Ethernet Diagnostic Program can be used to test the Ethernet. It has a simple GUI." class="hilite" height="390" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUKO0rboCyUWZqP7RG09OFy7ke-2vqo-YDdxbAuAwo_to3fhHA6vQsgK7S9q5B752IlnY71KG2CuTSPFhPFIiybt_QJLmxiCg3TQsf81SEBZyEHfdONK-nY7I3R_gtNYSHijhBXpeaMZqb/w400/edp.jpg" title="The Ethernet Diagnostic Program can be used to test the Ethernet. It has a simple GUI." width="400" /></a><div class="cite">The Ethernet Diagnostic Program can be used to test the Ethernet. It has a simple GUI.</div></p> <p>To be useful, the gateway must support the network stack: Pup packets, network booting, Alto-style FTP and so forth. I started by rewriting the Alto's network code, making a direct port of the BCPL implementation<span id="fnref:bcpl"><a class="ref" href="#fn:bcpl" rel="footnote">3</a></span> to Python. This turned out to be a mess, because the original implementation depended heavily on the Alto's operating system, which provided multiple threads, so the application could run in one thread and the network code in other threads. I managed to get the stateless low-level Pup packets to work okay, but the higher-level Byte Stream Protocol was a tangle of busy-waiting loops and timeouts.</p> <p>Fortunately the <a href="http://www.livingcomputers.org/">Living Computers Museum+Lab</a> (LCM+L) came to rescue. Josh Dersch at the museum had written a C# implementation of the Alto's network stack, so I decided to discard my implementation of the network stack. This implementation, called IFS,<span id="fnref:ifs"><a class="ref" href="#fn:ifs" rel="footnote">4</a></span> supported the low-level protocols, as well as servers for network operations, FTP, and Copydisk. IFS was a new implementation rather than a direct port like my attempt, and that approach worked much better.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1ZggYDWcax1sAgcWntaM829lh3B3BRQLYZWx9wzj9wkuyHOzw-UJr5-Mn6CIou1PHYOW3eUj0EhDNJUiSSdJmgeqH9gCfoIpwdgwhpFwAmvmqOXqjOpurijuPgXlexMZ0VhymrifZrmfx/w9999/lcm-interface.jpg"><img alt="The Living Computers Museum built a 3 Mb/s Ethernet interface using an FPGA chip." class="hilite" height="290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1ZggYDWcax1sAgcWntaM829lh3B3BRQLYZWx9wzj9wkuyHOzw-UJr5-Mn6CIou1PHYOW3eUj0EhDNJUiSSdJmgeqH9gCfoIpwdgwhpFwAmvmqOXqjOpurijuPgXlexMZ0VhymrifZrmfx/w400/lcm-interface.jpg" title="The Living Computers Museum built a 3 Mb/s Ethernet interface using an FPGA chip." width="400" /></a><div class="cite">The Living Computers Museum built a 3 Mb/s Ethernet interface using an FPGA chip.</div></p> <p>The LCM+L also built an Ethernet interface to the Alto. Theirs was much more complex than mine, consisting of an FPGA chip on a custom PCI card plugged into a PC. Unlike my interface, theirs communicated with a transceiver box, rather than connecting to the Alto directly. Even though the LCM+L's FPGA interface worked for us, I decided to complete my interface board since I liked the idea of a low-cost, compact Ethernet gateway. Their interface is more "realistic", since it connects to a real transceiver and network cable and can work with multiple Altos on a network. (The photo below shows the mini-network connecting the LCM+L interface and an Alto.) On the other hand not everyone has Ethernet transceivers lying around, so mine is more widely usable.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYjelG_O3YQwENe_9a4YL9lZo7G5opPU0hO5HM8f0HsKGDNCVwPaOWGg4cg6NGH_UmTuBNbLuEM7y32XNBH8MAaENBO3v6Knvrx77PhHziO68V-09tZQyLRW-RJe5Wuyb29vnoEa_ts01e/w9999/network.jpg"><img alt="A very short 3 Mb/s Ethernet network, showing two transceivers attached to the coaxial cable. One transceiver is connected to the Alto and the other is connected to the LCM+L gateway card." class="hilite" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYjelG_O3YQwENe_9a4YL9lZo7G5opPU0hO5HM8f0HsKGDNCVwPaOWGg4cg6NGH_UmTuBNbLuEM7y32XNBH8MAaENBO3v6Knvrx77PhHziO68V-09tZQyLRW-RJe5Wuyb29vnoEa_ts01e/w400/network.jpg" title="A very short 3 Mb/s Ethernet network, showing two transceivers attached to the coaxial cable. One transceiver is connected to the Alto and the other is connected to the LCM+L gateway card." width="400" /></a><div class="cite">A very short 3 Mb/s Ethernet network, showing two transceivers attached to the coaxial cable. One transceiver is connected to the Alto and the other is connected to the LCM+L gateway card.</div></p> <p>I made a simple printed circuit board to replace my breadboarded prototype. This was the first circuit board I had designed in about 35 years and technology has certainly changed. Back in the 1980s, I drew circuit board traces with a resist pen on a copper-clad board, and then etched the board in ferric chloride solution from Radio Shack. Now, I designed my board using Eagle, uploaded the file to OSH Park, and received a beautiful circuit board a few days later.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7x85kdU5HNNO-pBdGOHSbcwx8XOIK7RyumbCodX5b6ZdDUNIhX-5PpDMAGbXCdNQH0nl0De5lSzUKn9HHTuGQGCroKasHhzaVH7gZQGRj36OtkVqksHEGkfGjPIP8DUSjR8ZujeZ5f3I2/w9999/beaglebone-alto-interface.jpg"><img alt="My 3 Mb/s Ethernet interface is a level-shifter card on a BeagleBone. Note the capacitor soldered directly to the driver IC to fix a ringing signal problem." class="hilite" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7x85kdU5HNNO-pBdGOHSbcwx8XOIK7RyumbCodX5b6ZdDUNIhX-5PpDMAGbXCdNQH0nl0De5lSzUKn9HHTuGQGCroKasHhzaVH7gZQGRj36OtkVqksHEGkfGjPIP8DUSjR8ZujeZ5f3I2/w400/beaglebone-alto-interface.jpg" title="My 3 Mb/s Ethernet interface is a level-shifter card on a BeagleBone. Note the capacitor soldered directly to the driver IC to fix a ringing signal problem." width="400" /></a><div class="cite">My 3 Mb/s Ethernet interface is a level-shifter card on a BeagleBone. Note the capacitor soldered directly to the driver IC to fix a ringing signal problem.</div></p> <p>Running the LCM+L's IFS software on the BeagleBone took some work since the BeagleBone runs Linux and IFS was written in C# for Windows. By using the <a href="http://www.mono-project.com/">Mono</a> platform, I could run most of the C# code on the BeagleBone. However, the LCM+L software stack communicated with the gateway by encapsulating Alto Ethernet packets in a modern Ethernet packet, using a .Net Pcap library to access the raw Ethernet. Unfortunately, this library didn't work with Mono, so I rewrote the IFS encapsulation to use UDP.</p> <p>At this point the Alto and my BeagleBone implementation communicated most of the time, but there were a few tricky bugs to track down. The first problem was FTP would get sometimes bad packets. Eventually I discovered that I had mixed up byte and word counts in one place, and the large packets from FTP were overflowing the PRU's buffer.</p> <p>The next problem was that when I used <em>Copydisk</em> to copy a disk pack from the Alto to the BeagleBone, a dropped packet caused the network to lock up after a couple minutes. This was puzzling since the sender should retransmit the lost packet after a timeout and everything should recover (like TCP). After tedious debugging, I found that if the Alto and the BeagleBone transmitted packets close together, a race condition in my code caused a dropped packet.<span id="fnref:breath"><a class="ref" href="#fn:breath" rel="footnote">5</a></span><span id="fnref:race"><a class="ref" href="#fn:race" rel="footnote">6</a></span> Then IFS neglected to send a necessary ack when it received an unexpected packet, so the Alto kept resending the wrong packet. After fixing both my gateway code and the IFS ack, the network ran without problems.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx5wSADF3M4fEIn_p9O5I1GJlz3wmeRTGrYbD2ggsJzgiyZNTHroVEBh4ZvJkPJg9RX8h1EIU0PjPLX8lJg2xaeX_XV4byhdX4k1G4iUDNrR9RYLh5iya72Hju01_A47VSaIN7rA0SlecV/w9999/gateway-v2.jpg"><img alt="Second version of the interface. Note the blue jumper wire to replace the missing trace." class="hilite" height="237" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx5wSADF3M4fEIn_p9O5I1GJlz3wmeRTGrYbD2ggsJzgiyZNTHroVEBh4ZvJkPJg9RX8h1EIU0PjPLX8lJg2xaeX_XV4byhdX4k1G4iUDNrR9RYLh5iya72Hju01_A47VSaIN7rA0SlecV/w400/gateway-v2.jpg" title="Second version of the interface. Note the blue jumper wire to replace the missing trace." width="400" /></a><div class="cite">Second version of the interface. Note the blue jumper wire to replace the missing trace.</div></p> <p>My first version of the PCB had a few issues<span id="fnref:problems"><a class="ref" href="#fn:problems" rel="footnote">8</a></span> so I made a second version (above). I found that the driver chip didn't sink enough current for a long cable, so I replaced it with the chip used by the transceivers (a 7438 open collector NAND gate). I also decided to try KiCad instead of Eagle for the second board. Unfortunately, I made a mistake in KiCad<span id="fnref:kicad"><a class="ref" href="#fn:kicad" rel="footnote">7</a></span> and the new board was missing a trace, so I had to solder in a jumper (which you can seen in the photo above).</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI3m8xzBR4R4V6mvQ_Vaock42mviMH0Fd-VJpd0cH218gXHYhwrdBMpmRUVCSbgx7VuFuS-I9SFin-1HBJa5adl9BcC2K3DNSzZ5uZWqbdDGIAUzwp05DisvaHNO5v-606CSLdwM7ZA3Sp/w9999/probing-board.jpg"><img alt="I probed the Alto&#39;s Ethernet card with an oscilloscope to check the signals it was receiving. An extender card from the LCM+L allowed us to access the card." class="hilite" height="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiI3m8xzBR4R4V6mvQ_Vaock42mviMH0Fd-VJpd0cH218gXHYhwrdBMpmRUVCSbgx7VuFuS-I9SFin-1HBJa5adl9BcC2K3DNSzZ5uZWqbdDGIAUzwp05DisvaHNO5v-606CSLdwM7ZA3Sp/w400/probing-board.jpg" title="I probed the Alto&#39;s Ethernet card with an oscilloscope to check the signals it was receiving. An extender card from the LCM+L allowed us to access the card." width="400" /></a><div class="cite">I probed the Alto's Ethernet card with an oscilloscope to check the signals it was receiving. An extender card from the LCM+L allowed us to access the card.</div></p> <p>I tested the new board but it didn't work at all: the Alto wasn't receiving data or sending data. I realized that the new driver chip was a NAND gate so the signals were now inverted. I updated the PRU code to flip LOW and HIGH on the data out signal. The board still didn't work, so I probed the Alto's Ethernet board with an oscilloscope, comparing the signals from the old working board to the new failing board. Strangely, both signals were identical in the Alto and looked fine.</p> <p>Eventually Marc asked me if there could be something wrong with the collision detection. I realized that the the new NAND driver was also inverting the collision detection signal. Thus, the Alto was seeing constant network collisions and refused to send or receive anything. After fixing this in my PRU software, the new board worked fine. I'm making a third revision of the board to fix the missing trace; hopefully this won't break something else.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguiZlbhr_SntyGdBLo6vY0HWzUtRKEPeY3GopacpJNyXrKABm7ffdanbSo36HAnT6b3R3pVU1T8MRdaIxYUjGIKS7_m6XRD1JQ9sYKNef1d4qR1PxSh7td3Ah0xEdmRKocgTwnmRyXvQ99/w9999/transceivers.jpg"><img alt="An assortment of vintage Ethernet transceivers, along with the tap tools used to drill holes in the Ethernet cable for the vampire tap connection." class="hilite" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguiZlbhr_SntyGdBLo6vY0HWzUtRKEPeY3GopacpJNyXrKABm7ffdanbSo36HAnT6b3R3pVU1T8MRdaIxYUjGIKS7_m6XRD1JQ9sYKNef1d4qR1PxSh7td3Ah0xEdmRKocgTwnmRyXvQ99/w400/transceivers.jpg" title="An assortment of vintage Ethernet transceivers, along with the tap tools used to drill holes in the Ethernet cable for the vampire tap connection." width="400" /></a><div class="cite">An assortment of vintage Ethernet transceivers, along with the tap tools used to drill holes in the Ethernet cable for the vampire tap connection.</div></p> <h2>Conclusion</h2> <p>The Ethernet gateway project took much more time and encountered more problems than I expected. But it worked in the end, and several Alto owners are now using my gateway. I've open-sourced this interface (the board layout and the gateway software); it's available on <a href="https://github.com/shirriff/alto-ethernet-interface">github</a>.</p> <p>The Alto I've been restoring came from YCombinator; the restoration team includes Marc Verdiell, <a href="https://rescue1130.blogspot.com/">Carl Claunch</a> and Luca Severini. My full set of Alto posts is <a href="http://www.righto.com/search/label/alto">here</a> and Marc's extensive videos of the restoration are <a href="https://www.youtube.com/user/mverdiell/videos">here</a>. Thanks to the <a href="http://www.livingcomputers.org/">Living Computers Museum+Labs</a> for the <a href="https://github.com/livingcomputermuseum/IFS">IFS software</a>.</p> <p>Follow me on <a href="https://twitter.com/kenshirriff">Twitter</a> or <a href="http://www.righto.com/feeds/posts/default">RSS</a> to find out about my latest blog posts.</p> <h2>Notes and references</h2> <div class="footnote"> <ol> <li id="fn:pup"> <p>For more information on the Pup protocol, see <a href="http://bitsavers.trailing-edge.com/pdf/xerox/alto/ethernet/pupArch.pdf">Pup: An Internetwork Architecture</a> and the <a href="http://www.textfiles.com/bitsavers/pdf/xerox/alto/pupSpec.pdf">Pup Specifications</a> memo. &#160;<a class="footnote-backref" href="#fnref:pup" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> <li id="fn:pru"> <p>Programming the PRU microcontrollers has a difficult learning curve, and it's not nearly as well documented as, say, the Arduino. Based on my experience with the PRU, I wrote some programming tips <a href="http://www.righto.com/2016/08/pru-tips-understanding-beaglebones.html">here</a> and <a href="http://www.righto.com/2016/09/how-to-run-c-programs-on-beaglebones.html">here</a>.&#160;<a class="footnote-backref" href="#fnref:pru" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p> </li> <li id="fn:bcpl"> <p>The Alto's network code is <a href="http://xeroxalto.computerhistory.org/Indigo/AltoSource/PUPSOURCES.DM!3_">online</a>; you can look at one of the Pup files <a href="http://xeroxalto.computerhistory.org/Indigo/AltoSource/PUPSOURCES.DM!3_/.PupBSPOpenClose.bcpl.html">here</a>. The code is written in BCPL, which was a predecssor to C. It is very similar to C, but with different syntactic choices. For instance, <code>&gt;&gt;</code> is not a shift but accesses a field in a structure.&#160;<a class="footnote-backref" href="#fnref:bcpl" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p> </li> <li id="fn:ifs"> <p>At PARC, IFS was an acronym for <em>Interim File System</em>, an Alto-based distributed file server. It was called <em>interim</em> because an improved system was being developed, but somehow a new system never replaced IFS.&#160;<a class="footnote-backref" href="#fnref:ifs" rev="footnote" title="Jump back to footnote 4 in the text">&#8617;</a></p> </li> <li id="fn:breath"> <p>Most of the time, the BeagleBone and the Alto alternated sending packets. But every second, IFS sent a "breath of life" packet, the packet executed by the Alto to start a network boot. The breath of life packet was part of the original Alto&mdash;it simplified the network boot code since the Alto didn't need to request a network boot, but just listen for a second or two. Since the breath of life packet was asynchronous with respect to the other network traffic, eventually it would happen at a bad time for my code, triggering the dropped packet problem.&#160;<a class="footnote-backref" href="#fnref:breath" rev="footnote" title="Jump back to footnote 5 in the text">&#8617;</a></p> </li> <li id="fn:race"> <p>The problem with the PRU and the "breath of life" packet was due to how I was sending signals between the PRU and the main BeagleBone processor. When sending a packet, the main processor would signal the PRU, and then wait for a signal back when the packet was sent. When a packet was received, the PRU would send a signal to the main processor. The problem was that the PRU sent the same signal in both cases. So a "packet received" signal at the wrong time could wake up the packet sending code, losing the received packet. Fundamentally, I was treating the signals between the main processor and the PRU as synchronous, when everything was really asynchronous. I rewrote the gateway code so ownership of the send and receive buffers was explicitly transferred between the main processor and the PRU. A signal just indicated that ownership had changed somehow; checking the buffer status showed what exactly had changed. See <a href="https://groups.google.com/forum/#!msg/beagleboard/3sre2nT-dAc/YWXWFFXOBQAJ">this discussion</a> for details.&#160;<a class="footnote-backref" href="#fnref:race" rev="footnote" title="Jump back to footnote 6 in the text">&#8617;</a></p> </li> <li id="fn:kicad"> <p>My error in KiCad was I placed a net label just a bit too far from the wire on the schematic, so the wire wasn't connected to the net.&#160;<a class="footnote-backref" href="#fnref:kicad" rev="footnote" title="Jump back to footnote 7 in the text">&#8617;</a></p> </li> <li id="fn:problems"> <p>My first PCB had a couple issues that I had to hack around. Ringing in the signal to the Alto corrupted it, so I added a damping capacitor. The driver didn't have enough current for an Ethernet cable longer than 10 feet, so I added a pull-down resistor. There were also a couple mechanical issues. The location of the Ethernet jack made it hard to remove the cable, and the board blocked one of the BeagleBone buttons. I also discovered that using a 74HC125 driver chip didn't work at all; just the 74AHCT125 worked.&#160;<a class="footnote-backref" href="#fnref:problems" rev="footnote" title="Jump back to footnote 8 in the text">&#8617;</a></p> </li> </ol> </div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'><span class='post-comment-link'> <a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/6264947694886887540/1182972412801248728' onclick=''> 7 comments: </a> </span> <span class='post-icons'> <span class='item-action'> <a href='https://www.blogger.com/email-post.g?blogID=6264947694886887540&postID=1182972412801248728' title='Email Post'> <img alt='' class='icon-action' height='13' src='http://img1.blogblog.com/img/icon18_email.gif' width='18'/> </a> </span> <span class='item-control blog-admin pid-1138732533'> <a href='https://www.blogger.com/post-edit.g?blogID=6264947694886887540&postID=1182972412801248728&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <span class='post-backlinks post-comment-link'> </span> <div class='post-share-buttons goog-inline-block'> <a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=1182972412801248728&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=1182972412801248728&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=1182972412801248728&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=1182972412801248728&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=1182972412801248728&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a> </div> </div> <div class='post-footer-line post-footer-line-2'><span class='post-labels'> Labels: <a href='http://www.righto.com/search/label/alto' rel='tag'>alto</a>, <a href='http://www.righto.com/search/label/beaglebone' rel='tag'>beaglebone</a> </span> </div> <div class='post-footer-line post-footer-line-3'></div> </div> </div> </div> </div></div> <div class="date-outer"> <div class="date-posts"> <div class='post-outer'> <div class='post hentry' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'> <meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYsz5aL_UtirSirYTi6XpqByNUVAAEkCWaMP2q0r8lUJvuyVsietHAFjbEA33jaTkdWmtde7BhbFH2R4DjWSfxMH1okC86KxDo-6Dj7K79D8pp-cyJZ-31lUyMuzL2IhmaxV-PfJIycREv/w650/module-front.jpg' itemprop='image_url'/> <meta content='6264947694886887540' itemprop='blogId'/> <meta content='3132839495408694347' itemprop='postId'/> <a name='3132839495408694347'></a> <h3 class='post-title entry-title' itemprop='name'> <a href='http://www.righto.com/2018/01/examining-1954-ibm-mainframes-pluggable.html'>An 8-tube module from a 1954 IBM mainframe examined: it's a key debouncer</a> </h3> <div class='post-header'> <div class='post-header-line-1'></div> </div> <div class='post-body entry-content' id='post-body-3132839495408694347' itemprop='description articleBody'> <p>IBM's vacuum tube computers of the 1950s were built from pluggable modules, each holding eight tubes and the associated components. I recently came across one of these modules so I studied its circuitry. This particular module implements five contact debouncing circuits, used to clean up input from a key or relay. When you press a key, the metal contacts tend to <a href="https://en.wikipedia.org/wiki/Switch#Contact_bounce">bounce</a> a bit before closing, so you end up with multiple open/closed signals, rather than a nice, clean signal. The signal needs to be "debounced" to remove the extra transitions before being processed by a computer. (Perhaps you have used a cheap keyboard that sometimes gives you duplicated letters; excessive key bounce causes this.)</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYsz5aL_UtirSirYTi6XpqByNUVAAEkCWaMP2q0r8lUJvuyVsietHAFjbEA33jaTkdWmtde7BhbFH2R4DjWSfxMH1okC86KxDo-6Dj7K79D8pp-cyJZ-31lUyMuzL2IhmaxV-PfJIycREv/w9999/module-front.jpg"><img alt="Front of an IBM tube module. This module contains five key debouncing circuits." class="hilite" height="425" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYsz5aL_UtirSirYTi6XpqByNUVAAEkCWaMP2q0r8lUJvuyVsietHAFjbEA33jaTkdWmtde7BhbFH2R4DjWSfxMH1okC86KxDo-6Dj7K79D8pp-cyJZ-31lUyMuzL2IhmaxV-PfJIycREv/w650/module-front.jpg" title="Front of an IBM tube module. This module contains five key debouncing circuits." width="650" /></a><div class="cite">Front of an IBM tube module. This module contains five key debouncing circuits.</div></p> <p>The module is apparently from an IBM 705, a powerful business computer introduced in 1954.<span id="fnref:why705"><a class="ref" href="#fn:why705" rel="footnote">1</a></span> The 705 was a big computer, weighing 16 tons. It contained 1700 vacuum tubes and consumed 70 kilowatts of power, with 40 tons<span id="fnref:ton"><a class="ref" href="#fn:ton" rel="footnote">2</a></span> of air conditioning to take away the heat from the tubes. A typical system cost $1,640,000 ($15 million in 2017 dollars), but was normally rented monthly for $33,500 ($300,000 in 2017 dollars). A few dozen 705 systems were built, mostly used by large companies and the US government. <span id="fnref:brl"><a class="ref" href="#fn:brl" rel="footnote">8</a></span></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMVksYtyEJKWOx1JaahpT2kkL2KtJ6UZped0C9pL-PlP0TXaNWv0Qk4c_0eCUB7I0AWeUpJLmoqRHclLzzTAbOItgGhFLzkS-2QPh0c4KDSOsd8zYWneQMEmfThlITmg0br1me8FP2BeUd/w9999/farmers-life-705.jpg"><img alt="The CPU of an IBM 705 was a massive unit. Photo from Farmers Insurance, showing their first computer." class="hilite" height="401" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMVksYtyEJKWOx1JaahpT2kkL2KtJ6UZped0C9pL-PlP0TXaNWv0Qk4c_0eCUB7I0AWeUpJLmoqRHclLzzTAbOItgGhFLzkS-2QPh0c4KDSOsd8zYWneQMEmfThlITmg0br1me8FP2BeUd/w500/farmers-life-705.jpg" title="The CPU of an IBM 705 was a massive unit. Photo from Farmers Insurance, showing their first computer." width="500" /></a><div class="cite">The CPU of an IBM 705 was a massive unit. Photo from <a href="https://twitter.com/wearefarmers/status/474661451907760128">Farmers Insurance</a>, showing their first computer.</div></p> <p>IBM introduced multi-tube pluggable modules in 1953 as part of the 700 series of computers.<span id="fnref:ibm701"><a class="ref" href="#fn:ibm701" rel="footnote">3</a></span> Pluggable modules were an innovation that simplified manufacturing and maintenance, as well as providing a way to pack circuitry densely. Computers were built from hundreds of pluggable modules of many different types. The photo below shows how the 8-tube modules were packed in the IBM 709.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp_IHqENsMDOfhZkpC6eU44N8kI9YkDiEEngXt6AMslQxfAOP4RssRGG1KAdMz7Xheh0O5y3KqY0MQ2-jyJYZk_04c4A7_3rsvbueQj0O-t2J8D3e5Uj6qdmvB0iSOsOlml0AWPAvtNxKl/w9999/709-tubes.jpg"><img alt="Closeup of tube modules in the IBM 709. Note that the modules are installed &quot;sideways&quot; with the tubes horizontal." class="hilite" height="289" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp_IHqENsMDOfhZkpC6eU44N8kI9YkDiEEngXt6AMslQxfAOP4RssRGG1KAdMz7Xheh0O5y3KqY0MQ2-jyJYZk_04c4A7_3rsvbueQj0O-t2J8D3e5Uj6qdmvB0iSOsOlml0AWPAvtNxKl/w350/709-tubes.jpg" title="Closeup of tube modules in the IBM 709. Note that the modules are installed &quot;sideways&quot; with the tubes horizontal." width="350" /></a><div class="cite">Closeup of tube modules in the IBM 709. Note that the modules are installed "sideways" with the tubes horizontal.</div></p> <p>IBM hoped that they could manufacture a small set of common pluggable modules, but this didn't work out since the computers required many different types of modules. Instead, IBM settled for modules that were built from standardized design rules and circuits. The main circuit classes were the inverter, the flip flop (which IBM called a "trigger"), diode logic,<span id="fnref:diodes"><a class="ref" href="#fn:diodes" rel="footnote">6</a></span> the multivibrator (pulse generator), and the cathode follower (buffer).<span id="fnref:early"><a class="ref" href="#fn:early" rel="footnote">7</a></span><span id="fnref:ce"><a class="ref" href="#fn:ce" rel="footnote">5</a></span> Unfortunately even this level of standardization didn't work too well. For instance, they ended up with dozens of different types of inverters for special cases, everything from an "Open-filament neon inverter" to a "Line capacity yanker". Thus, each computer ended up with hundreds of different types of tube modules, built from a multitude of circuits.<span id="fnref:sms"><a class="ref" href="#fn:sms" rel="footnote">4</a></span></p> <p>A single tube module could contain a couple dozen of these simple circuits. You might wonder how eight tubes could support so many circuits, but there were two factors. First, the tubes were typically dual triodes in one package, so the module had the equivalent of 16 simple tubes. Also, AND and OR logic gates were implemented in the module with compact semiconductor diodes, so complex Boolean logic could be implemented almost for free.</p> <p>I've seen <a href="https://youtu.be/hQWcIkoqXwg?t=2m43s">claims</a> that an 8-tube module represents an 8-bit byte, but that's not the case. The eight tubes don't generally map onto eight of anything since functions can take more or less than one tube. For instance, the module I examined contains five circuits. I have another module that stored three bits. Also, the byte wasn't a thing back then. These computers used 36-bit words (scientific models), or 6-bit characters (business models) so 8 bits was irrelevant.</p> <h2>Vacuum tubes</h2> <p>This module was built from a type of vacuum tube known as a triode. In a triode, electrons flow from the cathode to the plate (or anode), under the control of the grid. The heater, similar to a light bulb filament, heats the cathode to around 1000&#176;F, causing electrons to "boil" off the cathode. The anode has a large positive voltage (e.g. +140V), which attracts the negatively-charged electrons. The grid is placed between the cathode and the anode. If the grid is negative, it repels the electrons, blocking the flow to the plate. Thus, the triode can act as a switch, with the grid turning on and off the flow of electrons. The module I examined used dual triode tubes, combining two triodes into one tube for compactness. <span id="fnref:tubedetails"><a class="ref" href="#fn:tubedetails" rel="footnote">9</a></span></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSC83_hEKoiEmsLFS8olWTkQtB1s0RMcSrLw8GWgv6xPgqzvwZrSj7E6Lnytliser3V2CEXkzH1msIpDemUt0SEYhoP6TjvCOdH3wDrimtcY4jkkKsdlm8Gwd8i1GGaJjP1DXZL3JI8use/w9999/Triode_schematic_labeled.png"><img alt="Schematic symbol for a triode tube" class="hilite" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSC83_hEKoiEmsLFS8olWTkQtB1s0RMcSrLw8GWgv6xPgqzvwZrSj7E6Lnytliser3V2CEXkzH1msIpDemUt0SEYhoP6TjvCOdH3wDrimtcY4jkkKsdlm8Gwd8i1GGaJjP1DXZL3JI8use/w250/Triode_schematic_labeled.png" title="Schematic symbol for a triode tube" width="250" /></a><div class="cite">Schematic symbol for a triode tube</div></p> <p>Vacuum tubes required inconveniently large voltages; this module used -130V. -60V, +140V and 6.3VAC. Tubes also had high power consumption&mdash;note the many large (1 watt) resistors in the module. The filament was hot enough to glow, using a couple watts per tube. In total, each tube module probably used dozens of watts of power.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ViugNt8MLtd9HkA4I9Isy2Gw3F5WQdZTFBJt5fd_bGRbATuGgcR4fop3u-pu-ILB0XZ7goFMzdkqajxbpnv0-C3YKxf4rYASTEItWplg5i_eb-xCHCVi9TcDUx9Cx3OHv6Hudu-gIk0m/w9999/5965.jpg"><img alt="A 5965 vacuum tube from the module. The pins plug into a socket on top of the tube module. This tube is a dual-triode; the two plate structures are visible." class="hilite" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-ViugNt8MLtd9HkA4I9Isy2Gw3F5WQdZTFBJt5fd_bGRbATuGgcR4fop3u-pu-ILB0XZ7goFMzdkqajxbpnv0-C3YKxf4rYASTEItWplg5i_eb-xCHCVi9TcDUx9Cx3OHv6Hudu-gIk0m/w120/5965.jpg" title="A 5965 vacuum tube from the module. The pins plug into a socket on top of the tube module. This tube is a dual-triode; the two plate structures are visible." width="120" /></a><div class="cite">A 5965 vacuum tube from the module. The pins plug into a socket on top of the tube module. This tube is a dual-triode; the two plate structures are visible.</div></p> <h2>The module's circuitry</h2> <p>I closely examined the tube module and found that it consisted of five copies of the same circuit. I traced out one of these circuits, which was a bit inconvenient because the module has components on both the front and the back. I came across a <a href="http://www.piercefuller.com/scan/700circ.pdf">manual</a> of 700-series circuits, and found a circuit that was an exact match, down to the values of the resistors. The circuit is called a "Contact-Operated Trigger" and was used to interface a mechanical input (key, relay, or cam) to electronic circuits.<span id="fnref:why705"><a class="ref" href="#fn:why705" rel="footnote">1</a></span></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTizoDHOOqiCWphYIqM7F3Ye3-9ncDlcG7bcZ_Sk4-0kAQRflmtlwEss0DxpYsocnvtK8w8QhKCOw3ATaoyZSxTB7YMs7WL27yqAt0yuLOE-r3YY5ek1lT4i4dTEOevT4ZusvuDIc7-dFf/w9999/trigger-schematic.png"><img alt="Schematic of one &quot;trigger&quot; circuit of the tube module." class="hilite" height="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTizoDHOOqiCWphYIqM7F3Ye3-9ncDlcG7bcZ_Sk4-0kAQRflmtlwEss0DxpYsocnvtK8w8QhKCOw3ATaoyZSxTB7YMs7WL27yqAt0yuLOE-r3YY5ek1lT4i4dTEOevT4ZusvuDIc7-dFf/w550/trigger-schematic.png" title="Schematic of one &quot;trigger&quot; circuit of the tube module." width="550" /></a><div class="cite">Schematic of one "trigger" circuit of the tube module.</div></p> <p>The schematic above shows one of the trigger stages. The basic idea of this circuit is a resistor-capacitor filter (left) smooths out the input, removing any short glitches. This signal goes through two inverter circuits, creating a sharp output. Both inverters are part of the same 6211 tube and are wired as a Schmitt trigger.<span id="fnref:schmitt"><a class="ref" href="#fn:schmitt" rel="footnote">12</a></span> To understand how the inverter works, when the input (pin 2) is high, the current through the tube pulls the plate (pin 1) low. Conversely, when the input is low, the electron flow is blocked and the resistors pull the plate high.<span id="fnref:resistors"><a class="ref" href="#fn:resistors" rel="footnote">10</a></span> The output from the first inverter (plate, pin 1) is fed into the second inverter (grid, pin 7). This inverter works similarly, with its output on pin 6. The final output is buffered by a "cathode follower" circuit (not shown) to drive other modules. It also drives a neon bulb for a status indicator,</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK512LHEQf4NrCbz03kU1vfID71xH3yapxwDvQujerjEQy_fYjgxu0-ppNbwXcLAbo_Xut6P4b6g2c8dj97aWl7kmhRqpltZxpm1qGXE6S-qitHJmLOAfqhj6TRtvDzzxiw_2JGfej7ir6/w9999/module-labeled.jpg"><img alt="The tube module showing how the five debounce triggers are divided among the tubes." class="hilite" height="344" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK512LHEQf4NrCbz03kU1vfID71xH3yapxwDvQujerjEQy_fYjgxu0-ppNbwXcLAbo_Xut6P4b6g2c8dj97aWl7kmhRqpltZxpm1qGXE6S-qitHJmLOAfqhj6TRtvDzzxiw_2JGfej7ir6/w500/module-labeled.jpg" title="The tube module showing how the five debounce triggers are divided among the tubes." width="500" /></a><div class="cite">The tube module showing how the five debounce triggers are divided among the tubes.</div></p> <p>The tube module contains five of the above debounce circuits. The diagram above shows how these circuits map onto the eight tubes. Each cathode follower (CF) uses half a tube so one tube implements two cathode followers.<span id="fnref:tubetypes"><a class="ref" href="#fn:tubetypes" rel="footnote">11</a></span></p> <p>One amusing component I found in the tube module was "Vitamin Q" capacitors. Presumably this is related to the quality factor or <a href="http://www.radio-electronics.com/info/formulae/q-quality-factor/basics-tutorial.php">Q factor</a> in radio, and these capacitors were designed to improve the Q.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs4NsNdbjOI4DmfAlwavThf57QshM1p1LbahosoV0G_GFFrkUQ2nNgIInL2HfyXRHYbCdEodGoAgkD6edzCaDTnDF2wzgE8HNOjr0fXIMoJ-qpTdvbJ6j0wh6mgK9cEmS26yCFgq1F-DML/w9999/vitamin-q-capacitor.jpg"><img alt="A Vitamin Q capacitor in an IBM 705 tube module." class="hilite" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs4NsNdbjOI4DmfAlwavThf57QshM1p1LbahosoV0G_GFFrkUQ2nNgIInL2HfyXRHYbCdEodGoAgkD6edzCaDTnDF2wzgE8HNOjr0fXIMoJ-qpTdvbJ6j0wh6mgK9cEmS26yCFgq1F-DML/w300/vitamin-q-capacitor.jpg" title="A Vitamin Q capacitor in an IBM 705 tube module." width="300" /></a><div class="cite">A Vitamin Q capacitor in an IBM 705 tube module.</div></p> <h2>A brief history of vacuum tube computing, with a focus on IBM</h2> <p>It took longer to get from the invention of the vacuum tube to the development of electronic computer than you might expect. The triode vacuum tube was invented in 1907 and started being used for radio in 1912. The vacuum tube flip-flop, able to store one bit of data was invented by Eccles and Jordan in 1918, but it wasn't until about 1937 that flip flops were connected together into binary counters.</p> <p>IBM started investigating vacuum tube counters for calculations in 1941 and built an experimental vacuum tube multiplier in 1942. In 1948, IBM introduced the <a href="https://en.wikipedia.org/wiki/IBM_604">IBM 604</a> "Electronic Calculating Punch", which implemented high-speed arithmetic operations for punch-card systems by using vacuum tubes. It was IBM's first product with pluggable tube units, using simple modules with one or two vacuum tubes in each module (as seen below).<span id="fnref:ibmhistory"><a class="ref" href="#fn:ibmhistory" rel="footnote">14</a></span></p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHWv5zDc1O0_6lZdLcWmCX5vkQVlmBM_xY-7YcyCfAojGIK0bXpfgqpjnMk48uyZj27HQNJV72wRtGJc0-Kmca8XiQuH6hgeJanrxGrX8Ei-E3R8IZBlOIgkxdnkxkFtSvi4-Zd3y1HJpf/w9999/1024px-IBM_604_two_modules.jpg"><img alt="Two tube modules from the IBM 604. By Jud McCranie CC BY-SA 4.0, via Wikimedia Commons" class="hilite" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHWv5zDc1O0_6lZdLcWmCX5vkQVlmBM_xY-7YcyCfAojGIK0bXpfgqpjnMk48uyZj27HQNJV72wRtGJc0-Kmca8XiQuH6hgeJanrxGrX8Ei-E3R8IZBlOIgkxdnkxkFtSvi4-Zd3y1HJpf/w150/1024px-IBM_604_two_modules.jpg" title="Two tube modules from the IBM 604. By Jud McCranie CC BY-SA 4.0, via Wikimedia Commons" width="150" /></a><div class="cite">Two tube modules from the IBM 604. By Jud McCranie <a href="https://creativecommons.org/licenses/by-sa/4.0">CC BY-SA 4.0</a>, <a href="https://commons.wikimedia.org/wiki/File%3AIBM_604_two_modules.jpg">via Wikimedia Commons</a></div></p> <p>Meanwhile, vacuum tube computers were being invented, with Atanasoff's <a href="https://en.wikipedia.org/wiki/Atanasoff%E2%80%93Berry_computer">linear equation solver</a> built in 1942 and the <a href="https://en.wikipedia.org/wiki/Colossus_computer">Colossus</a> codebreaking system in 1943. But it wasn't until the programmable ENIAC computer was announced in 1946 that the vacuum tube computer revolution really started, leading to the development of <a href="https://en.wikipedia.org/wiki/List_of_vacuum_tube_computers">numerous computers</a> by the early 1950s.</p> <p>In 1952, announced the 701, IBM's first commercial scientific computer. The 701 introduced multi-tube pluggable modules, the focus of this article. These modules were used in the 700-series computers until they were obsoleted in 1958 by IBM's transistorized 7000-series computers, which used germanium transistors. The transistorized computers were built from printed circuit boards the size of a playing card, called SMS cards.<span id="fnref:architecture"><a class="ref" href="#fn:architecture" rel="footnote">13</a></span> Thus, although vacuum tube computers were highly influential, their lifespan was short. (<a href="https://en.wikipedia.org/wiki/List_of_transistorized_computers">Transistorized computers</a> also had a short lifespan of a bit over a decade. Integrated circuits, on the other hand, have been powering computers for more than 50 years, with no signs of being replaced.)</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrK6562SE3jTTlpNCz9GzLJSgSKct2zAKzPjP2Dtwk7QNoOIkrY_JgmBAZr_vrRD4xegownP2M9jqpCpDYAUM4z_XRxwcaSNIdF52xzVG9Ymu51i6f3Uxg8RmMV286sV6DfLYyHnqh0hz3/w9999/tube-sms-comparison.jpg"><img alt="A tube module implements more logic than an SMS card, but the cards are much smaller and use less power. Photo shows a &quot;DGT&quot; SMS card implementing four AND gates on top of a different tube module." class="hilite" height="295" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrK6562SE3jTTlpNCz9GzLJSgSKct2zAKzPjP2Dtwk7QNoOIkrY_JgmBAZr_vrRD4xegownP2M9jqpCpDYAUM4z_XRxwcaSNIdF52xzVG9Ymu51i6f3Uxg8RmMV286sV6DfLYyHnqh0hz3/w400/tube-sms-comparison.jpg" title="A tube module implements more logic than an SMS card, but the cards are much smaller and use less power. Photo shows a &quot;DGT&quot; SMS card implementing four AND gates on top of a different tube module." width="400" /></a><div class="cite">A tube module implements more logic than an SMS card, but the cards are much smaller and use less power. Photo shows a "<a href="http://righto.com/sms/DGT.html">DGT</a>" SMS card implementing four AND gates on top of a different tube module.</div></p> <h2>How the modules are built</h2> <p>One important advantage of the tube module is the circuitry is somewhat three-dimensional, compared to components soldered on a circuit board. This allows the circuitry to more efficiently fill the volume of the computer. The module has four layers of contact boards with terminal strips attached, allowing four vertical layers of components (resistors, capacitors, etc) to be soldered to the terminal strips.<span id="fnref:ce"><a class="ref" href="#fn:ce" rel="footnote">5</a></span> The solder terminals are connected together by thin horizontal metal strips, which can be cut. Thus, neighboring tabs can be electrically connected or not, as required by the circuit. Jumper wires are used to provide additional connections as needed.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaEykHVSrVtf4eafVCTQMyfKUPzI6MLT1MQFjOgqMaRku23iUAh04xqUuE7yiuZDki4W0ersBk8ooADWK1EwKlLmpRHHoooUR0zsrlafWIgSJ-mYFBMS8eABpYGPvDRPyT7o-qIYxBeEAV/w9999/closeup.jpg"><img alt="The module has four levels of components between the tubes and the connector. In addition, there are components on the front and back of the module." class="hilite" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaEykHVSrVtf4eafVCTQMyfKUPzI6MLT1MQFjOgqMaRku23iUAh04xqUuE7yiuZDki4W0ersBk8ooADWK1EwKlLmpRHHoooUR0zsrlafWIgSJ-mYFBMS8eABpYGPvDRPyT7o-qIYxBeEAV/w400/closeup.jpg" title="The module has four levels of components between the tubes and the connector. In addition, there are components on the front and back of the module." width="400" /></a><div class="cite">The module has four levels of components between the tubes and the connector. In addition, there are components on the front and back of the module.</div></p> <p>The tube module has 64 metal contact tabs at the bottom, providing connections for power and signals. The tube module doesn't simply plug into the socket as you might expect, but uses a two step mechanism. First, the module is placed in the socket but the pins don't make contact. You may have noticed the rod sticking up from the top of the module. To lock the module into place, the rod is rotated 180 degrees with a special tool, causing a circular cam at the bottom of the module to rotate. The force of the cam against the socket causes the module to slide sideways so the pins mesh with the socket contacts. This reduces the force required to insert the module and minimizes the risk of the module coming loose.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZG6RzOS4ziVy9sOn4W6wv15U6dXKttsAGp4ZrqUN7VkCbV4CxYjYtAFWPF3fwyWWA2ofQHirKybvXnbvquS4YCiAaTDBeRRUaeB4qy2SkL85bfRMsaZTH33SM8OVn_VqoNZbGFSDzz2qN/w9999/connector.jpg"><img alt="The module has 64 metal tabs that plug into the socket. The circular cam (rusted) rotates to slide the module (and the tabs) sideways into the socket." class="hilite" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZG6RzOS4ziVy9sOn4W6wv15U6dXKttsAGp4ZrqUN7VkCbV4CxYjYtAFWPF3fwyWWA2ofQHirKybvXnbvquS4YCiAaTDBeRRUaeB4qy2SkL85bfRMsaZTH33SM8OVn_VqoNZbGFSDzz2qN/w400/connector.jpg" title="The module has 64 metal tabs that plug into the socket. The circular cam (rusted) rotates to slide the module (and the tabs) sideways into the socket." width="400" /></a><div class="cite">The module has 64 metal tabs that plug into the socket. The circular cam (rusted) rotates to slide the module (and the tabs) sideways into the socket.</div></p> <p>The contacts are carefully positioned to establish the ground connection first, then the negative-voltage connections and finally the positive connections. This allows hot-swapping, replacing a tube module while the system is powered up. (The <a href="http://www.piercefuller.com/scan/700circ.pdf">manual</a> does say, "However, it is wise to drop DC voltages before removing or installing pluggable units.") Interestingly, USB connectors use the same idea. If you look at a USB connector, you'll see that the middle two contacts (data) are shorter than the outside contacts (power and ground), so power and ground connections are established first.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPjvI3TjPGo9Vh2bHlisqVM9TE0CIibXOdZMBadCGHcs8oAx8IdZ8OcFb0E5Htnk9cmQoDW4EvyA2mrNcVFjcqGDHn2nMFDOhgRA7BY-rv1GKhozE14uiie-cm1GLh37isfMC6b2y4FOTw/w9999/patent-module.png"><img alt="Patent 2,754,454 describes the tube module mechanism in detail." class="hilite" height="449" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPjvI3TjPGo9Vh2bHlisqVM9TE0CIibXOdZMBadCGHcs8oAx8IdZ8OcFb0E5Htnk9cmQoDW4EvyA2mrNcVFjcqGDHn2nMFDOhgRA7BY-rv1GKhozE14uiie-cm1GLh37isfMC6b2y4FOTw/w300/patent-module.png" title="Patent 2,754,454 describes the tube module mechanism in detail." width="300" /></a><div class="cite">Patent 2,754,454 describes the tube module mechanism in detail.</div></p> <p>The tube module has locking tabs that holds the module into place after it slides sideways. I noticed that these tabs are broken off on the module I examined; compare with the intact module below. Probably the rusted cam couldn't be moved, so the module had to be forced out of the socket, breaking the tabs.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0d0SaXFFlUknr6C31kdwv2UFxODDTLWso1j6Hb_0gSy-ojNVjCH56aa35EEgDTt9tBeey_2GNFu1uw91JN0d-89L3BRaDjE_CjWDe9Mhq9ySzL3ACW4Mu8njgfeVdsuXIEHiwuTQCEsFs/w9999/tabs.png"><img alt="When the tube module slides sideways into the connectors, the locking tabs engage to keep it from being pulled out. In this tube module, the locking tabs are broken off." class="hilite" height="255" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0d0SaXFFlUknr6C31kdwv2UFxODDTLWso1j6Hb_0gSy-ojNVjCH56aa35EEgDTt9tBeey_2GNFu1uw91JN0d-89L3BRaDjE_CjWDe9Mhq9ySzL3ACW4Mu8njgfeVdsuXIEHiwuTQCEsFs/w300/tabs.png" title="When the tube module slides sideways into the connectors, the locking tabs engage to keep it from being pulled out. In this tube module, the locking tabs are broken off." width="300" /></a><div class="cite">When the tube module slides sideways into the connectors, the locking tabs engage to keep it from being pulled out. In this tube module, the locking tabs are broken off.</div></p> <p>More evidence of the module's hard life is there are at least four resistors missing from the module, and two resistors with broken solder joints. (This made it considerably harder to figure out what the module did.) Positions where two components are soldered to the same tabs seem especially prone to having a component knocked off. The photo below illustrates one of the missing resistors; one trigger circuit has a 91K (white-brown-orange) resistor soldered across the capacitor, while it is missing in the second circuit.</p> <p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA97qhU5rIlwmlanI9mYRY5dRcMj25ZzrUBv-AcTgGhCUivhP_FyKDFIz8cGxPbpIXrkKvyno1n14EwQuuv3RVaMUsftaxsRoCwV14NajfyR1XGqwypvLzsyOUMA2xOGO5Plw3mGB3Q91Z/w9999/missing-resistor.png"><img alt="The arrow shows one of the missing resistors in the tube module." class="hilite" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA97qhU5rIlwmlanI9mYRY5dRcMj25ZzrUBv-AcTgGhCUivhP_FyKDFIz8cGxPbpIXrkKvyno1n14EwQuuv3RVaMUsftaxsRoCwV14NajfyR1XGqwypvLzsyOUMA2xOGO5Plw3mGB3Q91Z/w300/missing-resistor.png" title="The arrow shows one of the missing resistors in the tube module." width="300" /></a><div class="cite">The arrow shows one of the missing resistors in the tube module.</div></p> <h2>Conclusion</h2> <p>The tube module is an interesting artifact from the era of vacuum tube computers. Studying it revealed its function, five contact debouncing circuits for use with keys or relays. Part II of this blog post will describe powering up the module and getting it to work. For a sneak preview, you can watch CuriousMarc's video:</p> <iframe width="560" height="315" src="https://www.youtube.com/embed/zOlI1_i2HwQ" frameborder="0" gesture="media" allow="encrypted-media" allowfullscreen></iframe> <p>Thanks to <a href="https://rescue1130.blogspot.com/">Carl Claunch</a> for providing the module.</p> <p>Follow me on <a href="https://twitter.com/kenshirriff">Twitter</a> or <a href="http://www.righto.com/feeds/posts/default">RSS</a> to find out about my latest blog posts.</p> <h2>Notes and references</h2> <div class="footnote"> <ol> <li id="fn:why705"> <p>I found the circuit for this module in a <a href="http://www.piercefuller.com/scan/700circ.pdf">manual</a> of circuits for IBM's 700-series computers (page C35). Chapter C has information on circuits for the 702 and 705 business systems (which use different voltages from the scientific 701, 704 and 709 systems described in chapter B). Since the 705 was much more popular than the 702, it's more likely that the module is from a 705.&#160;<a class="footnote-backref" href="#fnref:why705" rev="footnote" title="Jump back to footnote 1 in the text">&#8617;</a></p> </li> <li id="fn:ton"> <p>Strangely, a ton of refrigeration means cooling equal to one ton of ice per day, not an air conditioner that weights one ton. This unit probably made more sense in the 1900s when people were switching from ice-based cooling to refrigeration. In more sensible units, one ton of refrigeration is 12,000 BTU/hour or about 3500 Watts. For comparison, a typical window air conditioner is one ton of cooling, while a central home air conditioner is 1.5 to 5 tons of cooling.&#160;<a class="footnote-backref" href="#fnref:ton" rev="footnote" title="Jump back to footnote 2 in the text">&#8617;</a></p> </li> <li id="fn:ibm701"> <p>Several detailed articles on the IBM 701 computer, written by the designers in 1953 are <a href="http://bitsavers.org/pdf/ibm/701/Buchholz_IBM_701_System_Design_Oct53.pdf">here</a>. &#160;<a class="footnote-backref" href="#fnref:ibm701" rev="footnote" title="Jump back to footnote 3 in the text">&#8617;</a></p> </li> <li id="fn:sms"> <p>IBM went through a similar failed standardization process in the 1960s with their transistorized Standard Modular System (SMS) cards. They hoped to build computers from a small number of standard cards but ended up with <a href="http://static.righto.com/sms/index.html">thousands of different cards</a>.&#160;<a class="footnote-backref" href="#fnref:sms" rev="footnote" title="Jump back to footnote 4 in the text">&#8617;</a></p> </li> <li id="fn:ce"> <p>IBM's <a href="http://www.piercefuller.com/scan/700circ.pdf?id=700circ">700 Series Data Processing System Component Circuits</a> provides extremely detailed information on the circuits used in tube modules. If you want to know all about tube modules, this is the document to read. A couple other pages of interest are the <a href="http://www.piercefuller.com/library/ibm709diagrams.html">IBM 709 CPU Diagrams</a> with schematics of the 709's tube modules and <a href="http://www.piercefuller.com/collect/705dwg/index.html">IBM 705 Drawings</a> with a few 705 tube modules. The 1952 patent, <a href="https://www.google.com/patents/US2754454">Multiple Pluggable Unit</a>, describes the mechanical structure of the tube modules in detail. A few drawings of 705 circuits are <a href="http://www.piercefuller.com/collect/705dwg/index.html">here</a>, and 709 drawings are <a href="http://www.piercefuller.com/collect/709dwg/index.html">here</a>. Bitsavers has some information on the <a href="http://bitsavers.org/pdf/ibm/704">704</a> including details of the circuitry, but not to the tube level. Bitsavers' information on the <a href="http://bitsavers.org/pdf/ibm/701">701</a>, <a href="http://bitsavers.org/pdf/ibm/702">702</a>, <a href="http://bitsavers.org/pdf/ibm/705">705</a> and <a href="http://bitsavers.org/pdf/ibm/709">709</a> is less relevant.&#160;<a class="footnote-backref" href="#fnref:ce" rev="footnote" title="Jump back to footnote 5 in the text">&#8617;</a></p> </li> <li id="fn:diodes"> <p>The development of the semiconductor diode significantly reduced the size of computers, as small diodes could perform logic functions (AND, OR) that previously required vacuum tubes. The IBM 706 contained many more diodes than vacuum tubes: 4600 germanium diodes versus 1700 vacuum tubes. I think the importance of diodes is underestimated, with people focusing on tubes versus transistors.&#160;<a class="footnote-backref" href="#fnref:diodes" rev="footnote" title="Jump back to footnote 6 in the text">&#8617;</a></p> </li> <li id="fn:early"> <p>The tube modules are described in more detail in the book <a href="http://amzn.to/2ALhzMj">IBM's Early Computers</a>, pages 147-151.&#160;<a class="footnote-backref" href="#fnref:early" rev="footnote" title="Jump back to footnote 7 in the text">&#8617;</a></p> </li> <li id="fn:brl"> <p>The <a href="http://www.textfiles.com/bitsavers/pdf/brl/compSurvey_Mar1961">BRL Report</a> has details on most computer systems as of 1961, including the 705. Take a look at this report if you want to know the size, price, features, or number of components in old computers.&#160;<a class="footnote-backref" href="#fnref:brl" rev="footnote" title="Jump back to footnote 8 in the text">&#8617;</a></p> </li> <li id="fn:tubedetails"> <p>The module uses two types of vacuum tubes: five 6211 tubes and three 5965 tubes. Both tubes were designed for computer applications, able to handle the stress of constantly turning signals on and off (unlike radio applications, where tubes handled analog signals). They are both dual triodes, but the 5965 is a higher power tube. The 5965 tube is IBM number 317261. The 6211 tube is IBM number 252551. The 5965 tube handles up to 300V, while the 6211 only 200V. The 5965 also handles more current and has higher gain, which is probably why it is used in the cathode follower driver circuit. For full details on the tubes, see the <a href="https://frank.pocnet.net/sheets/137/5/5965.pdf">5965 datasheet</a> and the <a href="https://frank.pocnet.net/sheets/137/6/6211.pdf">6211 datasheet</a>. These tubes are both similar to the more common <a href="http://www.effectrode.com/signal-tubes/the-12at7-tube/">12AT7 tube</a>.&#160;<a class="footnote-backref" href="#fnref:tubedetails" rev="footnote" title="Jump back to footnote 9 in the text">&#8617;</a></p> </li> <li id="fn:resistors"> <p>The various resistors adjust (biasing) the voltage levels from the high plate voltage to the lower voltages used by the grid. (That's why the -130V supply is needed, to pull the voltage down enough.)&#160;<a class="footnote-backref" href="#fnref:resistors" rev="footnote" title="Jump back to footnote 10 in the text">&#8617;</a></p> </li> <li id="fn:tubetypes"> <p>The triggers are implemented with type 6211 tubes, while the cathode followers are implemented with the more powerful 5965 tubes. From the photo, it may appear that the tubes don't match the locations since there are four tubes with metallized tops and four tubes with metallized sides. However, the tube markings indicate that all tubes were in the right locations. The location of the shiny <a href="https://en.wikipedia.org/wiki/Getter">getter</a> is independent of the tube type.&#160;<a class="footnote-backref" href="#fnref:tubetypes" rev="footnote" title="Jump back to footnote 11 in the text">&#8617;</a></p> </li> <li id="fn:schmitt"> <p>The tube is wired as a <a href="https://robotics.eecs.berkeley.edu/~pister/publications/FamousPapers/Schmitt1937.pdf">Schmitt trigger</a>. When the input becomes sufficiently high, it will rapidly switch to the on state. The input will need to fall to a lower level, at which point it will rapidly switch to the off state. The key to the Schmitt trigger is the resistor connected to the cathodes. When one tube turns on, the voltage drop across the resistor will raise the the cathode voltage close to the grid voltage. This will force the other tube off. You can also look at it as a differential amplifier, where the higher grid "wins".&#160;<a class="footnote-backref" href="#fnref:schmitt" rev="footnote" title="Jump back to footnote 12 in the text">&#8617;</a></p> </li> <li id="fn:architecture"> <p>If you want a quick summary of IBM's machines from the 701 through the 370, see <a href="https://archive.org/stream/ibm-early-computers/Image070917170713#page/n0/mode/1up">The Architecture of IBM's Early Computers</a> and "System/360 and Beyond".&#160;<a class="footnote-backref" href="#fnref:architecture" rev="footnote" title="Jump back to footnote 13 in the text">&#8617;</a></p> </li> <li id="fn:ibmhistory"> <p>The book <a href="http://amzn.to/2ALhzMj">IBM's Early Computers</a> has extremely detailed information on IBM's pre-360 machines. Also see <a href="http://www-03.ibm.com/ibm/history/ibm100/us/en/icons/ibm603/breakthroughs/">IBM's web page on the 603</a>.&#160;<a class="footnote-backref" href="#fnref:ibmhistory" rev="footnote" title="Jump back to footnote 14 in the text">&#8617;</a></p> </li> </ol> </div> <div style='clear: both;'></div> </div> <div class='post-footer'> <div class='post-footer-line post-footer-line-1'><span class='post-comment-link'> <a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/6264947694886887540/3132839495408694347' onclick=''> 15 comments: </a> </span> <span class='post-icons'> <span class='item-action'> <a href='https://www.blogger.com/email-post.g?blogID=6264947694886887540&postID=3132839495408694347' title='Email Post'> <img alt='' class='icon-action' height='13' src='http://img1.blogblog.com/img/icon18_email.gif' width='18'/> </a> </span> <span class='item-control blog-admin pid-1138732533'> <a href='https://www.blogger.com/post-edit.g?blogID=6264947694886887540&postID=3132839495408694347&from=pencil' title='Edit Post'> <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/> </a> </span> </span> <span class='post-backlinks post-comment-link'> </span> <div class='post-share-buttons goog-inline-block'> <a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=3132839495408694347&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=3132839495408694347&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=3132839495408694347&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=3132839495408694347&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=6264947694886887540&postID=3132839495408694347&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a> </div> </div> <div class='post-footer-line post-footer-line-2'><span class='post-labels'> Labels: <a href='http://www.righto.com/search/label/electronics' rel='tag'>electronics</a>, <a href='http://www.righto.com/search/label/ibm1401' rel='tag'>ibm1401</a>, <a href='http://www.righto.com/search/label/reverse-engineering' rel='tag'>reverse-engineering</a> </span> </div> <div class='post-footer-line post-footer-line-3'></div> </div> </div> </div> </div></div> </div> <div class='blog-pager' id='blog-pager'> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' href='http://www.righto.com/search?updated-max=2018-08-15T08:50:00-07:00&max-results=7&reverse-paginate=true' id='Blog1_blog-pager-newer-link' title='Newer Posts'>Newer Posts</a> </span> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='http://www.righto.com/search?updated-max=2018-01-06T09:07:00-08:00&max-results=7' id='Blog1_blog-pager-older-link' title='Older Posts'>Older Posts</a> </span> <a class='home-link' href='http://www.righto.com/'>Home</a> </div> <div class='clear'></div> </div></div> </div> </div> <div class='column-left-outer'> <div class='column-left-inner'> <aside> </aside> </div> </div> <div class='column-right-outer'> <div class='column-right-inner'> <aside> <div class='sidebar section' id='sidebar-right-1'><div class='widget HTML' data-version='1' id='HTML2'> <div class='widget-content'> <style> @import url('https://fonts.googleapis.com/css?family=Montserrat:300,400,500,700'); .form-preview { display: flex; flex-direction: column; justify-content: center; margin-top: 30px; padding: clamp(17px, 5%, 40px) clamp(17px, 7%, 50px); max-width: 350px; min-height: 200px; border-radius: 6px; box-shadow: 0 5px 25px rgba(34, 60, 47, 0.25); } .form-preview, .form-preview *{ box-sizing: border-box; } .form-preview .preview-heading { width: 100%; } .form-preview .preview-heading h5{ margin-top: 0; margin-bottom: 0; } .form-preview .preview-input-field { margin-top: 20px; width: 100%; } .form-preview .preview-input-field input { width: 100%; height: 40px; border-radius: 6px; border: 2px solid #e9e8e8; background-color: #fff; outline: none; } .form-preview .preview-input-field input::placeholder, .form-preview .preview-input-field input { opacity: 0.5; color: #000; font-family: "Montserrat"; font-size: 14px; font-weight: 500; line-height: 20px; text-align: center; } .form-preview .preview-submit-button { margin-top: 10px; width: 100%; } .form-preview .preview-submit-button button { width: 100%; height: 40px; border: 0; border-radius: 6px; line-height: 0px; } .form-preview .preview-submit-button button:hover { cursor: pointer; } </style><form data-v-4c58e686="" action="https://api.follow.it/subscription-form/U3NBTmZKVkI1YVpCa000a0RCZHFiQ3FYMko1cWRTZTN6K3hJdWM2QWxJbE1uVXdXUHZZVzJVQzVLZGh5Y0RCVXB2d2JSTzBobGhuY0FsZnlHbVdFZ2VTN2Q4Vy84RnIxUTgzVlcrbXNIR0Y0aW93d3REM2J6VS9RL0gxWURnV1d8ZWN0YStwUWdWWUFiOTIyWDVGWjdYYVdGZEVNcC9qODZacjlwWXRIcEJQRT0=/8" method="post"><div data-v-4c58e686="" class="form-preview" style="background-color: rgb(255, 255, 255); border-style: solid; border-width: 1px; border-color: rgb(204, 204, 204); position: relative;"><div data-v-4c58e686="" class="preview-heading"><h5 data-v-4c58e686="" style="font-family: Montserrat; font-weight: bold; color: rgb(0, 0, 0); font-size: 12px; text-align: center;">Get new posts by email:</h5></div> <div data-v-4c58e686="" class="preview-input-field"><input data-v-4c58e686="" type="email" name="email" placeholder="Enter your email" spellcheck="false" /></div> <div data-v-4c58e686="" class="preview-submit-button"><button data-v-4c58e686="" type="submit" style="font-family: Montserrat; font-weight: bold; color: rgb(255, 255, 255); font-size: 12px; text-align: center; background-color: rgb(0, 0, 0);">Subscribe</button></div></div></form> </div> <div class='clear'></div> </div><div class='widget HTML' data-version='1' id='HTML3'> <h2 class='title'>About the site</h2> <div class='widget-content'> <a href="https://www.righto.com/p/index.html">Contact info and site index</a> </div> <div class='clear'></div> </div><div class='widget PopularPosts' data-version='1' id='PopularPosts1'> <h2>Popular Posts</h2> <div class='widget-content popular-posts'> <ul> <li> <div class='item-thumbnail-only'> <div class='item-thumbnail'> <a href='http://www.righto.com/2024/11/antenna-diodes-in-pentium-processor.html' target='_blank'> <img alt='' border='0' src='https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_t8ObbJbJ2ReAz42LQQRegEkDwldm804XwPBmKCS_FLkZcyHLXAGYp1L_TP9usD8Q9zieJf2qvXq3ajKExnmkZ5DtpbH-3HoSfyuXbKnzn85bpUaBQCrdVKwn-0p_PB7UHqCRc=w72-h72-p-k-no-nu'/> </a> </div> <div class='item-title'><a href='http://www.righto.com/2024/11/antenna-diodes-in-pentium-processor.html'>Antenna diodes in the Pentium processor</a></div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-thumbnail-only'> <div class='item-thumbnail'> <a href='http://www.righto.com/2012/05/apple-iphone-charger-teardown-quality.html' target='_blank'> <img alt='' border='0' src='https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_ub-ChcOPQ0GKJn9Ee_LmI7P8oQlJ9-5chHdvdzQTnyMOs3oDqM2KSP07dtIfrU_Ruj0d3fk60phJEoXcVdoeqUOMY2NvmjzOjElKI7UjBUTdHp-KBor3hVn730USNEyrvs95N9pfxWsK4UhKAyNU7WBRM=w72-h72-p-k-no-nu'/> </a> </div> <div class='item-title'><a href='http://www.righto.com/2012/05/apple-iphone-charger-teardown-quality.html'>Apple iPhone charger teardown: quality in a tiny expensive package</a></div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-thumbnail-only'> <div class='item-thumbnail'> <a href='http://www.righto.com/2024/05/blog-post.html' target='_blank'> <img alt='' border='0' src='https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_t81VZtGMcJFR-TPn6Npbwk3xz4Tw1LsZ8zn8LFILQHTQ-K_LPdMUdkSGfrmi9oA-hrr6DjiVUjlZAw5GDG6cktBgMq7nsPif3nMTJHXE5f4_s4itGEm_ib4_r6_P1cTpO-R1DMa1hRhC9onYVD3Z5g=w72-h72-p-k-no-nu'/> </a> </div> <div class='item-title'><a href='http://www.righto.com/2024/05/blog-post.html'>Inside a vintage aerospace navigation computer of uncertain purpose</a></div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-thumbnail-only'> <div class='item-thumbnail'> <a href='http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html' target='_blank'> <img alt='' border='0' src='https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_u7tiw2EFyYuUM7kY6rWL6-WrIESCOBfUyAgxA_6-Q--gqn53qj_xsSzUGDkZj4VKCnvBBNhy4Ug7bIrrPI7AyfOFJx_0uwvlnSuZk-pJGQ4x8=w72-h72-p-k-no-nu'/> </a> </div> <div class='item-title'><a href='http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html'>A Multi-Protocol Infrared Remote Library for the Arduino</a></div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-thumbnail-only'> <div class='item-thumbnail'> <a href='http://www.righto.com/2014/09/mining-bitcoin-with-pencil-and-paper.html' target='_blank'> <img alt='' border='0' src='https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_vdu_XF947WdNkAJXSNq8noEhM9rq_83JN6Lzl9Xbw89yifEIUrC59ZOheYVivZPlpQ7yy_nAYJ9P6m9I9BtZh5myh8yg0tfEuZssQeYkajaolsECBOBGXy2GqRpPa2lD70=w72-h72-p-k-no-nu'/> </a> </div> <div class='item-title'><a href='http://www.righto.com/2014/09/mining-bitcoin-with-pencil-and-paper.html'>Mining Bitcoin with pencil and paper: 0.67 hashes per day</a></div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-thumbnail-only'> <div class='item-thumbnail'> <a href='http://www.righto.com/2024/08/pentium-navajo-fairchild-shiprock.html' target='_blank'> <img alt='' border='0' src='https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_shpbecY6UVAbZxhZqNoDdWA1vgP7yRSyb23z5W6Cl5ipPE2PHTUCJlPij25VhHCa9ccSNXbjahIAUL4lZHBtTr854TMy0B6UskxySVO-41byM-ahmQnBuA4Na8p3yVNGN6Dfcl=w72-h72-p-k-no-nu'/> </a> </div> <div class='item-title'><a href='http://www.righto.com/2024/08/pentium-navajo-fairchild-shiprock.html'>The Pentium as a Navajo weaving</a></div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-thumbnail-only'> <div class='item-thumbnail'> <a href='http://www.righto.com/2013/06/teardown-and-exploration-of-magsafe.html' target='_blank'> <img alt='' border='0' src='https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_sIks_Mr_d0_V_CFgc6ITXBtGQIrZgGvNtAcHWRwSN6EA7FvZxebrHYQEIRsqzgD-LwXTlm-BprVNafb9pXMwex_6nrKvkDaBNfqAgDxfpcAPw_W-5mRtCuLcQwu7QB87OB_tZ6RlGUk6-inY0=w72-h72-p-k-no-nu'/> </a> </div> <div class='item-title'><a href='http://www.righto.com/2013/06/teardown-and-exploration-of-magsafe.html'>Teardown and exploration of Apple's Magsafe connector</a></div> </div> <div style='clear: both;'></div> </li> <li> <div class='item-thumbnail-only'> <div class='item-thumbnail'> <a href='http://www.righto.com/2023/01/inside-globus-ink-mechanical-navigation.html' target='_blank'> <img alt='' border='0' src='https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_ttbE3Hso2g6yRkRt2KTVueDiF_VOAr0W0OG8Pl1VyoZzpB-eseF45JHEnWZkQ6XzQ1uCrax_ZVmAQCB-rGq2W5cXjGVLUwi08CaHEBE_4TIL2iyLyPaY2IIe0cp3qD9abb2gA=w72-h72-p-k-no-nu'/> </a> </div> <div class='item-title'><a href='http://www.righto.com/2023/01/inside-globus-ink-mechanical-navigation.html'>Inside the Globus INK: a mechanical navigation computer for Soviet spaceflight</a></div> </div> <div style='clear: both;'></div> </li> </ul> <div class='clear'></div> </div> </div><div class='widget BlogSearch' data-version='1' id='BlogSearch1'> <h2 class='title'>Search This Blog</h2> <div class='widget-content'> <div id='BlogSearch1_form'> <form action='http://www.righto.com/search' class='gsc-search-box' target='_top'> <table cellpadding='0' cellspacing='0' class='gsc-search-box'> <tbody> <tr> <td class='gsc-input'> <input autocomplete='off' class='gsc-input' name='q' size='10' title='search' type='text' value=''/> </td> <td class='gsc-search-button'> <input class='gsc-search-button' title='search' type='submit' value='Search'/> </td> </tr> </tbody> </table> </form> </div> </div> <div class='clear'></div> </div><div class='widget Label' data-version='1' id='Label1'> <h2>Labels</h2> <div class='widget-content cloud-label-widget-content'> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/386'>386</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/6502'>6502</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/8008'>8008</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/8085'>8085</a> </span> <span class='label-size label-size-4'> <a dir='ltr' href='http://www.righto.com/search/label/8086'>8086</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/8087'>8087</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/8088'>8088</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/aerospace'>aerospace</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/alto'>alto</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/analog'>analog</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/Apollo'>Apollo</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/apple'>apple</a> </span> <span class='label-size label-size-4'> <a dir='ltr' href='http://www.righto.com/search/label/arc'>arc</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/arduino'>arduino</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/arm'>arm</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/beaglebone'>beaglebone</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/bitcoin'>bitcoin</a> </span> <span class='label-size label-size-1'> <a dir='ltr' href='http://www.righto.com/search/label/c%23'>c#</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/cadc'>cadc</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/calculator'>calculator</a> </span> <span class='label-size label-size-4'> <a dir='ltr' href='http://www.righto.com/search/label/chips'>chips</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/css'>css</a> </span> <span class='label-size label-size-1'> <a dir='ltr' href='http://www.righto.com/search/label/datapoint'>datapoint</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/dx7'>dx7</a> </span> <span class='label-size label-size-5'> <a dir='ltr' href='http://www.righto.com/search/label/electronics'>electronics</a> </span> <span class='label-size label-size-1'> <a dir='ltr' href='http://www.righto.com/search/label/f%23'>f#</a> </span> <span class='label-size label-size-1'> <a dir='ltr' href='http://www.righto.com/search/label/fairchild'>fairchild</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/fpga'>fpga</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/fractals'>fractals</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/genome'>genome</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/globus'>globus</a> </span> <span class='label-size label-size-1'> <a dir='ltr' href='http://www.righto.com/search/label/haskell'>haskell</a> </span> <span class='label-size label-size-1'> <a dir='ltr' href='http://www.righto.com/search/label/HP'>HP</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/html5'>html5</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/ibm'>ibm</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/ibm1401'>ibm1401</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/ibm360'>ibm360</a> </span> <span class='label-size label-size-4'> <a dir='ltr' href='http://www.righto.com/search/label/intel'>intel</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/ipv6'>ipv6</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/ir'>ir</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/java'>java</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/javascript'>javascript</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/math'>math</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/microcode'>microcode</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/oscilloscope'>oscilloscope</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/Pentium'>Pentium</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/photo'>photo</a> </span> <span class='label-size label-size-4'> <a dir='ltr' href='http://www.righto.com/search/label/power%20supply'>power supply</a> </span> <span class='label-size label-size-4'> <a dir='ltr' href='http://www.righto.com/search/label/random'>random</a> </span> <span class='label-size label-size-5'> <a dir='ltr' href='http://www.righto.com/search/label/reverse-engineering'>reverse-engineering</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/sheevaplug'>sheevaplug</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/snark'>snark</a> </span> <span class='label-size label-size-3'> <a dir='ltr' href='http://www.righto.com/search/label/space'>space</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/spanish'>spanish</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/synth'>synth</a> </span> <span class='label-size label-size-4'> <a dir='ltr' href='http://www.righto.com/search/label/teardown'>teardown</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/theory'>theory</a> </span> <span class='label-size label-size-1'> <a dir='ltr' href='http://www.righto.com/search/label/unicode'>unicode</a> </span> <span class='label-size label-size-2'> <a dir='ltr' href='http://www.righto.com/search/label/Z-80'>Z-80</a> </span> <div class='clear'></div> </div> </div><div class='widget BlogArchive' data-version='1' id='BlogArchive1'> <h2>Blog Archive</h2> <div class='widget-content'> <div id='ArchiveList'> <div id='BlogArchive1_ArchiveList'> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/'> 2024 </a> <span class='post-count' dir='ltr'>(20)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/11/'> November </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/10/'> October </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/09/'> September </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/08/'> August </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/07/'> July </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/06/'> June </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/02/'> February </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2024/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/'> 2023 </a> <span class='post-count' dir='ltr'>(35)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/12/'> December </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/11/'> November </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/09/'> September </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/08/'> August </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/07/'> July </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/03/'> March </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/02/'> February </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2023/01/'> January </a> <span class='post-count' dir='ltr'>(8)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/'> 2022 </a> <span class='post-count' dir='ltr'>(18)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/11/'> November </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/06/'> June </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/04/'> April </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/02/'> February </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2022/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/'> 2021 </a> <span class='post-count' dir='ltr'>(26)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/12/'> December </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/11/'> November </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/09/'> September </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/07/'> July </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/06/'> June </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/03/'> March </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/02/'> February </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2021/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/'> 2020 </a> <span class='post-count' dir='ltr'>(33)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/11/'> November </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/10/'> October </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/09/'> September </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/08/'> August </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/07/'> July </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/06/'> June </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/05/'> May </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/03/'> March </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2020/01/'> January </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/'> 2019 </a> <span class='post-count' dir='ltr'>(18)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/11/'> November </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/10/'> October </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/09/'> September </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/07/'> July </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/02/'> February </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2019/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <a class='toggle' href='javascript:void(0)'> <span class='zippy toggle-open'> &#9660;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/'> 2018 </a> <span class='post-count' dir='ltr'>(17)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/12/'> December </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/09/'> September </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/06/'> June </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/03/'> March </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/02/'> February </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <a class='toggle' href='javascript:void(0)'> <span class='zippy toggle-open'> &#9660;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2018/01/'> January </a> <span class='post-count' dir='ltr'>(4)</span> <ul class='posts'> <li><a href='http://www.righto.com/2018/01/ibm-mainframe-tube-module-part-ii.html'>IBM mainframe tube module part II: Powering up and...</a></li> <li><a href='http://www.righto.com/2018/01/xerox-altos-3-mbs-ethernet-building.html'>Xerox Alto&#39;s 3 Mb/s Ethernet: Building a gateway w...</a></li> <li><a href='http://www.righto.com/2018/01/examining-1954-ibm-mainframes-pluggable.html'>An 8-tube module from a 1954 IBM mainframe examine...</a></li> <li><a href='http://www.righto.com/2018/01/xerox-alto-zero-day-cracking-disk.html'>Xerox Alto zero-day: cracking disk password protec...</a></li> </ul> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/'> 2017 </a> <span class='post-count' dir='ltr'>(21)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/12/'> December </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/11/'> November </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/07/'> July </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/06/'> June </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/04/'> April </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/02/'> February </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2017/01/'> January </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/'> 2016 </a> <span class='post-count' dir='ltr'>(34)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/10/'> October </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/09/'> September </a> <span class='post-count' dir='ltr'>(8)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/08/'> August </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/07/'> July </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/06/'> June </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/03/'> March </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/02/'> February </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2016/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2015/'> 2015 </a> <span class='post-count' dir='ltr'>(12)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2015/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2015/11/'> November </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2015/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2015/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2015/05/'> May </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2015/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2015/02/'> February </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2014/'> 2014 </a> <span class='post-count' dir='ltr'>(13)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2014/12/'> December </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2014/10/'> October </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2014/09/'> September </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2014/05/'> May </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2014/03/'> March </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2014/02/'> February </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/'> 2013 </a> <span class='post-count' dir='ltr'>(24)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/11/'> November </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/09/'> September </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/08/'> August </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/07/'> July </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/06/'> June </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/03/'> March </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/02/'> February </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2013/01/'> January </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2012/'> 2012 </a> <span class='post-count' dir='ltr'>(10)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2012/12/'> December </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2012/11/'> November </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2012/10/'> October </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2012/05/'> May </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2012/03/'> March </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2012/02/'> February </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2011/'> 2011 </a> <span class='post-count' dir='ltr'>(11)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2011/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2011/07/'> July </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2011/05/'> May </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2011/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2011/03/'> March </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2011/02/'> February </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/'> 2010 </a> <span class='post-count' dir='ltr'>(22)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/11/'> November </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/10/'> October </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/08/'> August </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/06/'> June </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/05/'> May </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/04/'> April </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/03/'> March </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2010/01/'> January </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/'> 2009 </a> <span class='post-count' dir='ltr'>(22)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/12/'> December </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/11/'> November </a> <span class='post-count' dir='ltr'>(5)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/09/'> September </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/08/'> August </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/07/'> July </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/06/'> June </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/04/'> April </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/03/'> March </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/02/'> February </a> <span class='post-count' dir='ltr'>(2)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2009/01/'> January </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2008/'> 2008 </a> <span class='post-count' dir='ltr'>(27)</span> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2008/07/'> July </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2008/06/'> June </a> <span class='post-count' dir='ltr'>(1)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2008/05/'> May </a> <span class='post-count' dir='ltr'>(3)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2008/04/'> April </a> <span class='post-count' dir='ltr'>(4)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2008/03/'> March </a> <span class='post-count' dir='ltr'>(10)</span> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <a class='toggle' href='javascript:void(0)'> <span class='zippy'> &#9658;&#160; </span> </a> <a class='post-count-link' href='http://www.righto.com/2008/02/'> February </a> <span class='post-count' dir='ltr'>(6)</span> </li> </ul> </li> </ul> </div> </div> <div class='clear'></div> </div> </div></div> </aside> </div> </div> </div> <div style='clear: both'></div> <!-- columns --> </div> <!-- main --> </div> </div> <div class='main-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> <footer> <div class='footer-outer'> <div class='footer-cap-top cap-top'> <div class='cap-left'></div> <div class='cap-right'></div> </div> <div class='fauxborder-left footer-fauxborder-left'> <div class='fauxborder-right footer-fauxborder-right'></div> <div class='region-inner footer-inner'> <div class='foot no-items section' id='footer-1'></div> <table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'> <tbody> <tr> <td class='first columns-cell'> <div class='foot no-items section' id='footer-2-1'></div> </td> <td class='columns-cell'> <div class='foot no-items section' id='footer-2-2'></div> </td> </tr> </tbody> </table> <!-- outside of the include in order to lock Attribution widget --> <div class='foot section' id='footer-3'><div class='widget Attribution' data-version='1' id='Attribution1'> <div class='widget-content' style='text-align: center;'> Powered by <a href='https://www.blogger.com' target='_blank'>Blogger</a>. </div> <div class='clear'></div> </div></div> </div> </div> <div class='footer-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </footer> <!-- content --> </div> </div> <div class='content-cap-bottom cap-bottom'> <div class='cap-left'></div> <div class='cap-right'></div> </div> </div> </div> <script type='text/javascript'> window.setTimeout(function() { document.body.className = document.body.className.replace('loading', ''); }, 10); </script> <script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/984859869-widgets.js"></script> <script type='text/javascript'> window['__wavt'] = 'AOuZoY7ENRaQ7_sXZ15eeesWyRtoHNqG6g:1732753997953';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d6264947694886887540','//www.righto.com/2018/01/','6264947694886887540'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '6264947694886887540', 'title': 'Ken Shirriff\x27s blog', 'url': 'http://www.righto.com/2018/01/', 'canonicalUrl': 'http://www.righto.com/2018/01/', 'homepageUrl': 'http://www.righto.com/', 'searchUrl': 'http://www.righto.com/search', 'canonicalHomepageUrl': 'http://www.righto.com/', 'blogspotFaviconUrl': 'http://www.righto.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': true, 'httpsEnabled': false, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': 'UA-3782444-1', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Ken Shirriff\x26#39;s blog - Atom\x22 href\x3d\x22http://www.righto.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Ken Shirriff\x26#39;s blog - RSS\x22 href\x3d\x22http://www.righto.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Ken Shirriff\x26#39;s blog - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/6264947694886887540/posts/default\x22 /\x3e\n', 'meTag': '', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/2fafd358a4bcb2b4', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'archive', 'pageName': 'January 2018', 'pageTitle': 'Ken Shirriff\x27s blog: January 2018'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard!', 'ok': 'Ok', 'postLink': 'Post Link'}}, {'name': 'template', 'data': {'name': 'custom', 'localizedName': 'Custom', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': true}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'Ken Shirriff\x27s blog', 'description': 'Computer history, restoring vintage computers, IC reverse engineering, and whatever', 'url': 'http://www.righto.com/2018/01/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': false, 'isArchive': true, 'isLabelSearch': false, 'archive': {'year': 2018, 'month': 1, 'rangeMessage': 'Showing posts from January, 2018'}}}]); _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML2', 'sidebar-right-1', document.getElementById('HTML2'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML3', 'sidebar-right-1', document.getElementById('HTML3'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_PopularPostsView', new _WidgetInfo('PopularPosts1', 'sidebar-right-1', document.getElementById('PopularPosts1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogSearchView', new _WidgetInfo('BlogSearch1', 'sidebar-right-1', document.getElementById('BlogSearch1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_LabelView', new _WidgetInfo('Label1', 'sidebar-right-1', document.getElementById('Label1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar-right-1', document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading\x26hellip;'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', document.getElementById('Attribution1'), {}, 'displayModeFull')); </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10