Browse code

Add source code of the ROM

Pawel Jablonski authored on 14/12/2022 19:10:08
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,190 @@
1
+; Author: Pawel Jablonski
2
+; E-mail: pj@xirx.net
3
+; WWW: xirx.net
4
+; GIT: git.xirx.net
5
+;
6
+; License: You can use this code however you like
7
+; but leave information about the original author.
8
+; Code is free for non-commercial and commercial use.
9
+
10
+include io.asm
11
+
12
+; Date and time buffer
13
+var year
14
+var month
15
+var day
16
+var hour
17
+var minute
18
+var second
19
+
20
+; No arguments
21
+; No return
22
+external .xRTCRead:
23
+	push A
24
+	push B
25
+	push X
26
+	push Y
27
+	; Select RT command register
28
+	mov 10, A
29
+	call .xIOSetRegister
30
+	; Write read command for read current date and time from RTC
31
+	mov 0, A
32
+	call .xIOWrite
33
+	; Set address to first field
34
+	mov low(*year), X
35
+	mov high(*year), Y
36
+	; Clear loop counter
37
+	clr B
38
+	; Read loop
39
+.xRTCRead_loop:
40
+	; Select low address register
41
+	mov 2, A
42
+	call .xIOSetRegister
43
+	; Write field number to read
44
+	mov B, A
45
+	call .xIOWrite
46
+	; Select RTC field register
47
+	mov 9, A
48
+	call .xIOSetRegister
49
+	; Read field
50
+	call .xIORead
51
+	; Store field value to memory
52
+	str A
53
+	; Move to next field
54
+	inc X
55
+	incc Y
56
+	; Repeat 5+1 times to read all RTC fields
57
+	loope 5, B, .xRTCRead_loop
58
+	pop Y
59
+	pop X
60
+	pop B
61
+	pop A
62
+	ret
63
+	
64
+; No arguments
65
+; No return
66
+external .xRTCWrite:
67
+	push A
68
+	push B
69
+	push X
70
+	push Y
71
+	; Set address to first field
72
+	mov low(*year), X
73
+	mov high(*year), Y
74
+	; Clear loop counter
75
+	clr B
76
+	; Write loop
77
+.xRTCWrite_loop:
78
+	; Select low address register
79
+	mov 2, A
80
+	call .xIOSetRegister
81
+	; Write field number to write
82
+	mov B, A
83
+	call .xIOWrite
84
+	; Select RTC field register
85
+	mov 9, A
86
+	call .xIOSetRegister
87
+	; Load field value from memory
88
+	ldr A
89
+	; Write field
90
+	call .xIOWrite
91
+	; Move to next field
92
+	inc X
93
+	incc Y
94
+	; Repeat 5+1 times to write all RTC fields
95
+	loope 5, B, .xRTCWrite_loop
96
+	; Select RT command register
97
+	mov 10, A
98
+	call .xIOSetRegister
99
+	; Write write command for write date and time to RTC
100
+	mov 1, A
101
+	call .xIOWrite
102
+	pop Y
103
+	pop X
104
+	pop B
105
+	pop A
106
+	ret
107
+
108
+; No arguments
109
+; Return:
110
+;	A - year
111
+external .xRTCGetYear:
112
+	ldr *year, A
113
+	ret
114
+
115
+; Arguments:
116
+;	A - year
117
+; No return
118
+external .xRTCSetYear:
119
+	str A, *year
120
+	ret
121
+
122
+; No arguments
123
+; Return:
124
+;	A - month
125
+external .xRTCGetMonth:
126
+	ldr *month, A
127
+	ret
128
+
129
+; Arguments:
130
+;	A - month
131
+; No return
132
+external .xRTCSetMonth:
133
+	str A, *month
134
+	ret
135
+
136
+; No arguments
137
+; Return:
138
+;	A - day
139
+external .xRTCGetDay:
140
+	ldr *day, A
141
+	ret
142
+
143
+; Arguments:
144
+;	A - day
145
+; No return
146
+external .xRTCSetDay:
147
+	str A, *day
148
+	ret
149
+
150
+; No arguments
151
+; Return:
152
+;	A - hour
153
+external .xRTCGetHour:
154
+	ldr *hour, A
155
+	ret
156
+
157
+; Arguments:
158
+;	A - hour
159
+; No return
160
+external .xRTCSetHour:
161
+	str A, *hour
162
+	ret
163
+
164
+; No arguments
165
+; Return:
166
+;	A - minute
167
+external .xRTCGetMinute:
168
+	ldr *minute, A
169
+	ret
170
+
171
+; Arguments:
172
+;	A - minute
173
+; No return
174
+external .xRTCSetMinute:
175
+	str A, *minute
176
+	ret
177
+
178
+; No arguments
179
+; Return:
180
+;	A - second
181
+external .xRTCGetSecond:
182
+	ldr *second, A
183
+	ret
184
+
185
+; Arguments:
186
+;	A - second
187
+; No return
188
+external .xRTCSetSecond:
189
+	str A, *second
190
+	ret