<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Site-Server v@build.version@ (http://www.squarespace.com) on Mon, 04 May 2026 21:29:39 GMT
--><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://www.rssboard.org/media-rss" version="2.0"><channel><title>Blog - nboyko</title><link>https://www.nboyko.com/blog/</link><lastBuildDate>Fri, 13 Feb 2026 20:00:34 +0000</lastBuildDate><language>en-US</language><generator>Site-Server v@build.version@ (http://www.squarespace.com)</generator><description><![CDATA[]]></description><item><title>Embracing Curiousity and Parsing 40-Year-Old Soviet Digital Imagery</title><dc:creator>Nicholas Boyko</dc:creator><pubDate>Wed, 31 Dec 2025 05:52:26 +0000</pubDate><link>https://www.nboyko.com/blog/halleys-vega</link><guid isPermaLink="false">5dba10ca2327b91c70b331c3:5dba14dad1cf0a191c354934:6954b14c7f23af11955eb19b</guid><description><![CDATA[<p class="">Halley’s Comet is likely the most well-known comet, and possibly the most well-known astronomical object that isn’t a star, planet, or moon. As many reading this will know it arrives and is visible from Earth once every 76 years. The last time it arrived, a group of countries worked together to form a ‘flotilla’ of space probes and perform a lot of science and observations of the comet.</p><p class="">A week or so ago, I happened to remember this, and in particular that the last two Soviet probes to Venus both happened to go to the comet as part of this effort. The notable thing to me from the Wikipedia page and others about these probes is that they both carried a television camera with them, and had imaged the comet with this camera.&nbsp;</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png" data-image-dimensions="1001x153" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png?format=1000w" width="1001" height="153" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ca0892ae-a84f-4e1d-83ea-a4d1381db0a4/Screenshot+2025-12-31+001551.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Image of Wikipedia</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">I’ve never seen this footage online, and I have never seen a video of a comet, so I figured that I’d spend an evening or two putting this together from the data.</p><p class="">The data itself is (are?) located on an arcane University of Maryland-hosted NASA site, called the Small Body Node. <a href="https://pds-smallbodies.astro.umd.edu/data_sb/missions/ihw/index.shtml"><span>https://pds-smallbodies.astro.umd.edu/data_sb/missions/ihw/index.shtml</span></a>. From the site and from some of the supporting documentation, it is clear that many scientists spent much of the 80s and 90s going through this data, cleaning it up, and writing about it. I wasn’t really concerned with science though - I just wanted a video of a comet.</p><p class="">I downloaded the data and cracked open the archive. Inside each instrument’s dataset are a set of folders organized however they felt like leaving it when uploaded in 1995. For Vega 2, the data are organized by what post-processing has been applied. To start, I used the data in the main folder.</p><p class="">The images here had (and still have) a .img file extension. Opening the .lbl or .hdr metadata files didn’t really help me out with figuring out how to open the images for viewing, but they would be useful later. Some googling told me that the images should either be in Erdas Imagine format or from an obscure old Windows competitor called GEM.</p><p class="">I’m familiar with Erdas from my university days, so I cracked open my copy of SAGA GIS and attempted to import the files as this format.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png" data-image-dimensions="592x254" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png?format=1000w" width="592" height="254" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/07c0f07a-a11f-4eee-bebf-c32dfac3b718/Screenshot+2025-12-31+001757.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Image of SAGA GIS, showing a failure message</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">No dice.</p><p class="">Next, I installed DOSBOX-X to give me a good DOS platform to work from, and installed GEM onto it. GEM is an interesting OS for the weird cross between Windows 3.0 and Macintosh it looks like. It’s got the ever-present file menu/desktop view that Windows 3 has, but the menu bar feel of Mac. I might have to revisit it in the future.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png" data-image-dimensions="639x352" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png?format=1000w" width="639" height="352" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aaaaa2ee-b916-4f9a-a310-2f13931d34c8/Screenshot+2025-12-31+001951.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Image of the GEM desktop</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">GEM really didn’t like .img files. Loading one into GEM Paint locked up the system bad enough to need a full reboot regardless of how I tried to do it.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png" data-image-dimensions="637x350" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png?format=1000w" width="637" height="350" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/20c15a2d-333d-492c-ad1f-b868fcbbcc89/Screenshot+2025-12-31+002059.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">The last thing I could think of was that the documentation included in the files mentioned that this was supposed to be in FITS format. As I learned while writing this blog post, FITS is an image format allowing for the wide variety of wavelengths and supporting data that astronomical imagery needs. I googled FITS format reading, and found that both GIMP and Python (through the Astropy package) should support it. Opening in GIMP did nothing, and neither did Astropy - many dead ends here.</p><p class="">So, it seemed that this wasn’t going to be as easy as I hoped and I was going to have to parse this myself. Luckily, the header/label files I mentioned earlier could help out. The label file told me that the image data was stored as 8-bit integer data, using most-significant bit encoding, and with a 128-length line.&nbsp;</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png" data-image-dimensions="642x407" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png?format=1000w" width="642" height="407" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3acba997-855c-408c-9508-619b726e718d/Screenshot+2025-12-31+002147.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Image of the label file</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">Using a hex editor, I verified that there was nothing that looked like a header in the data itself, and wrote a script to parse out lines of 128 integers from each image, and write those lines as image data to frames of a GIF to see if this really was a television recording. Note that the images here are provided at original 128px by 128px size, except where they were “big” (my name, the actual files aren’t differentiated) 512px images.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif" data-image-dimensions="128x136" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif?format=1000w" width="128" height="136" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2b02617f-564e-4358-a85c-923f308cfde0/vega1.gif?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">Now that I had a script that worked, I looked around the various folders included in the dump. There are a number of versions included, but the “post” version is the most interesting (IMO). This contains a set of smaller and larger files, with the larger files being higher resolution, and all of them having notably higher quality than the rest of the dataset. Since this is just the footage they got after the closest approach, I can only assume that they took the most time to get the exposure right.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif" data-image-dimensions="128x136" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif?format=1000w" width="128" height="136" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/71188a6a-ec71-47ad-b16c-ce32c387f8a6/vega1-extended.gif?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Longer, post-encounter GIF</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">Most of the images were taken about 30 seconds apart, so the probe recorded more of a timelapse than it did a realtime broadcast. There are some larger gaps here and there, so I made another script (included in the Github) that adds extra frames to scale the animation accordingly.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif" data-image-dimensions="128x136" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif?format=1000w" width="128" height="136" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/7a5b061a-2537-4341-b208-191462da5c74/out_RT.gif?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Full set of images. Countdown is to encounter time, in seconds.</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">I also found the frame from Vega 2 that tends to make it to any articles about the Vega spacecraft. This frame was cleaned up by Abergel, J. et al as part of their 1997 article.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png" data-image-dimensions="774x570" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png?format=1000w" width="774" height="570" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/e642d475-ec64-4ba0-b508-27bb08da4e4b/20181218_vega2.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">The original (or at least the version still around in the data looks like this:</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png" data-image-dimensions="512x518" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png?format=1000w" width="512" height="518" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa1fdbdc-e581-45fe-9188-8943efd824cf/0.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">And a “smoothed” version is also provided. I rotated it to match the version usually provided online.:</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png" data-image-dimensions="518x512" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png?format=1000w" width="518" height="512" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ed72b383-999f-4d5d-89be-3e6fb2e71493/1.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">The most striking thing to me about all of these images was how cool it is to see what seems to be a flyby of the comet, and also how little exists about this. It seems to me that this animation (or a further retouched version) should be the first thing that anyone sees of Halley’s Comet, but as far as I can tell it has never been shared in this way.&nbsp;</p><p class="">All I can say is that if you’ve ever seen some kind of weird loose end on some Wikipedia rabbit hole you’re on, you too should track down whatever little source data is hanging around out there and look at it for yourself.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          <a class="
                sqs-block-image-link
                
          
        
              " href="https://www.nboyko.com/s/out_RT.gif" target="_blank"
          >
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif" data-image-dimensions="512x518" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif?format=1000w" width="512" height="518" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/fb0cbaa3-d4bf-442f-8e13-1206ccad4be8/out_RT.gif?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          </a>
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">All “big” images for the entire Vega 1 encounter. Note that there was a ~1000s pause in observations around the 3200s mark.</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">If you want to look at my processed versions, a .zip is available <a href="https://www.nboyko.com/s/vega-images-v1.zip" target="_blank">here</a></p>]]></description><media:content type="image/png" url="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/1767160115961-F3RYQAAF8QIHAQZ97S8P/55.png?format=1500w" medium="image" isDefault="true" width="500" height="411"><media:title type="plain">Embracing Curiousity and Parsing 40-Year-Old Soviet Digital Imagery</media:title></media:content></item><item><title>Rebuilding a 60s Reservation System as a Modern (mostly) Serverless App From the Manual</title><dc:creator>Nicholas Boyko</dc:creator><pubDate>Wed, 12 Nov 2025 01:43:13 +0000</pubDate><link>https://www.nboyko.com/blog/rebuilding-a-60s-reservation-system-as-a-modern-mostly-serverless-app-from-the-manual</link><guid isPermaLink="false">5dba10ca2327b91c70b331c3:5dba14dad1cf0a191c354934:68bb0a7082ded4008e51b7fa</guid><description><![CDATA[<p class=""><em>Note: while I have a good understanding of how the original system was supposed to work thanks to the manual, I lack certainty on a lot of the background and surrounding context. If you know anything about Collins computers or CN computer systems, please </em><a href="https://www.nboyko.com/contact"><em>get in touch!</em></a></p><p class=""><a href="https://eprs.nboyko.com">Try the system for yourself!</a></p><p class="">The CN Electronic Passenger Reservation System was a system used by CN and later Via Rail from April 1, 1967 to 1980. It used a Collins C-8401 computer located in Toronto Union Station and operators at stations across Canada used a combination of a mark-sense reader and a modified Teletype Model 32 teleprinter.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png" data-image-dimensions="851x670" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png?format=1000w" width="851" height="670" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/2bc81b5c-df6b-4570-b7e3-a3df96c03492/Screenshot+2025-11-11+202054.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Image of the mark-sense reader from the EPRS manual. If you know what model or make this is, please <a href="https://www.nboyko.com/contact">get in touch</a>!</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">The system was designed and managed through Canadian National Telegraph and was hosted in their offices in Toronto, while the efforts of the rest of CN to computerize were largely managed in Montreal, as I will surely discuss in future blog posts and publications.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png" data-image-dimensions="730x476" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png?format=1000w" width="730" height="476" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/87b43b41-ea55-4024-a169-14f1cbd9273f/Screenshot+2025-11-11+202450.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Ye olde block diagram</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">I rebuilt the system using the CN manual from Libraries and Archives Canada. I had found the manual while looking through their material related to TRACS and Car Control (if you have any resources on these, please <a href="https://www.nboyko.com/contact">contact me!</a>) and realized that it was a complete enough manual for it to be possible to recreate thanks to a reasonably deep description of both input and output for each operation that the station agents and computer supervisors were expected to perform.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png" data-image-dimensions="589x454" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png?format=1000w" width="589" height="454" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/97b65179-1e48-442a-aa47-66d48ad46e0d/Screenshot+2025-11-11+202831.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">A sample of the depth of the manual.</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">When recreating the functionality, I started with a few assumptions based on systems that came later, leaning heavily on a relational database using SQL to manage the relationships between different data managed by the system. As I’ll describe, each of these had some flaw with them.</p><p class="">The main assumptions I made were:</p><ol data-rte-list="default"><li><p class="">Every leg of a trip existed independently of each other, but had to be validated against an allowed train. Almost every operation described can be done on a subset of stations that each train went to, and there is explicit mention of legs as constraints.</p></li><li><p class="">Every leg had to be tied to a specific allowed route (or edge in a graph) and was only validated through these edges. This one was the most correct, and came from the specification of specific cities that were used. My understanding here was flawed in that the validation was against the edges allowed per train, rather than every train using all allowed edges for legs.</p></li><li><p class="">Every booking made was saved as a specific reservation with a unique identifier. This was a modern assumption based on every system I’ve used today. I expand on this below.</p></li><li><p class="">Alternate trains along a route were directly tied to each other. I assumed this based on the discussion of the cross-continental and multi-destination Super Continental trains in the manual, but the behaviour described is more consistent with the system finding literally any train that goes to the same stations rather than having some alternate train tracking.</p></li></ol><p class="">Taking the booking assumption as an example, here is a relevant section of what the manual says about reservations and what the computer does with them:</p><p class=""><strong>…If the seats are available, the Computer will decrease the inventory over the legs involved by the number of seats requested and reply:</strong></p><p class=""><strong>OK00101 FEB12 040/1045</strong></p><p class=""><strong>The meaning of the reply "FIELDS" is as follows:-</strong></p><p class=""><strong>"OK" - The reservation has been made for the seats, legs and train requested….</strong></p><p class="">Given my modern understanding of reservations, I assumed that each reservation would result in a record added to a table somewhere to track it, and it would be managed at that level.</p><p class="">However, this assumption was disproven in two ways. First, when implementing the cancellation logic, I ended up having to randomly grab reservations from the reservation table to match the behaviour described in the EPRS manual. See:</p><p class=""><strong>Input format:</strong></p><p class=""><strong>MTLAKZ TORMTL 06 06410 045»</strong></p><p class=""><strong>(Cancel six coach seats in car 06410 for Feb. 14).</strong></p><p class="">And also the response:</p><p class=""><strong>Inventory will be adjusted upward, and the reply will be:</strong></p><p class=""><strong>CL06410 FEB14 040/1053</strong></p><p class=""><strong>The meaning of the FIELDS is similar to that of the "RESERVED" reply.</strong></p><p class="">Given that I implemented the reservation system before the cancellation system, it was easy to justify storing that specific reservation rather than a simpler inventory system. But especially by the cancellation formats it became clear that there was no actual tracking of each reservation, and instead only the inventory of seats in each car is tracked.</p><p class="">I further confirmed this in two ways. First, the description of functionality for supervisors to add and decrease inventory expresses this behaviour more plainly:</p><p class=""><strong>THE "ADD" TO INVENTORY COMMAND</strong></p><p class=""><strong>Except for FIELD 1 ("Action" requested) this command is identical in format and activity to the "CANCEL" card. It is provided as a separate card basically for operating convenience,</strong></p><p class=""><strong>THE "DECREASE" INVENTORY COMMAND</strong></p><p class=""><strong>Except for FIELD 1 ("Action" requested) this command is identical in format and activity to the "RESERVE" card.</strong></p><p class="">However, I did not closely read this section until later as I was focused on implementing the core operators’ functionality. By that time, the reservation by specific bookings system was done and can be viewed as a <a href="https://github.com/coneypylon/cnr-reservations-1967/commit/14fd6a8826a9e6d6772cacba31d721fe9fd210a8">long-passed commit</a> on the Git repo for this system.</p><p class="">Once I discovered this mismatch in implementation, I re-worked my implementation to match the descriptions of the manual better. I was also able to confirm this in a second way at the <a href="https://www.cptracks.ca/realrails2025.html" target="_blank">Real Rails convention</a> in Burlington this year where I talked to the fine people at the <a href="https://viahistory.ca/home/" target="_blank">Via Historical Association</a> booth about the system. While talking with them, someone who had travelled in this period and remembered the process in enough detail to provide me some certainty in my understanding joined in on the conversation.</p><p class="">This person had travelled regularly through the 70s from Quebec to Saskatchewan. He remembers clearly that the station agent would use a mark-sense card to check the availability and reserve seats and sleeper cabins (notably not in the manual) for travel. The agent then did the further action of issuing a ticket directly, not involving the EPRS machine.</p><p class="">Finally, I bought a 1966 manual for sales agents at CNR. This manual describes that the agent would use the EPRS machines to check inventory, but was ultimately responsible for writing a ticket manually. As well, it directly confirmed that the computer had no capability to register or otherwise track each customer:</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png" data-image-dimensions="1321x333" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png?format=1000w" width="1321" height="333" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/eb542182-ac0c-4a51-be4f-fef1681f83b6/Screenshot+2025-11-11+201750.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">Another interesting confirmation of my implementation came from an unexpected source: the file sizes involved in my implementation. I ended up with a system that used a ~11MB database. While I don’t have any documentation on how the data were stored for the original system I do know, courtesy of the Computer Society of Canada Census of Digital Computers in Canada of 1967, that the original system had 17.3MB (well, MegaWords, close enough) of storage attached to it. This tells me that I am storing the right magnitude of data and suggests strongly that I was right to remove the extra detail on routing and bookings.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png" data-image-dimensions="1607x40" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png?format=1000w" width="1607" height="40" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/115bedbd-ed64-4222-8c87-93f269be1a07/Screenshot+2025-11-11+203345.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">In order to share this system with others I figured I needed to host it online and point a front end web application at the system. I had been using an AWS EC2 instance to run the Postgres DB and host the development environment for the iPad I was working on this during my cottage vacation. This made an easy core for the tech stack.&nbsp;</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG" data-image-dimensions="1316x919" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG?format=1000w" width="1316" height="919" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/092bd0eb-69e0-442d-94e7-0acc6e398253/IMG_0325.PNG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p data-rte-preserve-empty="true">My very real development environment for the MVP. Shout out to Termius, though I wish I could get rid of the AI prompt at the bottom, given that it was entirely useless for this process.</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">As well I did not want to figure out running an API from an actual (or at least virtual) server given that the majority of my experience is around serverless applications, so I set up the backend to work within an AWS Lambda, and that Lambda would contact the EC2 instance. Finally, I put an API Gateway in front of the Lambda to run the API keys and provide a more seamless experience.</p><p class="">For a front end, I have been hearing developers that work on my products rave about the cross-platform abilities of React, so I figured it was about time to learn at least the basics of it. I made a simple page in React with a lot of help from w3schools and some bug hunting with Gemini. I hosted it on AWS Amplify to round out my all-AWS stack.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png" data-image-dimensions="996x223" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png?format=1000w" width="996" height="223" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/061f9410-0e77-435f-bb6e-cd6b648734e5/EPRS+Overall.drawio.png?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">You can view the finished application<a href="https://eprs.nboyko.com/" target="_blank"> here,</a> the code for the backend is <a href="https://github.com/coneypylon/cnr-reservations-1967" target="_blank">here</a>, and the code for the front end is <a href="https://github.com/coneypylon/eprs-frontend" target="_blank">here</a>. If you have experience with any of the systems that CN used, either freight or passenger, as either a CN employee or as a customer, please<a href="https://www.nboyko.com/contact"> let me know</a>!</p>]]></description><media:content type="image/png" url="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/1762911554076-GOY3OD1V5UQC42X964ML/Screenshot+2025-11-11+203914.png?format=1500w" medium="image" isDefault="true" width="479" height="699"><media:title type="plain">Rebuilding a 60s Reservation System as a Modern (mostly) Serverless App From the Manual</media:title></media:content></item><item><title>Various CNR Paperwork</title><dc:creator>Nicholas Boyko</dc:creator><pubDate>Wed, 09 Oct 2024 17:29:20 +0000</pubDate><link>https://www.nboyko.com/blog/cnforms</link><guid isPermaLink="false">5dba10ca2327b91c70b331c3:5dba14dad1cf0a191c354934:6706b9ce72756a2c3fc79505</guid><description><![CDATA[<p class="">I recently went to the Kitchener Model Train Show, and one of the vendors was selling pads of old CN paperwork. I was intrigued, as nobody seems to have uploaded scans of these, so I bought the lot.</p><p class="">Here are these scans for your convenience should you also be interested in these! <a href="https://www.nboyko.com/s/Scanned-CN-Forms.pdf">Download</a></p><p class="">As well, I digitized the office memo for some fun with friends, so if you want a modern PDF version of that, here it is: <a href="https://www.nboyko.com/s/Inter-Service-Office-Memo.pdf">Download</a></p><p class="">I aspire to eventually upload the rest, but we will see.</p>]]></description><media:content type="image/png" url="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/1728494894732-38YQZ34PMYTCWVFXF2PL/Inter-Service+Office+Memo.png?format=1500w" medium="image" isDefault="true" width="576" height="480"><media:title type="plain">Various CNR Paperwork</media:title></media:content></item><item><title>Fixing a misbehaving Apple IIC floppy drive</title><dc:creator>Nicholas Boyko</dc:creator><pubDate>Fri, 20 Oct 2023 01:23:25 +0000</pubDate><link>https://www.nboyko.com/blog/fixing-a-misbehaving-apple-iic-floppy-drive</link><guid isPermaLink="false">5dba10ca2327b91c70b331c3:5dba14dad1cf0a191c354934:6531d692f4c2752f835dfcd6</guid><description><![CDATA[<p class="">I recently hosted a display table at the third annual <a href="https://www.worldofretrocomputing.com">World of Retro Computing</a> in Kitchener, ON. I displayed my collection of Macintoshes and Mac laptops, arranged as a loose history of Apple computing.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG" data-image-dimensions="2206x1654" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG?format=1000w" width="2206" height="1654" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/3f582a3e-f2b8-4154-8dc4-c66ec325599e/IMG_9450.JPG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">Throughout the first day of the event, I heard (somewhat cheekily) from some of my fellow exhibitors that I was missing the entire Apple II line! While true that I did not have any II’s in my lineup, I thought I had a good excuse - my Apple IIe clone that I have at home had a bad power supply, and besides this was more of a Mac display.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG" data-image-dimensions="2521x3429" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG?format=1000w" width="2521" height="3429" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/0793313b-b6a8-44f5-87e4-b76da73c78a6/IMG_9650.JPG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">Unfortunately, they got to me, and one of them was selling a IIC in good condition with a second IIC for parts included at a reasonable price. So it was that by 4PM, I was the proud owner of an Apple IIC.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG" data-image-dimensions="1240x1654" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG?format=1000w" width="1240" height="1654" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/938fd063-f215-44f6-a82e-1f859349fbf3/IMG_9603.JPG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">The Apple IIC, for the uninitiated, was Apple’s attempt at a portable Apple II. It comes with a carry handle at the back, and is about as small as a computer with an integrated 5.25” floppy drive can be. It was released at roughly the same time as the original Macintosh, and was essentially a IIe with the usual expansion cards (2x serial, disk controller, mouse, printer) permanently installed.</p><p class=""><br></p><p class="">This computer had that, but unreliably. My trouble started when I tried to write some floppies using ADTPro, a solution for passing data from a new computer to an Apple II. While I could often pass the data TO the machine (although not fully reliably), I could not format a floppy disk and save the data to it.&nbsp;</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG" data-image-dimensions="912x777" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG?format=1000w" width="912" height="777" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/aa247daa-4053-4f90-80ab-ae4e52d926e7/IMG_9559.JPG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">So I had two problems:</p><ol data-rte-list="default"><li><p class="">Cannot write floppy disks</p></li><li><p class="">Cannot reliably use serial connection</p></li></ol><p class=""><br><br><br></p><p class="">My next step after ADTPro was to try a FloppyEmu floppy emulator, which I could not get to work correctly, and through stupidly replugging while the computer was on, I fried. The external floppy drive I had plugged in also appeared to be damaged by this mistake.</p><p class=""><br><br><br></p><p class="">So now I had four problems.</p><ol data-rte-list="default"><li><p class="">Cannot write floppy disks from internal drive</p></li><li><p class="">Cannot reliably use serial connection (a known issue for Apple IICs)</p></li><li><p class="">Cannot use external floppy drive</p></li><li><p class="">Cannot use FloppyEmu</p></li></ol><p class=""><br><br><br></p><p class="">Cutting my losses, I asked a friend from the local vintage computing group for some disks to get me started. They gave me some system disks, and a couple copies of MECC Computer Inspector. Running Computer Inspector yielded a report that the disk speed was OK, but the disk was running badly.</p><p class=""><br><br><br></p><p class="">With this piece of information, I identified a few potential fixes I could tackle:</p><ol data-rte-list="default"><li><p class="">Clean the floppy drive</p></li><li><p class="">Swap floppy drive with donor machine</p></li><li><p class="">Rebuild/recap power supply</p></li></ol><p class=""><br><br><br></p><p class="">The easiest fix was to clean the drive, and so I broke out some 99% isopropyl alcohol and cleaned the head on the drive inside the main machine. Some amount of dirt came off, and the drive appeared to work, but after being on for 10 or so minutes, the drive failed to write, and made a loud sound:</p><p data-rte-preserve-empty="true" class=""></p>





















  
  




  
  
    
    
      
        
        
        
          
          
            
        
        
          <iframe allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" scrolling="no" allowfullscreen="true" src="//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2Feuzjc7JTfm8%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Deuzjc7JTfm8&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2Feuzjc7JTfm8%2Fhqdefault.jpg&amp;key=61d05c9d54e8455ea7a9677c366be814&amp;type=text%2Fhtml&amp;schema=youtube" width="854" frameborder="0" title="YouTube embed" class="embedly-embed" height="480"></iframe>
        
        
            
          
        
        
      
    
  




  <p class=""><br></p><p class="">That sound from the drive was somewhat new, so I swapped the donor machine’s drive and the main machine’s internal drive to no success. Finally, I went to the <a href="https://retrocomputing.stackexchange.com/questions/27701/apple-iic-making-grinding-sounds-when-accessing-disks-beyond-normal-clicks">retro computing Stack Exchange</a> so that I could see if I could get some help with diagnosis of the issue.&nbsp;</p><p class=""><br></p><p class="">The kind folks there advised me that this sound was mostly normal, but indicated that the computer was having some trouble with reading data. The computer makes a more rapid sound when a DOS (e.g. ProDOS or DOS 3.3 in this case) is loaded, since these OSes can allow the drive to work faster, in much the same way as programs on other computers of the time (C64 in particular) can have faster disk access speeds with the right software.</p><p class=""><br></p><p class="">Based on my experience with my IIe, I (mostly wrongly) assumed this was a power issue, figuring that if there was insufficient voltage going to the drive during reads, it would fail to read/write, and that the variable timing of the issue was heat-related. I bought a capacitor replacement kit for both the internal power supply and for the motherboard itself.</p><p class=""><br></p><p class="">A quick note on IIC power: what is a single power supply in a standard Apple II, II+, or IIe, is two pieces in the IIC. The IIC has an AC adapter brick that steps down the voltage from mains voltage and rectifies it to DC, feeding a straight 12(ish)V into the computer, which has a small switching power supply inside it that can take anything from 9-20V and turn it into the various voltages required by different parts of the computer. The AC adapter brick (apparently) generally never acts up, although I will blame it for the disk issue in the next paragraph. The internal power supply, where all the electrolytic capacitors are, can occasionally act up, and is easily removed and repaired.</p><p class=""><br></p><p class="">The caps arrived a few days later, and I spent an afternoon swapping all of the capacitors to very limited success. Figuring that maybe the problem came from the AC brick, I pulled out my oscilloscope and hooked it into the machine, across the switch. This resulted in a nice spark, so I swapped to using two probes with the math function to emulate a differential probe and tried again. Whenever the drive activated, there was a pretty significant voltage drop, and the mean voltage was going down the longer the computer was on, although not by much.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG" data-image-dimensions="2118x1071" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG?format=1000w" width="2118" height="1071" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/27cf1d86-842a-4dfe-850b-57f877caab92/IMG_9600.JPG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">The oscilloscope setup. Note that a voltage drop is not currently happening.</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">Still, I thought this was the definite sign of a good diagnosis, and promptly chopped up a thrifted modern AC adapter and a dead AC brick from the donor machine to make a more modern power supply. This did not fix the issue.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG" data-image-dimensions="1240x1654" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG?format=1000w" width="1240" height="1654" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/53c129b4-ecee-40a4-af04-2af510f93499/IMG_9602.JPG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">A “modern” power supply. Heatshrinked connector to old cable in top left.</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class="">It was finally time for me to check the schematics (graciously provided thanks to the Woz back in the 80s) and figure out what else this issue could possibly come from.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg" data-image-dimensions="2193x994" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg?format=1000w" width="2193" height="994" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/be8cd282-c7e7-4025-af7d-cd71d2d95fd3/IMG_0219.jpg?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">The vast majority of the connections from the floppy drive to the computer go directly to one chip: the Integrated Woz Machine (IWM; circled on left above). This chip was made specifically for the Macintosh and the Apple IIC to replace the circuit that was an entire card for previous II models. It manages everything to do with floppy and other drives in the IIC, and does all of the data processing to read and write floppies.</p><p class=""><br></p><p class="">Anyway, I decided to swap the socketed chips (the IOU, ROM, and MMU) with the donor machine. The ROM from the donor machine did not work (probably why it was a parts machine), but the IOU and the MMU appeared to have some positive effect. However, after 20 minutes of running, the drive was still acting up.</p><p class=""><br>Finally, I sucked it up and decided to swap out the IWM. Since it was not socketed, this meant desoldering it from both the donor machine and the main machine. I put on a good podcast and got to work. With the soldering iron set to 320C, the solder came off without too much fuss. I took a lot of cooling breaks to avoid damaging the donor chip, and had to add a bit of solder for stubborn pins.</p><p class=""><br></p><p class="">The previously-installed chip was a different story. Most pins desoldered just fine, but 3 pins in particular were very stubborn. It took a bit of force once all pins were clear, and it turned out one of the pins was digging into the side of the hole, and it ripped up part of a trace. After I soldered on the new socket (to avoid this problem in the future), I checked continuity, and the ripped trace turned out to be a problem. I ended up installing a “bodge wire” on the underside of the motherboard.</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG" data-image-dimensions="2206x1654" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG?format=1000w" width="2206" height="1654" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/105a2187-ebdf-46ec-ba86-41d0ba1b7b2e/IMG_9639.JPG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
          
          <figcaption class="image-caption-wrapper">
            <p class="">Third trace from left on the bottom is heavily damaged. Some amount of solder mask removed by heat and desoldering braid throughout.</p>
          </figcaption>
        
      
        </figure>
      

    
  


  





  <p class=""><br></p><p class="">After all of this, I plugged in the power supply, flipped the switch, and crossed my fingers…</p>





















  
  














































  

    
  
    

      

      
        <figure class="
              sqs-block-image-figure
              intrinsic
            "
        >
          
        
        

        
          
            
          
            
                
                
                
                
                
                
                
                <img data-stretch="false" data-image="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG" data-image-dimensions="999x1164" data-image-focal-point="0.5,0.5" alt="" data-load="false" elementtiming="system-image-block" src="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG?format=1000w" width="999" height="1164" sizes="(max-width: 640px) 100vw, (max-width: 767px) 100vw, 100vw" onload="this.classList.add(&quot;loaded&quot;)" srcset="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG?format=100w 100w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG?format=300w 300w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG?format=500w 500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG?format=750w 750w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG?format=1000w 1000w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG?format=1500w 1500w, https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/ffc132fb-0dbc-4eb5-8478-adcb63f4e5ca/IMG_9649+%281%29.JPG?format=2500w 2500w" loading="lazy" decoding="async" data-loader="sqs">

            
          
        
          
        

        
      
        </figure>
      

    
  


  





  <p class="">It’s alive! The external drive is back to functioning, and a new FloppyEmu is on the way!&nbsp;</p><p data-rte-preserve-empty="true" class=""></p><p class="">In the end, the IWM was to blame for my issues, or at least the loading issue. My suspicion is that there was a small issue there that got a lot worse when I live connected the FloppyEmu, and that nothing was wrong with the PSU or the socketed chips, but I guess I’ll never know for sure!</p><p data-rte-preserve-empty="true" class=""></p><p class="">I hope my misadventures and mistakes are helpful to anyone else with an issue with their Apple IIC’s drive!</p>]]></description><media:content type="image/jpeg" url="https://images.squarespace-cdn.com/content/v1/5dba10ca2327b91c70b331c3/1697768434592-E8ZEH7NGKFZF4CPQB9F9/IMG_9649+%281%29.JPG?format=1500w" medium="image" isDefault="true" width="999" height="1164"><media:title type="plain">Fixing a misbehaving Apple IIC floppy drive</media:title></media:content></item><item><title>Enabling Serial Console on Ubuntu</title><dc:creator>Nicholas Boyko</dc:creator><pubDate>Wed, 11 Jan 2023 19:54:34 +0000</pubDate><link>https://www.nboyko.com/blog/enabling-serial-console-on-ubuntu</link><guid isPermaLink="false">5dba10ca2327b91c70b331c3:5dba14dad1cf0a191c354934:63bf139ab31a7f553b03ed6a</guid><description><![CDATA[<p class="">This is a brief blog post for other people like me (or me from the future when I need to reinstall my distro again) who might want to set up a serial console for their old computers (or for backup connections on a server} on a more modern Linux system.</p><p class="">In my case, I wanted to connect a TRS-80 Model 100 to my laptop, which was running Xubuntu at the time. The most clear guide for this <a href="https://help.ubuntu.com/community/SerialConsoleHowto"><span>was written in 2008</span></a> and was for Ubuntu 6. Needless to say, things have changed since then.</p><p class="">The first thing to do was to make sure the two machines could talk to each other at all. I have them connected via a USB-RS232 DB9 cable, with a null modem connector in the middle, and a DB9-DB25 converter.</p><p class="">In order to get a stable connection with all the text that Ubuntu likes to throw through the terminal, I found that 600 baud was the maximum speed. If you're only sending to the modern computer, 9600 baud works quite nicely.</p><p class="">The connection string for 600 baud is:</p><blockquote><p class="">48n1e</p></blockquote><p class="">Taking this apart, this sets the speed to 4 (600baud), number of bits to 8, parity off, 1 stop bit, and XONXOFF flow control.</p><p class="">To confirm connection on the modern computer, you can use the command screen /dev/ttyUSB0 600, substituting ttyUSB0 for whatever your serial solution is.</p><p class="">With that confirmed, it's time to set up the login session, since it's a lot more fun to use the Model T to act as a real, honest-to-goodness terminal for the supercomputer it's connected to.</p><p class="">There are 4 commands required to set up the TTY console. stty to set the getty up that will give us the actual session, two GRUB-related commands to enable it at boot, and a call to systemctl to start up the getty after.</p><p class="">The stty command I found worked best (based on the article <a href="https://two-oes.medium.com/enable-linux-serial-console-login-ae944bb70263"><span>here</span></a>) was:</p><blockquote><p class="">(sudo) stty -F /dev/ttyUSB0 speed 600 cols 40 rows 13 erase ^H ixon ofdel</p></blockquote><p class="">Essentially, I made the backspace match, set the baud rate, and set the columns and rows, as well as enabled software&nbsp; flow control.</p><p class="">Next is the GRUB config. It's described in more depth <a href="https://two-oes.medium.com/enable-linux-serial-console-login-ae944bb70263"><span>here</span></a>, but essentially you add “console=ttyUSB0” to the end of the “GRUB_CMDLINE_LINUX” string. You can (probably) find your default GRUB config at /etc/sysconfig/grub.</p><p class="">Next, run update-grub to update GRUB.</p><p class="">Finally, use the following to start the getty:</p><blockquote><p class="">(sudo) systemctl start getty@ttyUSB0</p></blockquote><p class="">And that's it! You should now be able to start a terminal session from your terminal when plugged in!</p><p data-rte-preserve-empty="true" class=""></p><p class="">Some extra notes for usability:</p><ul data-rte-list="default"><li><p class="">You probably want to change your bash prompt to something short (“$&gt;” is mine, and the Model 100 will occasionally add more characters)</p></li><li><p class="">Likely, some of the control codes your modern computer will throw at the terminal won't register. I just ignore those, but if you find an easy addition to the stty command (or elsewhere), please let me know!</p></li></ul>]]></description></item></channel></rss>