; -*-asm-*- include(`common.m4') BRA r :reset ; RESB NOP i ; IRQ ;; reset stack reset: LDX # ff TXS i ;; Set pins 0-4 on Port A to Output LDA # %00011111 STA a DDRA ;; Display ON/OFF: ;; D7 D6 D5 D4 D3 D2 D1 D0 ;; 0 0 1 1 1 1 1 D ;; LDA # %00111111 JSR a :lcd-w-rs0-c2 LDA # %00111111 JSR a :lcd-w-rs0-c1 JSR a :reset-oled LDA # 0 ; face address STA zp 0 LDX # 1 ; X page _face_page: LDA # %01000000 ; Y address JSR a :lcd-w-rs0-c2 TXA i ORA # %10111000 ; X page JSR a :lcd-w-rs0-c2 TXA i ORA # %10111000 ; X page JSR a :lcd-w-rs0-c1 PHX s LDY # 17 ; Y address LDX zp 0 _face_fill: LDA a,x :_bin_face_start JSR a :lcd-w-rs1-c2 TYA i CLC i ADC # 28 ORA # %01000000 ; Y address JSR a :lcd-w-rs0-c1 LDA a,x :_bin_face_start JSR a :lcd-w-rs1-c1 INX i STX zp 0 DEY i CPY # 0 BPL r :_face_fill ; BGE 0 PLX s INX i CPX # 7 BNE r :_face_page stop: JMP a :stop reset-oled: LDY # 00 LDA # %01000000 ; Y address JSR a :lcd-w-rs0-c2 _next_page: TYA i ORA # %10111000 ; X page JSR a :lcd-w-rs0-c2 TYA i ORA # %10111000 ; X page JSR a :lcd-w-rs0-c1 LDX # 40 _fill_page: LDA # 00 JSR a :lcd-w-rs1-c2 TXA i SEC i SBC # 1 ORA # %01000000 ; Y address JSR a :lcd-w-rs0-c1 LDA # 00 JSR a :lcd-w-rs1-c1 DEX i BNE r :_fill_page INY i CPY # 8 BNE r :_next_page RTS s ;; write "instruction" lcd-w-rs0-c2: JSR a :lcd-wait-c2 STA a PORTB LDA # hh(G_C2) STA a PORTA LDA # hh(G_C2|G_E) STA a PORTA LDA # hh(G_C2) STA a PORTA RTS s lcd-w-rs0-c1: JSR a :lcd-wait-c1 STA a PORTB LDA # hh(G_C1) STA a PORTA LDA # hh(G_C1|G_E) STA a PORTA LDA # hh(G_C1) STA a PORTA RTS s ;; write "data" to lcd lcd-w-rs1-c2: JSR a :lcd-wait-c2 STA a PORTB LDA # hh(G_RS|G_C2) STA a PORTA LDA # hh(G_RS|G_C2|G_E) STA a PORTA LDA # hh(G_RS|G_C2) STA a PORTA RTS s lcd-w-rs1-c1: JSR a :lcd-wait-c1 STA a PORTB LDA # hh(G_RS|G_C1) STA a PORTA LDA # hh(G_RS|G_C1|G_E) STA a PORTA LDA # hh(G_RS|G_C1) STA a PORTA RTS s ;; wait BF lcd-wait-c2: PHA s LDA # %00000000 ;; Set pins 0-7 on Port B to Input STA a DDRB _lcd_wait-c2: LDA # hh(G_RW|G_C2) STA a PORTA LDA # hh(G_RW|G_C2|G_E) STA a PORTA LDA a PORTB AND # %10000000 BNE r :_lcd_wait-c2 LDA # hh(G_RW|G_C2) STA a PORTA LDA # %11111111 ;; Set pins 0-7 on Port B to Output STA a DDRB PLA s RTS s ;; wait BF lcd-wait-c1: PHA s LDA # %00000000 ;; Set pins 0-7 on Port B to Input STA a DDRB _lcd_wait-c1: LDA # hh(G_RW|G_C1) STA a PORTA LDA # hh(G_RW|G_C1|G_E) STA a PORTA LDA a PORTB AND # %10000000 BNE r :_lcd_wait-c1 LDA # hh(G_RW|G_C1) STA a PORTA LDA # %11111111 ;; Set pins 0-7 on Port B to Output STA a DDRB PLA s RTS s