( Software for IsoPod RMD Sep 12, 2002 ) SCRUB ( **************************************************************** ( I/O PORTS ( ( I/O Ports Assign Function ( ~~~ ~~~~~ ~~~~~~~~~~~~~~~ ( I/O PB0 LCD, DB0 ( I/O PB1 LCD, DB1 ( I/O PB2 LCD, DB2 ( I/O PB3 LCD, DB3 ( I/O PB4 LCD, DB4 ( I/O PB5 LCD, DB5 ( I/O PB6 LCD, DB6 ( I/O PB7 LCD, DB7 ( O PA4 LCD, RS (register select. LOW: command, HIGH: data) ( O PA5 LCD, R/W (READ: signal high, WRITE: signal low) ( O PA6 LCD, E (chip enable, active high) ( **************************************************************** HEX ( ==== Tools ==== ) : LCD8@ ( -- d ) 00 FC2 ! ( data in ) PA5 ON ( RD high PA6 ON ( E high enable chip FC1 @ ( read data bus ) PA6 OFF ( E low disable chip ; EEWORD : LCD8! ( d -- ) FF FC2 ! ( data out ) PA5 OFF ( WR low FC1 ! ( output data ) PA6 ON ( E high enable chip PA6 OFF ( E low disable chip ; EEWORD : CMD> ( -- d ) PA4 OFF LCD8@ ; EEWORD : LCD> ( -- d ) PA4 ON LCD8@ ; EEWORD : WNB ( -- ) BEGIN CMD> 80 AND 0= ?TERMINAL OR UNTIL ; EEWORD : >CMD ( d -- ) PA4 OFF LCD8! WNB ; EEWORD : >LCD ( d -- ) PA4 ON LCD8! WNB ; EEWORD : LCD-INIT ( -- ) 3F FB1 ! ( outputs high for R/W.A5 RS.A4 D7.A3,D6.A2,D5.A1,D4.A0) ( low for E.A6 7F FB2 ! ( DDR outputs for E.A6 R/W.A5 RS.A4 D7.A3,D6.A2,D5.A1,D4.A0) 0 FB3 ! ( release all port A lines from PER ) FF FC1 ! ( outputs high FF FC2 ! ( DDR outputs 0 FC3 ! ( release all port B lines from PER ) 38 >CMD ( reset sequence for 38 >CMD ( EIGHT bit interface 6 >CMD ( entry mode set: increment; no shift F >CMD ( display on; cursor on; blink on 1 >CMD ( display clear 80 >CMD ( cursor in top left position ; EEWORD : CLEAR WNB 1 >CMD ; EEWORD : HOME WNB 2 >CMD ; EEWORD : CRHM WNB 80 >CMD ; EEWORD : CRLF WNB C0 >CMD ; EEWORD : MOVE-CURSOR WNB 80 OR >CMD ; EEWORD : RIGHT-UPPER-CORNER 27 MOVE-CURSOR ; EEWORD : CURSOR? WNB CMD> 7F AND ; EEWORD : LCD>L WNB 10 >CMD CURSOR? 27 > IF RIGHT-UPPER-CORNER THEN ; EEWORD : LCD>R WNB 14 >CMD CURSOR? 27 > IF HOME THEN ; EEWORD : LCD-EMIT WNB >LCD ; EEWORD : LCD-SPACE BL LCD-EMIT ; EEWORD : LCD-SPACES 0 MAX BEGIN ?DUP WHILE 1- LCD-SPACE REPEAT ; EEWORD : LCD-TYPE BEGIN DUP 0= NOT WHILE 1- SWAP DUP @ LCD-EMIT 1+ SWAP REPEAT 2DROP ; EEWORD : LCD-PTYPE BEGIN DUP 0= NOT WHILE 1- SWAP DUP P@ LCD-EMIT 1+ SWAP REPEAT 2DROP ; EEWORD : D.RLCD ( d \ n -- ) >R SWAP OVER DABS <# #S SIGN #> R> OVER - LCD-SPACES LCD-TYPE ; EEWORD : .LCD ( n -- ) DUP ABS 0 <# #S SIGN #> LCD-TYPE ; EEWORD : $>P ; EEWORD $>P S1$ This is a sample ( ***16**LONG*** EEWORD $>P S2$ Make string here ( ***16**LONG*** EEWORD : TEST1 S1$ PCOUNT LCD-PTYPE CRLF S2$ PCOUNT LCD-PTYPE ; EEWORD HERE 20 ALLOT CONSTANT S3$ ( STRING SPACE IN RAM HERE 20 ALLOT CONSTANT S4$ ( STRING SPACE IN RAM : TEST2 ." Type in a string to store in S3$ RAM now:" S3$ 10 EXPECT CR ." Type in a string to store in S4$ RAM now:" S4$ 10 EXPECT CR CLEAR HOME S3$ 10 LCD-TYPE CRLF S4$ 10 LCD-TYPE ; EEWORD LCD-INIT TEST1 TEST2