summaryrefslogtreecommitdiff
path: root/roms/lcd_with_ram.asm
blob: 7340c7195319cb3d73a8e195cf964e6ab4f4cd98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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