Skip navigation

Seth Morabito ∴ A Weblog

MMU Caching for Fun and Profit

Saturday, March 18 2017 at 6:37 PM PDT

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 chest. And that is, how in the hell does the MMU cache work?

So first, a little background.

An Ode to the Cruxen

Sunday, December 18 2016 at 1:51 PM PST

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 couldn't get to unless you were at a big research company or a reasonably well endowed University. I lived at Mary Donlon Hall, one of two dorm buildings that had recently been wired with Ethernet and therefore offered its residents a mainline into the addictive world of the Internet.

Fiber Optic Bliss

Tuesday, August 4 2015 at 1:34 PM PDT


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.

The WATs of JavaScript

Monday, June 29 2015 at 2:28 PM PDT

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 JavaScript, so I wanted to dive further into these WATs and talk about why they happen.

I'm not here to defend JavaScript — it doesn't need my defense. It's not a perfect language, and it's not my favorite language, but it is the single most popular language on the web right now, and because more and more people are using it for the first time, I think it's worth the effort to go over some of these unexpected behaviors to help newcomers avoid common pitfalls.

But first, the WATs.

The WATs

> [] == []
> [] == ![]
> [] + []
> [] - []
> [ null, undefined, [] ] == ',,'
> [] + {}
'[object Object]'
> {} + []
> Math.min() < Math.max()
> 10.8 / 100


Do You Want To Build an FPGA? Part Two

Sunday, April 5 2015 at 3:33 PM PDT

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.

Rural Cable Expectations

Saturday, March 28 2015 at 1:05 PM PDT

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 criticisms I've seen goes something like this: /“Well, you moved to a rural area, what did you expect? Even though Comcast said it was serviced, you share some of the blame for even expecting cable out there. You should have known better!”/

Well, I disagree pretty strongly with this criticism. Let me tell you why.

Do You Want To Build an FPGA? Part One

Sunday, March 15 2015 at 4:37 PM PDT

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!


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 affordable is the BeMicro product line from Arrow and Altera, with kits starting at $30 and going all the way up to $149.

I recently bought the BeMicro CV package to play around with. The BeMicro CV is a nifty little $50 FPGA development board with an Altera Cyclone V FPGA, 128MB of on-board SDRAM, and 2MB of Flash memory. It's also got a two push-buttons, three DIP-switches, and a MicroSD card slot available for your projects to use. I think it's an ideal platform to get your feet wet in the world of FPGA development. But after you get your BeMicro CV out of the box, what do you do with it to get started?

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

Sunday, February 22 2015 at 2:30 PM PST

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. After moving in, and only after a month of confusion and miscommunication, we discovered the truth: There's no Comcast service on our street.


Late last year we bought a house in Kitsap County, Washington — the first house I've ever owned, actually. I work remotely full time as a software developer, so my core concern was having good, solid, fast broadband available. In Kitsap County, that's pretty much limited to Comcast, so finding a place with Comcast already installed was number one on our priority list.

We found just such a place. It met all of our criteria, and more. It had a lovely secluded view of trees, a nice kitchen, and a great home office with a separate entrance. After we called (twice!) to verify that Comcast was available, we made an offer.

The 1993 Social Network

Monday, October 13 2014 at 10:42 AM PDT

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, but very shortly I was drinking from the UNIX firehose.

Retrochallenge: The Final Entry

Wednesday, July 30 2014 at 8:18 PM PDT

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 BASIC.

State of the Retrochallenge

Friday, July 25 2014 at 6:52 PM PDT

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 and sorting my RL02 packs. That, needless to say, is not going to happen. Instead, I'm going to concentrate on polishing up and documenting my monitor this weekend. Whatever I have ready to go next week will just have to be good enough. It won't be as fully-featured as I originally wanted, but at least it's something, and at least it works.

I have to pick my remaining features pretty carefully now. I want to enhance the Deposit and Examine commands to add syntax that will allow auto-incrementing the address, and then work on tying my monitor into EhBASIC, so I can run it on my home-brew 6502 after Retrochallenge is over.

It's a race to the finish, now. Expect an update from me on Sunday or Monday. Until then, I'm face down in the code!

Parsing and Tokenizing

Thursday, July 10 2014 at 1:29 PM PDT

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:


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. For example, numbers do not need to be zero-padded on entry. You should be able to type E 1F and have the monitor know you mean E 001F, or D 2FF 1A and know that you mean D 02FF 1A.

I wanted whitespace between tokens to be ignored. Typing "E 1FF" should be the same as typing "E    1FF "

And finally, I wanted to support multiple forms of commands with the same tokenizing code. The Examine command can take either one or two 16-bit addresses as arguments—for example, E 100 1FF should dump all memory contents from 0100 to 01FF. But the Deposit command takes one 16-bit address and between one and sixteen 8-bit values, for example D 1234 1A 2B 3C to deposit three bytes starting at address 1234.