PORTB = $6000 PORTA = $6001 DDRB = $6002 DDRA = $6003 E = %10000000 RW = %01000000 RS = %00100000 .org #$f800 reset: ldx #$FF ; initialize call stack to $1FF txs lda #%11111111 ; set output on all pins of PORTB sta DDRB lda #%11100000 ; set output on LCD control pins of PORTA sta DDRA lda #%00111000 ; set 8-bit, 2-line display, 5x8 font jsr lcd_send_command lda #%00001110 ; display on, cursor on, no blink jsr lcd_send_command lda #%00000001 ; clear display jsr lcd_send_command lda #%00000010 ; return home jsr lcd_send_command lda #%00000110 ; set entry mode: increment, no shift jsr lcd_send_command lda #'6' ; data to send jsr lcd_send_data lda #'5' ; data to send jsr lcd_send_data lda #'0' ; data to send jsr lcd_send_data lda #'2' ; data to send jsr lcd_send_data term: jmp term lcd_send_command: sta PORTB lda #$0 ; clear RS/RW/E sta PORTA lda #E ; clear RS/RW, set E, send instruction sta PORTA lda #$0 ; clear RS/RW/E sta PORTA rts lcd_send_data: sta PORTB ; data to send to port B lda #RS ; clear RW, E, set RS for data sta PORTA lda #( E | RS ) ; clear RW, set E/RS, send data sta PORTA lda #RS ; clear RS, E, keep RS sta PORTA rts .org #$fffc .word reset .word $0000