http://minyos.its.rmit.edu.au/~s9906768/pic/proj_ti.html

http://www.ticalc.org

http://sami.ticalc.org/ PIC <--> TI Calc interfacing for the mac

http://gtktilink.ticalc.org

http://wmoore.tsx.org/

All TI calculators have two open-drain lines. There is a method under Fargo to access each line individually for input and output (see "lowlevel.txt"), but in most cases where byte-transfers are needed, TI's built-in link routines are simple and effective to use. The protocol used by these routines will be described here:

When the lines are not active they are high. You should remember that if an end of an open-drain line is pulled-down (connected to the ground) by a device, all devices that are attached to that line (including the device that pulled the line down) will read a low signal even if they are trying to pull the line up.

We will assume that Calculator1 (C1) want to send a byte to Calculator2 (C2). The lines will be refered by L1 and L2. In the text "10" means L1 high and L2 low, and "01" means L1 low and L2 high.

This will be repeated 8 times in order to transfer a bit.

This protocol used by TI on their calculators, is an effective protocol. But in most cases you do not need to go through those details when programming, since everything is made by the built-in ROM routines. To learn more on the byte level protocol, look at \doc\ti-prot.txt

'PBASIC code for the STAMP to display data from a TI-83 from Jack [goflo at pacbell.net]
'  Connector: Red = Gnd, Purple = Pin0, White-Green = Pin1

dirs = %00000000
pins = %00000000

symbol BitCount = B1

Init:    if pin0 = 0 and pin1 = 0 then Init
         pause 2000                     ' pause to connect Link

Start:   BitCount = 0
         B0 = 0

Loop:    if pin0 = 1 and pin1 = 1 then Loop
         if pin0 = 0 then TLow

RLow:    low 0
         branch BitCount,(R0,R1,R2,R3,R4,R5,R6,R7)
R0:      bit0 = 1 : goto Rloop
R1:      bit1 = 1 : goto Rloop
R2:      bit2 = 1 : goto Rloop
R3:      bit3 = 1 : goto Rloop
R4:      bit4 = 1 : goto Rloop
R5:      bit5 = 1 : goto Rloop
R6:      bit6 = 1 : goto Rloop
R7:      bit7 = 1
Rloop:   if pin1 = 0 then Rloop
         BitCount = BitCount + 1
         input 0
         if BitCount = 8 then Display
         goto Loop

TLow:    low 1
Tloop:   if pin0 = 0 then Tloop
         BitCount = BitCount + 1
         input 1
         if BitCount = 8 then Display
         goto Loop

Display: debug B0
         goto Start