These are some goold aldl technical links. I think it isn't "standard" uart so the port cannot read it right.
Reading GM's 160 baud ALDL Data Stream with a Standard PC Serial Port
ALDL
I like the idea of using an interrupt, would suggest doing like the guino injector interrupt handling:
int 0 and 1 tied to the input signal just like guino, except maybe with 10k resistor
int 0 is falling interrupt, notes time since last falling interrupt and last rising interrupt, resets timer counter, send the bit out the uart port as a 0 or 1 (or stage the bits to be packed/sent in the main loop)
if the signal was mostly hi, then that indicates a 0, else a 1, baud independant implementation.
int 1 is rising interrupt, notes current timer counter.
hook it up to a laptop and decypher the bitstream in something easier like java for proto-prototype on a laptop