Tony,
I think Dave's approach is the best way to send response-locked TTL signals.
Strange that your signals are appearing sporadically. Perhaps this is a timing issue - specifically, is it possible the pulses are too short to be detected by whatever device is monitoring them? To check this, try the following modifications:
<port EEGsignal>
/ port = LPT1
/ subport = data
/ items = ("00000001")
/ erase = true("00000000")
</port>
<trial EEGtrial>
/ stimulusframes = [1=somepicture]
/ validresponse = ("a", "b")
/ responsemessage = ("a", EEGsignal, 100)
/ responsemessage = ("b", EEGsignal, 100)
</trial>
Note that I added the /erase command to the <port> definition just to be explicit - by defaut the port should be set to zero when it's erased.
I also changed the duration of the signal to 100 milliseconds rather the 0. If set to 0, the signal is presented for the remainder of the trial, which will actually be 0 ms unless you've set a posttrialpause.
Try these modifications and let me know if that helps.
Regards,
Sean