Not quite bar code... but I did something similar quite a while back in 6800 assembly. I had a tape drive (from Exatron, I think). I used a bar code sort of technique to store data on it. A short time between transitions was a mark, a long time was a space. I then just put down standard 8 bit asynchronous data. This was a replacement for the then standard Bell 202 tones on audio cassette. On playback, there was some leading mark codes, then the data. The software determined had a period of time it would use to determine whether the incoming pulse was a mark or a space. Once the pulse was in the appropriate "bin" and the appropriate one or zero output, the pulse duration was used to help determine the tape speed and adjust the transition time between mark and space. Someone else has suggested capturing the barcode to RAM, then figuring it out, instead of trying to do it on the fly. It was pointed out that this could take a bit of RAM. One way to minimize the amount of RAM would be to just store the amount of time since the last barcode edge. These times could then be analyzed after the scan. Harold