******************************************	

CLEAR_LCD   EQU     %00000001
LCD_LATCH   EQU     %00010000
FONCTION	EQU     %00101000       


SPACE		EQU     $20
EOT			EQU     $04                     
EOS			EQU     EOT                     
SWI			EQU     $3F
CR			EQU     $0D
LF			EQU     $0A

******************************************	

			ORG		CODE
			
BOUCLE		JSR		TEST_LCD
			BRA		BOUCLE
			
TEST_LCD	JSR		INIT_LCD
			LDX		#MESSAGE		
			JSR		LCD_CHAINE
			RTS	

LCD_CHAINE	LDAB	0,X
			CMPB	#EOT			
			BEQ		FIN_1
			PSHX
			BSR		TEXTE_LCD
			PULX
			INX
			BRA		LCD_CHAINE
FIN_1		RTS
									
******************************************	

TEXTE_LCD	
			CMPB	#LF				; line feed
			BEQ		FIN_2
			CMPB	#$08			; vérifie si backspace
			BNE		SAUT1	
			JSR		back
			BRA		FIN_2
SAUT1		CMPB	#CR
			BNE		SAUT2
			JSR		LINE
			BRA		FIN_2
SAUT2		JSR		WRITE_LCD
FIN_2		RTS
			
******************************************		
	
MESSAGE		FCC		'SALUT PAT'
			FCB		CR
			FCC		'LCD OK'
			FCB		CR
			FCC		'LIGNE3'
			FCB		CR
			FCC		'LIGNE4'
			FCB		EOS
******************************************	
INIT_LCD	JSR		INIT_SPI
			BSET	DDRJ	LCD_LATCH
			BCLR	PORTJ	LCD_LATCH
			JSR		TEMPO_10ms
			JSR		TEMPO_10ms
			BSR		MODE_8
			BSR		MODE_8
			BSR		MODE_8
			LDAB	#%00000010      ; 4 bits 
			BSR		MODE_4
			LDAB	#FONCTION
			JSR		TRANSFERT
			LDAB	#%00001000		; LCD OFF
			JSR		TRANSFERT
			LDAB	#%00001110		; LCD ON
			JSR		TRANSFERT
			JSR		CLS_LCD
			RTS
******************************************	

MODE_8		LDAB	#%11
MODE_4		STAB	LCD_DATA			
			BCLR	LCD_DATA	LCD_RS		
			BSET	LCD_DATA	LCD_E
			LDAB	LCD_DATA
			BSR		SPI_ENVOI
			JSR		TEMPO_10ms
			RTS

******************************************		

SPI_ENVOI	BSR		SAUT3		
			ANDB	#LCD_E_LO
			BSR		SAUT3
			ORB		#LCD_E
			BSR		SAUT3
			RTS
******************************************		

SAUT3		STAB	SP0DR  
	        BRCLR	SP0SR SPIF             ; attente fin de transmission 
        	BSET    PORTJ LCD_LATCH
            JSR     COP_RESET              
	        BCLR    PORTJ LCD_LATCH
			RTS				
			
******************************************		
TRANSFERT	CLRA
			BSR		WRITE_LCD1
			JSR		TEMPO_10ms
			RTS	
******************************************	
WRITE_LCD	LDAA	#LCD_RS
			BSR		WRITE_LCD1
			RTS

******************************************	
WRITE_LCD1 	STAB    LCD_TEMP
        	LSRB
	        LSRB
    	    LSRB
        	LSRB
        	PSHA
        	ABA                             ;SET RS  (HIGH ou LOW)
        	STAA    LCD_DATA                ;MSB 
        	PULA
        	BSET    LCD_DATA LCD_E          ;SET ENABLE HIGH
        	LDAB    LCD_DATA
        	BSR     SPI_ENVOI
	        JSR     TIMER 
    	    LDAB    LCD_TEMP
        	ANDB    #$F                     ;KEEP 4 LSB
        	ABA                             ;SET RS  (HIGH ou LOW)
        	STAA    LCD_DATA                ;LSB 
        	BSET    LCD_DATA LCD_E          ;SET ENABLE HIGH
	        LDAB    LCD_DATA
        	BSR     SPI_ENVOI
	        JSR     TIMER                   
        	RTS
			
******************************************	


CLS_LCD		CLR		linechar					
			CLR		lineno
	        PSHB
       		LDAB    #CLEAR_DISPLAY          ; efface et retour ŕ la ligne
			JSR     TRANSFERT
			LDAB    #ENTRY_MODE
			JSR     TRANSFERT 
			PULB
			RTS

******************************************		
NEW_LINE    PSHA
	        PSHB
        	PSHX
	        CLR     LINECHAR
        	LDAB    LINENO
	        LDX     #DEBUT_LIGNE
        	ABX
	        LDAB    0,X
        	PULX
	        JSR     TRANSFERT                 ;SEND
        	LDAB    #ENTRY_MODE     
	        JSR     TRANSFERT                 ;SEND
	        LDAA    LINENO
        	INCA
	        ANDA    #%11
        	STAA    LINENO
	        PULB
        	PULA
	        RTS
******************************************		
BACK_SP		LDAA    #$10                    
        	JSR     TRANSFERT
        	LDAB    #SPACE                  
        	JSR     WR_LCD
        	LDAA    #$10                    
        	JSR     TRANSFERT
        	LDAB    #SPACE                  
        	DEC     LINECHAR
        	BMI     BACK_SP8
BACK_SP9:
        	RTS
BACK_SP8:
        	CLR     LINECHAR
        	RTS       	
					
******************************************		
				
DEBUT_LIGNE FCB     $C0
        	FCB     $94
        	FCB     $D4
        	FCB     $80			
******************************************		
INIT_SPI	LDAA	#$FF
			STAA	PORTM
			LDAA    #%11110000
        	STAA    DDRM
			LDAA	#%01011000		; CPOL=1	CPHA=0
			STAA	SP0CR1
			LDAA	#%10			; 1MHz
			STAA	SP0BR
			NOP
			LDAA	SP0DR			; dummy data
			RTS

******************************************		
			
TIMER		PSHA
        	PSHX
        	LDX     #116            ;EXECUTE THE FOLLOWING
                                ;116 TIMES
TIMER_2:	DEX                     ;THIS LOOP TAKES 4 CYCLES
        	BNE     TIMER_2         ;OR ABOUT 1 US
        	PULX
        	PULA
        	RTS

******************************************		
        	
TIME1MS STAA    ST_LO
TIMER2:
        LDAA    #C4F
        ORA     TIOS            ;TIMER FOUR SELECT
        STAA    TIOS            ;...AS OUTPUT COMPARE  
        LDD     TCNT
        ADDD    #1*MSEC*PRESCALE
        STD     TC4
        LDAA    #C4F
        STAA    TFLG1

TIMELOOP:
        JSR     COPRESET
        BRCLR   TFLG1 C4F TIMELOOP
        LDAA    #C4F
        STAA    TFLG1
        DEC     ST_LO           ;DEC COUNT ON EACH UNDERFLOW
        BNE     TIMER2          ;EXIT WHEN TIME_COUNT = 0
        RTS

******************************************		      
       
wait1sec:
        bsr     wait400ms
        bsr     wait400ms
        bra     wait200ms
wait400ms:
        bsr     wait200ms
wait200ms:
        bsr     wait100ms
*
*       wait for 100 milliseconds
wait100ms:
        psha
        ldaa    #100
        bsr     time1ms
        pula
        rts
*
*       wait for 10 milliseconds
******************************************		

wait10ms:
        psha
        ldaa    #10
        bsr     time1ms
        pula
        rts
******************************************		

wait1ms:
        psha
        ldaa    #1
        bsr     time1ms
        pula
        rts			
			
******************************************	
					
			END
			
******************************************	
			