( Software for IsoPod RMD Sep 12, 2002 ) COLD ( **************************************************************** ( 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 ; : 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 ; : CMD> ( -- d ) PA4 OFF LCD8@ ; : LCD> ( -- d ) PA4 ON LCD8@ ; : WNB ( -- ) BEGIN CMD> 80 AND 0= ?TERMINAL OR UNTIL ; : >CMD ( d -- ) PA4 OFF LCD8! WNB ; : >LCD ( d -- ) PA4 ON LCD8! WNB ; : 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 C >CMD ( display on; cursor off; blink off 1 >CMD ( display clear 80 >CMD ( cursor in top left position ; : CLEAR WNB 1 >CMD ; : HOME WNB 2 >CMD ; : CRLF WNB C0 >CMD ; : MOVE-CURSOR WNB 80 OR >CMD ; : RIGHT-UPPER-CORNER 27 MOVE-CURSOR ; : CURSOR? WNB CMD> 7F AND ; : LCD>L WNB 10 >CMD CURSOR? 27 > IF RIGHT-UPPER-CORNER THEN ; : LCD>R WNB 14 >CMD CURSOR? 27 > IF HOME THEN ; : LCD-EMIT WNB >LCD ; : LCD-SPACE BL LCD-EMIT ; : LCD-SPACES 0 MAX BEGIN ?DUP WHILE 1- LCD-SPACE REPEAT ; : LCD-TYPE BEGIN DUP 0= NOT WHILE 1- SWAP DUP C@ LCD-EMIT 1+ SWAP REPEAT 2DROP ; : .LCD ( n -- ) DUP ABS 0 <# #S SIGN #> LCD-TYPE ; ( ---- Display Test ---- ) VARIABLE SECOND DECIMAL ( display tick on lcd - Any key hit will stop ) : LCD-TICK 50000 PERIOD 0 TCFTICKS ! 0 SECOND ! ISOMAX-START LCD-INIT SECOND @ .LCD BEGIN TCFTICKS @ 100 > IF SECOND 1+! CLEAR SECOND @ .LCD 0 TCFTICKS ! THEN ?TERMINAL UNTIL STOP-TIMER ; LCD-TICK