RSSAmplifier

Blog

Loom Communications - A Weblog

loomcom.comRSS feed ↗134 posts

Latest posts

A Bug in the 3B2 Emulator

Well, this is embarrassing. I have discovered a pretty serious bug in the AT&T 3B2 emulator , present since the very first release, and undetected until now. The “TL;DR” version is that the largest hard disk model that the 3B2 emulator offers, a 161 MB Maxtor XT-2190, is not actually supported on a real 3B2 because it has more than 1024 cylinders. This leaves me with a pretty obvious problem: If I…

Now with dark mode

Loomcom now has dark mode! That’s right, if your system preference is for dark mode, there’s a new CSS theme for you. And if you prefer light mode, you get the same old look and feel.

An Open Web

I saw my first web browser in 1993 when a friend called me down to his dorm room to show me a web page that the Vatican museum had put up. I’d been on the Internet for about a year using text-based tools like Telnet, FTP, Gopher, and Usenet, but the world of hypertext was an absolute eye-opener. I remember my first reaction to seeing the World Wide Web being, “Well, Gopher is done for”. It felt…

Nostalgia can be dangerous

A few days ago I turned 50 years old. Coincidentally, I’ve also been playing with a vintage computer that brings me right back to my first real job out of college, when I worked at Silicon Graphics in Mountain View, California, as a contractor. 1996 is getting perilously close to 30 years ago now. It was a much simpler time in my life, of course. I was young, I’d just moved across country, I was…

New Year, New Site

Well, I did it . I have officially moved off of my homebrewed, Emacs-based static site generator and on to an officially supported publishing platform, Zola . At the same time, I’ve created a fresh new minimalist CSS theme that I like a lot. I hope you do too. A few things really appealed to me about Zola. First, it’s written in Rust, a language I’ve become extremely enamoured of. Second, it’s got…

Do I Want To Do This Anymore?

The question in the title refers to my blog, or I suppose more generally to my entire website. I’ve been publishing all of loomcom.com with Emacs for several years now and while I find it to be mostly acceptable, I’m by no means in love with it. There are a few major disadvantages: It’s almost entirely bespoke, meaning that if something goes wrong, I am literally the only person on the planet…

Where Did The Name Loomcom Come From?

Almost every time that I give out my email address and I have to spell loomcom.com, I get a funny look or a little chuckle, like “Wait, seriously? Two coms?” And yeah, to modern ears it sounds pretty funny. Saying it out loud is clunky. Explaining that it’s short for “Loom Communications” helps, but it just adds further clunkiness to the exchange. So, why the heck is it loomcom.com, anyway?…

I Have Left Twitter

I just deleted my Twitter account, and gosh it felt good. 2009–2022 was a good run. If you need me on social media, you can find me very occasionally on Mastodon !

Jacques Vallee on Artificial Intelligence

I was prompted by a Tweet this morning to dig out my copy of Jacques Vallee’s book “The Network Revolution” (And/Or Press, 1982). This passage has haunted me since I first read it: One lesson which I am not likely to forget took place at the RCA research labs in Princeton, where most of the discoveries in color television had occurred. I had been invited to give a talk on information…

Simplifying My Blog

Note: This blog post is no longer accurate, a lot has changed since it was published. It is left here for historical reasons. Over the last couple of days I’ve been busy ripping out a lot of the Emacs lisp code that I orignally wrote to publish my weblog with Emacs and cleaning up the project quite a bit. The most obvious changes are that there’s finally an RSS feed again, and that my weblog is…

Recovery From Burnout

I struggled with whether or not I should make this post because I worry that the topic of burnout is taboo. Admitting that I was burned out and that I had to take time to recover from it feels like admitting a kind of failure or a weakness, but the longer I dwelled on it the more I knew that I had to say something, if for no other reason than because I want to help anyone else who’s suffering from…

It's Been A Minute

Was my last blog entry really in March? Apparently, yes, it was. Forgive me. 2020 has been a strange year. I’m sure you’ll agree. I have been lucky enough to retain a job during the global pandemic, and moreover, the job has been busy as hell. In truth, I haven’t been able to work on personal projects nearly as often as I wish I had been able to. What’s worse, while some people found themselves…

3B2/1000 Simulator Progress Report

It’s now been more than three months since my last post, and I think I owe everyone an update on what I’ve been doing with my life. I’ve been working on the 3B2/1000 simulator for a while now, and at the outset, I decided to try to build a single simulator executable that could be configured as either a 3B2/400 or a 3B2/1000. In hindsight, this was a mistake, but sometimes you can’t…

Here Comes Rev 3

In the long, dark months since September, I have not really done any work at all on my 3B2 emulator. Since it’s Christmas break for me right now, though, I’ve taken up the mantle once again and started hacking away on it with the aim of implementing Revision 3 system board support that will allow the simulator to run as a 3B2/1000 system. There’s actually quite a bit of work involved in…

What's Next for the 3B2 Simulator?

It’s been a minute, hasn’t it! I’d like to talk about the state of the 3B2 Simulator and get everyone up to speed with where we are, and where we’re going. In The Beginning Way back in 2014, I set out on this adventure to build a 3B2/400 simulator because I wanted to play with a 3B2, but I couldn’t find one. Believe it or not, I knew very little about them at first. I eventually picked the…

Could This Be My Next Emulator?

Do you like obscure artificial intelligence workstations from the 1980s? Of course you do! So do I. That’s why, when I found out about the Tektronix 4400 series of workstations, I was immediately smitten. The 4400 series (including the 4404, 4405, and 4406) were Motorola 68010 and 68020 based workstations built to run Smalltalk-80 and Lisp, and were marketed toward the artificial intelligence…

The MAU At Last

After what feels like an inexcusably long time, the WE32106 Math Acceleration Unit (MAU) has been merged into the main SIMH tree, and the 3B2/400 simulator has support for it. This project was one of the most tedious, boring, and yet educational projects I have worked on. Join me now as I recount the harrowing details. In The Beginning Way back in September 2018, almost nine months ago…

Understanding the Network Interface (NI) Card

Ever since I got the AT&T 3B2/400 emulator working well enough to share publicly, I’ve received a lot of requests for it to support the (in-)famous 3B2 Ethernet Network Interface option card, commonly referred to by its EDT name, “NI”. The NI card is based on the Common I/O Hardware (CIO) intelligent peripheral architecture, the same architecture used for the PORTS card and the CTC tape…

Using the DMD Terminal with a 3B2

I’m writing this entry more for myself than for anyone else, because I always forget what a pain this is to get set up properly. The backstory starts with a kernel fault. # TRAP proc = 4022EBEC psw = 1472B pc = 400287BD PANIC: KERNEL MMU FAULT (F_ACCESS) SYSTEM FAILURE: CONSULT YOUR SYSTEM ADMINISTRATION UTILITIES GUIDE This is what happens if you install software out of order on the 3B2/310,…

Emulating the DMD 5620: Take Two

Last month , I wrote about my experience building an emulator for the DMD 5620 computer terminal . Well, I’m going to revisit that, because my approach did not turn out the way I wanted it to. The short version is that my use of ElectronJS to build a fully cross-platform front end did not go quite as smoothly as I’d hoped. It went fairly well on macOS and Windows 10, albeit with performance that…

Emulating the DMD 5620 Terminal

Back in the early 1980s, before GUIs were commonplace, Rob Pike and Bart Locanthi Jr. at AT&T Bell Labs created a bitmapped windowing system for use with UNIX. Originally, they called the system “jerq”, a play on the name of the Three Rivers PERQ computer. When the technology started to get showed around outside of the lab, however, they changed its name to “Blit”, from the name of the “bit blit”…

3B2 Math Acceleration

I recently started on a quest to finish up a loose end on the AT&T 3B2 emulator by finally implementing a simulation of the WE32106 Math Acceleration Unit (MAU). The MAU is an IC that accelerates floating point operations, and it could be fitted onto the 3B2 motherboard as an optional part. I’ve seen quite a few 3B2 systems that didn’t have one; if it’s not present, the 3B2 uses software floating…

Hard Disk Imaging

This weekend’s project was to image all of my AT&T 3B2 hard disks to preserve the bits on them. To do this, I used David Gesswein’s MFM Reader and Emulator board , which allows you to either emulate an MFM hard disk, or read MFM data off of a real hard disk. A nice side effect is that the images you pull off of a hard disk are compatible with my 3B2 Emulator , so once they’ve been read off, you…

More on Emacs Blogging

Note: This blog post is no longer accurate, a lot has changed since it was published. It is left here for historical reasons. After much hacking on elisp, I’m happy to announce two changes: First, I’ve finally implemented pagination on my blog, so the entire nine years of archives isn’t rendered in one huge page. And second, there’s now an RSS feed available at…

Emacs Blogging for Fun and Profit

Note: This blog post is no longer accurate, a lot has changed since it was published. It is left here for historical reasons. You may notice something quite different about this blog if you’ve been here before. The look and feel is different, yes, but it’s more than just skin deep. For the last nine years, I’ve kept my blog in WordPress, a very capable blogging platform. But, starting today, I’ve…

Emulating the AT&T 3B2 Computer

On November 29, 2014, I posted the following message to the Classic Computer Mailing List. Folks, For some reason I got it in my head that writing an AT&T 3B2 emulator might be a good idea. That idea has pretty much been derailed by lack of documentation. I have been unable to find any detailed technical description of any 3B2 systems. Visual inspection of a 3B2 300 main board reveals the…

MMU Caching Finally Explained

Table of Contents I had an absolute breakthrough tonight regarding how the WE32101 MMU handles caching. In fact, when I implemented the change, my simulator went from having 108 page miss errors during kernel boot, to 3 . The cache is getting hit on almost every virtual address translation, and because of what I learned, the code is more efficient, too. The key to all this was finally looking up…

3B2 System Timers and SIMH

I think I made a grievous error when I originally laid out how the 3B2 system timers would work in SIMH, and last night I started down the path of correcting that. The 3B2/400 has multiple sources of clocks and interrupts: There’s a programmable interval timer with three outputs being driven at 100KHz, a timer on the UART that runs at 235KHz, and a Time-of-Day clock. They’re all driven at…

Simulating the Disk Controller

I spent last night probing my 3B2/310’s hard disk controller with a logic analyzer so I can see exactly how it behaves, both with and without a hard disk attached to the system. It proved to be very tricky to get the logic analyzer probes attached because the motherboard is so incredibly dense. In fact, I couldn’t get a probe attached to the chip select line no matter how hard I tried. There…

It's Hard Disk Time

My next mini-project in the 3B2/400 simulator will be emulating the hard disk. The 3B2/400 used a NEC µPD7261A hard disk controller ( PDF datasheet here ), which has proved to be harder to emulate correctly than I would have liked. So far, my hard disk controller emulation has been limited to the most minimal functionality needed to get the emulator to pass self-checks at all. Other than…

The Equipped Device Table Question is Answered

And just like that, it’s solved. I figured out the mystery of the Equipped Device Table . The answer was in some obscure piece of System V Release 3 source code. The 3B2 system board has a 16-bit register called the Control and Status Register (CSR). In the CSR is a bit called named TIMEO that I never figured out. It turns out that I just wasn’t reading the disassembled ROM code closely enough.…

The Mystery of the Equipped Device Table

EDIT: I have made a followup post detailing the answer to this mystery ! There is yet one more puzzling aspect of the 3B2 that I do not yet understand, and that is the equipped device table, or EDT. I’ve documented the nitty-gritty details on my main 3B2 reverse-engineering page , so I won’t bore you with the details. But here’s the short version. The EDT is what tells the system what I/O…

A Last Word on MMU Caching

Over the weekend I conducted several experiments with caching using my 3B2 simulator. I learned a few critical bits of information. For background, see this post and this post . The first and most important thing I learned is that indexing cache entries only by their tags /does not work/. There are collisions galore, and no way to recover from them. However, if I index SD cache entries…

MMU Caching Redux

I had a Eureka! moment last night about MMU caching, but it all came tumbling down this morning. My realization was that the Segment Descriptors are 8 bytes long, and that Page Descriptors are 4 bytes long. So, if we assume that the virtual address encodes the addresses of the SDs and PDs on word-aligned boundaries (and SDs and PDs are indeed word-aligned in memory), then you don’t need the bottom…

MMU Caching for Fun and Profit

I’m in the middle of a very long, very drawn out project to try to emulate the AT&T 3B2/400 computer . I should probably have been sharing my progress more frequently than I have been, but it has for the most part been a painful and solitary endeavor. Today, though, there is something in particular that is bothering me greatly, and I must yell into the void to get this frustration off my…

An Ode to the Cruxen

This is the story of a short time, a quarter century ago, when a little cluster of computers at Cornell University played a very important part in in my life and in the lives of my friends. It was the fall of 1992, and the Internet was growing up. It would still be another year or two before it became a household name, so for the time being it was our little playground, our special place that you…

Fiber Optic Bliss

It’s been a long time since I wrote about my tragic tale of Internet woe I owe you all an update, and I’m very happy to say that at long last, we have broadband. It’s kind of a long story. Back in February when all hell was breaking loose and we were becoming desperate for Internet connectivity, I reached out to the Kitsap Public Utility Commission (KPUD), who were listed as providing fiber optic…

The WATs of JavaScript

At CodeMash 2012, Gary Bernhardt gave a now infamous lightning talk that has become known simply as The WAT Talk , in which he presents several of the more surprising behaviors of Ruby and JavaScript. I’ve passed the video around quite a few times, and I’ve pointed out some other JavaScript behaviors that seem pretty outlandish at first sight. But I’m feeling a little guilty about poking fun at…

Do You Want To Build an FPGA? Part Two

In my last post , I showed you how to download Altera’s Quartus II software and get a new, empty project started for the BeMicro CV platform. This time, we’ll learn how to build a Verilog module and compile it. The Blank Slate We left off looking at a blank slate, an empty project. This is always the most intimidating part of any project. What do we want to do? The next step is to define a…

Rural Cable Expectations

My story kind of hit social media hard this week . To say it caught me off guard is an understatement. I never in a million years expected the response to be so big. I’m just some guy, I don’t particularly enjoy all the attention suddenly paid to my problem. But, that said, I’m grateful for all the support and tips I’ve received, and I’m investigating all connectivity options. One of the frequent…

Do You Want To Build An FPGA? Part One

My internet fiasco aside, I think it’s time I start getting back into some technical matters here on the blog. So welcome to the first in a series of posts about FPGA development! Introduction If, like me, you’ve always wanted to try your hand at programming an FPGA, there’s no time like the present. FPGA kits that are accessible to hobbyists have become affordable and plentiful! One of the most…

It's Comcastic, or: I Accidentally Bought a House Without Cable

UPDATE 1: See the FAQ At The Bottom of This Post UPDATE 2: Be sure to read my follow-up post . Spoiler Alert: It has a happy ending! This is a very long post, but it needs to be long to properly document all the trouble we’ve gone through with Comcast. In short: We moved into our new home in January after verifying that Comcast was available. They said no problem, and we ordered their service.…

The 1993 Social Network

I was a freshman at Cornell University in Fall of 1992 when I logged into my first UNIX system. I’d heard of UNIX before, of course—it was a popular subject in trade magazines of the period, and if you tinkered with computers you’d probably have heard of it—but I’d never actually used it. So one day I marched over to the campus IT department to register for a UNIX account. It took some wrangling,…

Retrochallenge: The Final Entry

Well. Here it is, the final entry for my Summer Retrochallenge project. I wanted to do more, but as so often happens, real life intervened and I didn’t have nearly as much time to work on it as I’d wanted. C’est la vie! But I’m still proud of what I accomplished. I have a working ROM monitor, and I’m happy to report that as a final hurrah, I got it fully integrated with Lee Davison’s Enhanced 6502…

State of the Retrochallenge

As I write this, it’s early on the evening of July 25th, and I’m staring next Thursday’s deadline in the face. I haven’t been able to work on my Retrochallenge entry for over a week, and it’s in poor shape. But am I going to give up? No way. I’m going to go down fighting. My over-enthusiastic early plans called for me to finish up my 6502 ROM monitor so early that I’d have time to work on cleaning…

Parsing and Tokenizing

I’m fairly happy with my parsing and tokenizing code now. I wanted to give a little breakdown of how it works. The over-all goal here is to take a command from the user in the form: C NNNN [(NN)NN [NN NN NN NN NN ... NN]] where C is a command such as “E” for Examine, “D” for Deposit, etc., and store it in memory, tokenized and converted from ASCII to binary. I wanted to give the user flexibility.…

Examining Memory

[Today is kind of a big update, and not all the source code will be presented in-line here in the blog post. As always, you can look at the current source here on my Git repository .] Good news, everyone! After quite a lot of hacking, I can examine memory with my monitor. It’s a very primitive feature, right now: I can only examine one byte at a time, so I can’t dump memory regions yet. But hey,…

Getting Input

I’m moving kind of fast here because I really want to get to the meaty parts of the code, but I want to cover how I’m getting input from the console into the system. As you might expect, it’s all about reading from the ACIA instead of writing to it. Recall the ACIA’s addresses: ;;; ---------------------------------------------------------------------- ;;; IO Addresses ;;;…

Our First Macro

Last night I got string output working. But what if I want to make string output generic? I want to write a STOUT (STring OUT) subroutine that can take the address of any null-terminated string and print it to the console, but there’s a problem: The 6502 is an 8-bit machine, so passing a 16-bit address as an argument takes some wrangling. To get around this, I’ve designated two locations in the…

Talking To The World

Now that I have a skeleton 6502 assembly project set up and building, it’s time to get going and writing some real code for the ROM monitor. But wait, there’s just one more thing I need to get set up, and that’s an emulator so I can test code easily. Without an emulator, I’d have to flash a new ROM image to an EPROM and put it into a real 6502 computer every time I wanted to run it, and debugging…