asm-test/graphic-lcd.asm.in

132 lines
3.3 KiB
NASM

include(common.m4)
;;; begin glcd_init
glcd_fill: LDY # 00
LDA # %01000000 ; Y address
JSR a :glcd_w_rs0_c2
LDA # %01000000 ; Y address
JSR a :glcd_w_rs0_c1
_glcd_next_page: TYA i
ORA # %10111000 ; X page
JSR a :glcd_w_rs0_c2
TYA i
ORA # %10111000 ; X page
JSR a :glcd_w_rs0_c1
LDX # 40
_glcd_fill_page: LDA zp 0
JSR a :glcd_w_rs1_c2
LDA zp 0
JSR a :glcd_w_rs1_c1
DEX i
BNE r :_glcd_fill_page
INY i
CPY # 8
BNE r :_glcd_next_page
RTS s
;;; end glcd_init
;; write "instruction"
glcd_w_rs0_c2: JSR a :glcd_wait_c2
STA a VIA0_PORTB
LDA # hh(G_C2)
STA a VIA0_PORTA
LDA # hh(G_C2|G_E)
STA a VIA0_PORTA
LDA # hh(G_C2)
STA a VIA0_PORTA
RTS s
glcd_w_rs0_c1: JSR a :glcd_wait_c1
STA a VIA0_PORTB
LDA # hh(G_C1)
STA a VIA0_PORTA
LDA # hh(G_C1|G_E)
STA a VIA0_PORTA
LDA # hh(G_C1)
STA a VIA0_PORTA
RTS s
;; write "data" to lcd
glcd_w_rs1_c2: JSR a :glcd_wait_c2
STA a VIA0_PORTB
LDA # hh(G_RS|G_C2)
STA a VIA0_PORTA
LDA # hh(G_RS|G_C2|G_E)
STA a VIA0_PORTA
LDA # hh(G_RS|G_C2)
STA a VIA0_PORTA
RTS s
glcd_w_rs1_c1: JSR a :glcd_wait_c1
STA a VIA0_PORTB
LDA # hh(G_RS|G_C1)
STA a VIA0_PORTA
LDA # hh(G_RS|G_C1|G_E)
STA a VIA0_PORTA
LDA # hh(G_RS|G_C1)
STA a VIA0_PORTA
RTS s
;; wait BF
glcd_wait_c2: PHA s
LDA # %00000000 ;; Set pins 0-7 on Port B to Input
STA a VIA0_DDRB
_glcd_wait-c2: LDA # hh(G_RW|G_C2)
STA a VIA0_PORTA
LDA # hh(G_RW|G_C2|G_E)
STA a VIA0_PORTA
LDA a VIA0_PORTB
AND # %10000000
BNE r :_glcd_wait-c2
LDA # hh(G_RW|G_C2)
STA a VIA0_PORTA
LDA # %11111111 ;; Set pins 0-7 on Port B to Output
STA a VIA0_DDRB
PLA s
RTS s
;; wait BF
glcd_wait_c1: PHA s
LDA # %00000000 ;; Set pins 0-7 on Port B to Input
STA a VIA0_DDRB
_glcd_wait-c1: LDA # hh(G_RW|G_C1)
STA a VIA0_PORTA
LDA # hh(G_RW|G_C1|G_E)
STA a VIA0_PORTA
LDA a VIA0_PORTB
AND # %10000000
BNE r :_glcd_wait-c1
LDA # hh(G_RW|G_C1)
STA a VIA0_PORTA
LDA # %11111111 ;; Set pins 0-7 on Port B to Output
STA a VIA0_DDRB
PLA s
RTS s