View Full Version : MMUs of the PC-AT and 286

October 7th, 2013, 03:48 AM
While doing some "light reading" this morning, I found something interesting on the 8237 Wikipedia page regarding an IC known as "74LS612". I'd never heard of this TTL chip before, so I decided to Google it. I found it is an MMU used in Commodore computers (http://www.baltissen.org/newhtm/74ls612.htm). This (http://www.vintage-computer.com/vcforum/archive/index.php/t-4994.html) thread references that indeed this IC also exists on the AT (and hence why it's mentioned on the 8237 page). Additionally, a link on the 80286 Wikipedia page led to http://en.wikipedia.org/wiki/U80601, which references a third possible MMU for the 286!

Which leads me to ask: Why so many MMUs when the 286 had one that was built-in? What would having an external MMU accomplish other than virtual memory without protection (I'm reasonably assuming that most 286 software was designed to run real mode, which doesn't/shouldn't prohibit virtual memory in and of itself)?

October 7th, 2013, 04:42 AM
In the AT, the 74LS612 seems to be used as a part of the page register for the DMA controllers.

A 286 accelerator I have do use the Intel 8207, but that's probably due to the compact design this card requires. The 8207 provides all signals you'll need for DRAM in a single chip, including timing and refresh controll.

October 7th, 2013, 08:21 AM
There's a bit of confusion in the WikiP article. The Intel 8207 is not an MMU, but a DRAM controller, managing control signal generation and arbitration for things like refresh. Not all 80286 systems used it.

The 74LS670 (PC XT) and 74LS612 (PC AT) both carry out what amounts to the same idea. The 8237 is a holdover from the 8085 8-bit CPU days and can address only 64K (the PC AT shifts the address over by one bit for the 16-bit DMA channels, so you get 128K). The other address bits have to come from somewhere, so the 670/612 takes the DMA channel as an address into either a 4 or 12-bit upper-address bit "page".

The 612 was originally intended as a page mapper for the TMS9900 and is one of a family 610-613 of variations (latched vs. unlatched outputs, three-state vs. OC). It's best characterized as a type of bankswitching for DMA access.

This is nothing new or revolutionary. Back in the day, we used a bipolar RAM to remap the upper address bits of an 8085 to accommodate more memory.

The use of the 8237 for x86 DMA was a kludge by IBM and one that gave us the issue of cross-physical-page DMA errors. Actually, the use of the 8237 and 8254 to perform refresh is also a kludge and not very elegant, as it saps memory bandwidth. My opinion only, of course.