\ Bit bang a line on the parallel port to create a serial stream \ Dave Jaffe 02/22/2002 : it ; hex \ define parallel ports 378 constant (lpt1) 278 constant (lpt2) variable lpt \ choose port to use : lpt1 (lpt1) lpt ! ; : lpt2 (lpt2) lpt ! ; \ output to data0 bit : 0p 0 lpt @ pc! ; : 1p 1 lpt @ pc! ; decimal : btest ( char - ) cr \ msb first is WRONG 8 0 do dup 128 and 0= if 0 else 1 then . space 2* loop drop ; variable vdelay : delay ( n - ) vdelay @ 0 do loop ; : ptest ( char - ) 8 0 do dup 1 and lpt @ pc! 2/ delay loop drop ; : (key-test) ( char - ) \ lsb first is CORRECT 0p delay \ start bit ptest \ send a character 1p delay ; \ stop bits : key-test 1660 vdelay ! lpt1 cls begin key case 27 of 1 endof \ esc ascii > of 1 vdelay +! 0 endof \ increase delay ascii < of -1 vdelay +! 0 endof \ decrease delay dup emit dup (key-test) endcase case 0 of vdelay @ 1 max vdelay ! \ make sure vdelay > 0 cr vdelay ? 0 endof \ change delay 1 of 1 endof \ esc drop 0 endcase until ; : key-test2 ( n - ) vdelay ! lpt1 ascii z ascii A do i (key-test) loop ; \ Tests on Dell laptop: \ vdelay = 830 for 19200 baud : baud ( baud-rate - ) 830 19200 rot */ vdelay ! ;