Ok, Here's a quick rundown.

First we need the pinout for the next mouse:

Next Mouse Connector:

6 7 8
3 4 5
1 2

6: Right Button 7: Left Button 8: GND
3: XB 4: YA 5: YB
1: +5V 2: XA

I chose to use an arduino for the uC. There is an existing PS/2 library located here:

http://playground.arduino.cc/ComponentLib/Ps2mouse

It's an older library, but still works fine with the newest IDE. When you are installing the lib, make sure you edit 'ps2.h' and replace "WProgram.h" with "Arduino.h". Other than that is should just work.

For more details on the PS/2 spec have a look here:
http://www.computer-engineering.org/ps2mouse/

The code is pretty simple. I started with the example code and then got simple movement working. I then found a completed code for a mac 512K here:
http://www.youtube.com/watch?v=KVvPGAEj-Zw

He was also using the same library so it was trivial to adapt his code to the Next based on what I already had found. Full Arduino code:

#include <ps2.h>

#define PIN_HORIZ_A 5
#define PIN_HORIZ_B 4
#define PIN_VERT_A 3
#define PIN_VERT_B 2
#define PIN_BUTTON_1 1
#define PIN_BUTTON_2 0
#define PIN_BUTTON_3 0

#define PIN_LED 13

#define PIN_REAL_MOUSE_CLK 9
#define PIN_REAL_MOUSE_DTA 10

const uint8_t QuadratureEncoding[4] =
{
0b00,
0b01,
0b11,
0b10
};

PS2 realMouse(PIN_REAL_MOUSE_CLK, PIN_REAL_MOUSE_DTA);

uint8_t g_horizQuadStep = 0;
uint8_t g_vertQuadStep = 0;

void writeVerticalQuadratureOutputs();
void writeHorizontalQuadratureOutputs();

void mouseInit()
{
realMouse.write(0xff); // RST
digitalWrite(PIN_LED, LOW);
realMouse.read();
realMouse.read();
realMouse.read();
realMouse.write(0xf0); // Remote.
realMouse.read();
delayMicroseconds(100);
}

void setup()
{
pinMode(PIN_HORIZ_A, OUTPUT);
pinMode(PIN_HORIZ_B, OUTPUT);
pinMode(PIN_VERT_A, OUTPUT);
pinMode(PIN_VERT_B, OUTPUT);
pinMode(PIN_BUTTON_1, OUTPUT);
pinMode(PIN_BUTTON_2, OUTPUT);
pinMode(PIN_BUTTON_3, OUTPUT);
pinMode(PIN_LED, OUTPUT);

delay(100);

cli(); // Disable interrupts, they interfere with our timing.

digitalWrite(PIN_LED, HIGH);
mouseInit();
digitalWrite(PIN_LED, LOW);
}

void loop()
{
char mstat;
char mx;
char my;
boolean goingRight;
boolean goingDown;

realMouse.write(0xeb);
realMouse.read();
mstat = realMouse.read();
mx = realMouse.read();
my = realMouse.read();

goingRight = mx > 0;
goingDown = my > 0;
mx = abs(mx);
my = abs(my);

while (mx > 0)
{
g_horizQuadStep += goingRight ? 1 : -1;
writeHorizontalQuadratureOutputs();
delayMicroseconds(100);
mx --;
}

while (my > 0)
{
g_vertQuadStep += goingDown ? 1 : -1;
writeVerticalQuadratureOutputs();
delayMicroseconds(100);
my --;
digitalWrite(PIN_LED, 0);
}

digitalWrite(PIN_BUTTON_1, !(mstat & 0x01));
digitalWrite(PIN_BUTTON_2, !(mstat & 0x02));
digitalWrite(PIN_BUTTON_3, !(mstat & 0x04));


digitalWrite(PIN_LED, mstat & 0b11);
}

void writeHorizontalQuadratureOutputs()
{
uint8_t quadEncoding = QuadratureEncoding[g_horizQuadStep % 4];
digitalWrite(PIN_HORIZ_A, quadEncoding & 1);
digitalWrite(PIN_HORIZ_B, quadEncoding>>1 & 1);
}

void writeVerticalQuadratureOutputs()
{
uint8_t quadEncoding = QuadratureEncoding[g_vertQuadStep % 4];
digitalWrite(PIN_VERT_A, quadEncoding & 1);
digitalWrite(PIN_VERT_B, quadEncoding>>1 & 1);
}

Note that the pin mapping is at the top of the file. Currently this is mapped to an ATMega8. In my case I have the cheaper model which only has a 4mhz internal oscillator. This is not sufficient. I ended up using an external 12mhz crystal and it gives perfect tracking results. So after the program is loaded to the uC just connect each uC pin to the corresponding 8 pin DIN connection. It's really as simple as that.