Archives

Plus Too is a working hardware replica of the Macintosh Plus and Macintosh 512Ke computers. The project’s goal is to recreate these classic computers using modern electronic components, producing a stand-alone machine able to run period Macintosh software from the mid-1980’s. It is similar in concept to the Minimig Amiga recreation and the Replica 1 recreation of the Apple I.

Video output is 1024 x 768 VGA. The Mac’s 512 x 342 screen is pixel doubled to fit the VGA width, which leaves some extra space below the Mac screen region to display hardware debugging information. A standard PS/2 mouse and keyboard are used for I/O. Floppy disk images are planned to be loaded from an SD card, and the current implementation stores a single disk image in ROM. The CPU runs at 8.125 MHz, slightly faster than a real Mac. The current implementation has 512K of RAM.

The original Macs contained a Motorolla 68000 CPU and about half a dozen major support chips, with all of the Mac-specific behaviors and OS routines defined in a 128K toolbox ROM. Plus Too uses an FPGA to model the Mac’s IWM (floppy controller), SCC (serial ports), VIA (general purpose I/O), mouse, and keyboard hardware. The toolbox ROM data was copied from my real Mac Plus (nicknamed “Lonely”) for use with Plus Too.

To correctly model a Macintosh floppy disk, the disk image must be encoded into a series of virtual tracks and sectors, with the proper low-level layout, header, footer, checksum, and GCR disk byte format. This encoding is planned to be performed on the fly by a microcontroller. The current implementation performs the encoding offline, using a custom-made utility program, and the encoded result is stored in ROM.

Status

The current implementation of Plus Too is built using a commercial Altera DE1 FPGA development board. The 68000 CPU is a soft-CPU module within the FPGA. This implementation is capable of booting from a single System 6.0.8 floppy disk image stored in ROM, and running programs from the disk. It exhibits some stability problems, and implements only the absolute minimum of hardware necessary to boot the computer. The disk is read-only, and there is no keyboard, sound, SCSI, serial ports, or real-time clock.

The next version of Plus Too will use a custom-designed circuit board instead of the Altera DE1 kit. The revised Plus Too will use a real 68000 CPU, and will add a microcontroller for the floppy disk SD card interface. It will also add the physical connectors necessary to use a real Mac Plus mouse and keyboard if desired, while eliminating all the extra parts from the DE1 board that are unnecessary for Plus Too. RAM will be increased to 4 MB. The goal is to design a board that is as simple and inexpensive as possible, so that other people can build their own if they wish.

Thanks

Plus Too draws on previous work by many other people. The FPGA models for the Mac Plus mouse and SCC are from an earlier Mac-in-an-FPGA project by Ben Herrenschmidt. Gaining a detailed understanding of the Mac hardware internals was greatly aided by examining the source code for the MESS Mac Plus emulator and Mini vMac emulator. The FDisasm tool was used to generate a commented disassemply of the toolbox ROM routines, which was a tremendous help.

[…] out the Plus Too over on the ‘Big Mess o’ Wires‘ site – it’s a hardware replica of a […]

Britt Dodd December 4th, 2011
8:01 pm

Based on what you have done thus far, do you think it would be feasible to create something similar to recreate the Apple IIGS? I have aspirations to create something like this, and I know that the Altera board you use would have by far more power than would be required for the IIGS. I know that the IIGS CPU has already been virtualized for the FPGA, and I’m hoping that sometime I could use the IWM code to jumpstart my development.

I don’t see any reason why a IIGS replica couldn’t be built in a similar way, although I’ve never personally looked at the Apple II hardware in detail. Yes, the IWM part should be nearly identical between the IIGS and the Mac, I think. You’re welcome to use my code for that if you’d like.

Britt Dodd December 6th, 2011
7:40 pm

I’d like to discuss this at your convenience as I would definitely like to help out here if possible. My C skills are alright, but they could use some work, and helping set this up would sharpen my skills. I didn’t see a source link on your page. Are you hosting this on google code or something?

Eventually I’ll have it here or Google Code, but it’s not really ready for other contributions yet. The code’s still a big pile of half-finished ideas that only partly work.

Tom Mahoney December 6th, 2011
9:27 pm

How far do you plan to go as far as feature completeness is concerned? For example, do you intend to implement SCSI, sound and other peripheral interfaces? What about things like the ADB? I’m following this with keen interest with a view to making a classic Mac ‘laptop’

sound – Yes
SCSI – Unsure, it will probably be just a floppy initially, but SCSI is a possibility.
ADB – No, since the Mac Plus and earlier computers didn’t use ADB. I believe I’ve seen a couple of recent ADB emulator projects if you need that, though.

Britt Dodd December 7th, 2011
12:11 pm

Steve, I was wondering about code only so I could purchase a altera dev board and get it running with the code you have, even if its in binary form.

I understand about not yet letting code out there, but I just wanted to use something like this in its functional form, then take a look at the guts of the code to see how things work. This would definitely be getting waist-deep in altera soft-core programming, even if It’s just download code, compile and upload kinda thing.

Even this much functionality is amazing, and I’d love to get this setup for myself.

Jamie Stotz December 30th, 2011
8:31 pm

I’m pretty sure that holding down the mouse button on startup is supposed to eject the disk. There was no exposed eject button on any Mac, ever. You could however use a straightened paper clip in an emergency.

Bob January 1st, 2012
8:02 pm

I have been wanting to do this project for a while now. I have a lot of information that might be helpful. My plans were to implement a custom component that would replace the floppy controller with an sd or usb host. This would bypass all the problems of the disk incompatibilities because it would be working on the bit level. I found schematics of the mac 128k/512k as well as the notes for reverse engineering all the PAL chips. Another good source was the original Byte review of the Mac, it has a surprising amount of technical detail. I also looked at the mac 68k linux project. They have a lot of technical information about the Mac plus that includes interfacing with the hardware. It could be a good place to find out how to replace components with updated versions.

MacDoogie January 10th, 2012
11:22 am

Awesome project, I have a similar project in mind, but with a different concept: I plan to use the original ASICs and construct a multi-apple platform consisting of an Apple IIe, Macintosh Classic, and a beefed up LC575(WIth 40MHz CPU). Even though I will utilize the original ASICs for the most part, this will not simply be a re-layout of the existing designs. I want to utilize high speed muxes to allow for shared resources(But not simultaneous operation of the platdorms). At boot up time you will select which machine you want from a boot picker and also select floppy and hard drive images from removable compact flash cards. There will probably be two slots – one to hold virtual SCSI hard drive images, and one to hold virtual floppy images with a catalog of volume names. The drive emu will be quick and dirty, so there will likely be wasted space as 1.44MB floppy images will start on even 2M boundarys and such. Some of the extra space will hold meta data for the boot picker catalog etc. The whole thing will go into a modern+retro inspired milled aluminum and glass enclosure with a modest sized LCD (10×7 13″-15″) Some custom silicon will be required(read FPGAs), but using the existing ASICs will speed up development time as it would take years to reverse engineer the existing ASICs and I want the machine to be reliably stable and usable. I’ll be starting a blog when the project starts proper a few months from now.

Only discovered your website a few days ago when a friend alerted me to it! Nice work! I’ve done a few micro implementations, including C64 and TRS-80 using raw disk formats. The former were converted on-the-fly from D64->G64 by an embedded micro, the latter was pre-formatted and stored in flash (like you’re doing).

Your project has given me the impetus to give the Mac a go; I’ve been thinking about doing it for quite some time. It won’t be as accurate as yours, just enough to get something running. For example, I’m using dual-port video ram, so no RAM arbitration required.

Tonight I just managed to get 24KB of video RAM (initialised from a screen dump from MESS ($1A000-$1FFFF)), displaying on VGA (800×600). Can see the mouse pointer and the ‘question’ disk…

Hmmm… I’ve added the TG68 core, 64KB ROM and 32KB RAM. Added a quick hack for cold-start vectors, and I can see it’s executing the ROM as expected. Added VBLANK, 1Hz signals and wired to the 6522 PIA (taken from the FPGA64 project IIRC). Same hacks as you for IWM and auto-vectors (I no idea how the latter are supposed to work, BTW).

No changes on the video. No interrupts generated by the PIA.

About to start tracing the execution. Any caveats with only 32KB RAM? It’s aliased over the whole 128KB space – could that cause problems?

I’ve been thinking about adding debug capability to a few soft cores for a while now. For your TG68 breakpoints, did you simply gate the CPU clock-enable with a comparator on the address bus? Or did you use other (and/or internal?) signals from TG68 to qualify the halt condition? eg. AS?

Ian April 25th, 2012
5:58 pm

This is an amazing project! I can’t wait to see where it goes from here!

Tobia Tesan July 10th, 2012
1:55 am

Dude, this is awesome.
This is even more awesome than the Minimig.
I want one.

I hope you put in a built in monitor. It would be cool to make it look a little bit like the original Mac 512k.

Too bad you can’t buy some cheap mice and keyboards and mod them to be wireless replicas of the original ones xD.

Benjamin Herrenschmidt August 23rd, 2012
2:49 am

About SCSI, I have that going in minimigmac, feel free to borrow it since you already have the mouse & kbd It uses the PIC of the minimig board to emulate the SCSI commands and does some HW handshaking to ensure no bytes are lost even in “Blind” mode since I cannot quite reproduce good enough timings from the uC talking to the SD-CARD to make the old Mac+ drivers happy. In the end that makes it more reliable than the real Mac+ SCSI.

The main problem of course is that the Mac ROM loads the SCSI disk driver from the SCSI disk itself, and the Apple Installer (at least the orignal ones) only recognizes a handful of specific disks so you have to either mimmic one of these or hack the driver on the disk.

I started at some point writing a replacement / free SCSI disk driver (I used to know how to do that about 20 yrs ago) in m68k asm but eventually decided I had better uses of my time

roglio September 29th, 2012
10:14 am

Hi, I own a DE1, could you please share the binaries of this awesome project?