; -*-asm-*- include(`common.m4') BRA r :reset ; RESB NOP i ; IRQ ;; reset stack reset: LDX # ff TXS i ;; Set pins 0-2 on Port A to Output 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 ;; 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 ;; 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 ;; Set DDRAM Address: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 1 A6 A5 A4 A3 A2 A1 A0 LDA # hh(L_DDRAM|0) JSR a :lcd-w-rs0 ;; Write Data: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; D D D D D D D D LDA # 0 JSR a :lcd-w-rs1 ;; Write Data: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; D D D D D D D D LDA # 1 JSR a :lcd-w-rs1 ;; Set CGRAM Address: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 1 AC5 AC4 AC3 AC2 AC1 AC0 LDA # hh(L_CGRAM|0) JSR a :lcd-w-rs0 ;; data is at e000 LDA # 00 STA zp 00 LDA # e0 STA zp 01 ;; 16 LDX # 16 LDY # 0 loop: LDA (zp),y 00 ;; Write Data to CGRAM ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; D D D D D D D D ;; RS:1 RW:0 STA a PORTB JSR a :lcd-w-rs1 INY i DEX i BNE r :loop ;; Display ON/OFF: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 0 0 0 0 D C B ;; (Display, Cursor, Blink) LDA # %00001100 JSR a :lcd-w-rs0 ;; Set CGRAM Address ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 1 AC5 AC4 AC3 AC2 AC1 AC0 loop2: LDA # hh(L_CGRAM|9) JSR a :lcd-w-rs0 ;; Write Data to CGRAM ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; D D D D D D D D LDA # %00110 JSR a :lcd-w-rs1 ;; Set CGRAM Address ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 1 AC5 AC4 AC3 AC2 AC1 AC0 LDA # hh(L_CGRAM|9) JSR a :lcd-w-rs0 ;; Write Data to CGRAM ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; D D D D D D D D LDA # %00000 JSR a :lcd-w-rs1 JMP a :loop2 stop: JMP a :stop ;; 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 ;; wait BF 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