' Program to log data from printer port ' makes D0 go high (for pullup, pin 2) ' reads data from busy line (pin 11) ' note - slower machines might not keep up ' This version for picbot - 20x faster datarate ' Must run in dos, not multitasking! CLS PRINT "Logging data from LPT2..." size = 5000 DIM datalog$(size) dn = 0 'these machine dependent... tc = 15 ' do nothing for-next okL = 20 ' minimum count okH = 30 ' maximum count 'uncomment PRINT count line and pick values that 'surround it close enough to ignore extra data 'outport = &H378 'LPT 1 outport = &H278 'LPT 2 inport = outport + 1 OUT outport, 1 logloop: d = INP(inport) IF d > 127 THEN PRINT "waiting..."; IF d > 127 THEN GOTO logloop waitloop: d = INP(inport) IF INKEY$ <> "" THEN GOTO quit IF d < 128 THEN GOTO waitloop count = 0 timeloop: FOR td = 1 TO tc: NEXT td d = INP(inport) IF d < 128 THEN GOTO startbits count = count + 1 GOTO timeloop startbits: PRINT count ' use to get values for okL and okH IF count < okL OR count > okH THEN GOTO endloop c2 = count / 2 z = 0 FOR t = 1 TO c2 IF z < 0 THEN REM z = z + 1 FOR td = 1 TO tc: NEXT td NEXT t FOR bit = 0 TO 7 FOR t = 1 TO count IF z < 0 THEN REM z = z + 1 FOR td = 1 TO tc: NEXT td NEXT t d = INP(inport) IF d < 128 THEN dat(bit) = 0 ELSE dat(bit) = 1 NEXT bit ' make sure next bit is 1 se = 0 FOR t = 1 TO count IF z < 0 THEN REM z = z + 1 FOR td = 1 TO tc: NEXT td NEXT t d = INP(inport) IF d < 128 THEN PRINT "Error 1!": se = 1 ' and next bit is 0 FOR t = 1 TO count IF z < 0 THEN REM z = z + 1 FOR td = 1 TO tc: NEXT td NEXT t d = INP(inport) IF d > 127 THEN PRINT "Error 0!": se = 1 byte$ = "" FOR bit = 7 TO 0 STEP -1 IF dat(bit) = 1 THEN d$ = "1" ELSE d$ = "0" byte$ = byte$ + d$ NEXT bit PRINT byte$ IF se = 0 THEN dn = dn + 1 IF dn > size THEN GOTO quit datalog$(dn) = byte$ END IF endloop: IF INKEY$ = "" THEN GOTO logloop quit: OPEN "logfile.out" FOR OUTPUT AS #1 FOR i = 1 TO dn PRINT #1, datalog$(i) NEXT i CLOSE #1 SYSTEM