include(`common.m4') ;;; begin lcd_reset ;; Set pins 0-2 on Port A to Output lcd_reset: LDA # %00000111 STA a DDRA ;; Function Set: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 0 1 B L F x x ;; (Bits 8/4, Lines 2/1, Font 5x11/5x8) LDA # %00111000 JSR a :lcd_w_rs0 ;; Clear Display: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 0 0 0 0 0 0 1 LDA # %00000001 JSR a :lcd_w_rs0 ;; Entry Mode Set: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 0 0 0 0 1 I/D S ;; (Increment/Decrement, Shift) LDA # %00000110 JSR a :lcd_w_rs0 ;; Display ON/OFF: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 0 0 0 0 D C B ;; (Display, Cursor, Blink) LDA # %00001110 JSR a :lcd_w_rs0 RTS s ;;; end lcd_reset ;; write "instruction" lcd_w_rs0: JSR a :lcd_wait STA a PORTB LDA # 0 STA a PORTA LDA # hh(L_E) STA a PORTA LDA # 0 STA a PORTA RTS s ;; write "data" to lcd lcd_w_rs1: JSR a :lcd_wait STA a PORTB LDA # hh(L_RS) STA a PORTA LDA # hh(L_RS|L_E) STA a PORTA LDA # hh(L_RS) STA a PORTA RTS s ;;; begin lcd_wait lcd_wait: PHA s LDA # %00000000 ;; Set pins 0-7 on Port B to Input STA a DDRB _lcd_wait: LDA # hh(L_RW) STA a PORTA LDA # hh(L_E|L_RW) STA a PORTA LDA a PORTB AND # %10000000 BNE r :_lcd_wait LDA # hh(L_RW) STA a PORTA LDA # %11111111 ;; Set pins 0-7 on Port B to Output STA a DDRB PLA s RTS s ;;; end lcd_wait