]> cloudbase.mooo.com Git - avrcpm.git/blame - utils.asm
* Test: change directory hierarchy.
[avrcpm.git] / utils.asm
CommitLineData
bd5af9a5
L
1; Print and Debug functions
2;
3; Copyright (C) 2010 Leo C.
4;
5; This file is part of avrcpm.
6;
7; avrcpm is free software: you can redistribute it and/or modify it
8; under the terms of the GNU General Public License as published by
9; the Free Software Foundation, either version 3 of the License, or
10; (at your option) any later version.
11;
12; avrcpm is distributed in the hope that it will be useful,
13; but WITHOUT ANY WARRANTY; without even the implied warranty of
14; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15; GNU General Public License for more details.
16;
17; You should have received a copy of the GNU General Public License
18; along with avrcpm. If not, see <http://www.gnu.org/licenses/>.
19;
20; $Id$
21;
22
23
24 .cseg
25
26
27;Print a unsigned lonng value to the uart
28; temp4:temp3:temp2:temp = value
29
30print_ultoa:
31 push yh
32 push yl
33 push z_flags
34 push temp4
35 push temp3
36 push temp2
37 push temp
38
39 clr yl ;yl = stack level
40
41ultoa1: ldi z_flags, 32 ;yh = temp4:temp % 10
42 clr yh ;temp4:temp /= 10
43ultoa2: lsl temp
44 rol temp2
45 rol temp3
46 rol temp4
47 rol yh
48 cpi yh,10
49 brcs ultoa3
50 subi yh,10
51 inc temp
52ultoa3: dec z_flags
53 brne ultoa2
54 cpi yh, 10 ;yh is a numeral digit '0'-'9'
55 subi yh, -'0'
56 push yh ;Stack it
57 inc yl
58 cp temp,_0 ;Repeat until temp4:temp gets zero
59 cpc temp2,_0
60 cpc temp3,_0
61 cpc temp4,_0
62 brne ultoa1
63
64 ldi temp, '0'
65ultoa5: cpi yl,3 ; at least 3 digits (ms)
66 brge ultoa6
67 push temp
68 inc yl
69 rjmp ultoa5
70
71ultoa6: pop temp ;Flush stacked digits
72 rcall uartputc
73 dec yl
74 brne ultoa6
75
76 pop temp
77 pop temp2
78 pop temp3
79 pop temp4
80 pop z_flags
81 pop yl
82 pop yh
83 ret
84
85
86;Prints temp2:temp in hex to the uart
87printhexw:
88 push temp
89 mov temp,temp2
90 rcall printhex
91 pop temp
92 ;fall thru
93
94;Prints temp in hex to the uart
95printhex:
96 swap temp
97 rcall printhexn
98 swap temp
99 ;fall thru
100
101;Prints the lower nibble
102printhexn:
103 push temp
104 andi temp,0xf
105 cpi temp,0xA
106 brlo printhexn_isno
107 subi temp,-7
108printhexn_isno:
109 subi temp,-'0'
110 rcall uartputc
111 pop temp
112 ret
113
114;Prints the zero-terminated string following the call statement.
115
116printstr:
117 push zh
118 push zl
119 push yh
120 push yl
121 push temp
122 in yh,sph
123 in yl,spl
124 ldd zl,y+7
125 ldd zh,y+6
126
127 lsl zl
128 rol zh
129printstr_loop:
130 lpm temp,z+
131 cpi temp,0
132 breq printstr_end
133 rcall uartputc
134 cpi temp,13
135 brne printstr_loop
136 ldi temp,10
137 rcall uartputc
138 rjmp printstr_loop
139
140printstr_end:
141 adiw zl,1 ;rounding
142 lsr zh
143 ror zl
144
145 std y+7,zl
146 std y+6,zh
147 pop temp
148 pop yl
149 pop yh
150 pop zl
151 pop zh
152 ret
153
154; --------------- Debugging stuff ---------------
155; Print a line with the Z80 main registers
156
157;.if INS_DEBUG
158
159zflags_to_ch:
160 .db "SZ H PNC",0,0
161
162printregs:
163 printnewline
164
165 push zl
166 push zh
167 ldiw z,zflags_to_ch*2
168 mov temp2,z_flags
169pr_zfl_next:
170 lpm temp,z+
171 tst temp
172 breq pr_zfl_end
173 cpi temp,' ' ; Test if no flag
174 breq pr_zfl_noflag
175 sbrs temp2,7 ;
176 ldi temp,' ' ; Flag not set
177 rcall uartputc
178pr_zfl_noflag:
179 rol temp2
180 rjmp pr_zfl_next
181pr_zfl_end:
182 pop zh
183 pop zl
184
185 printstring " A ="
186 mov temp,z_a
187 rcall printhex
188 printstring " BC ="
189 lds temp2,z_b
190 lds temp, z_c
191 rcall printhexw
192 printstring " DE ="
193 lds temp2,z_d
194 lds temp, z_e
195 rcall printhexw
196 printstring " HL ="
197 lds temp2,z_h
198 lds temp, z_l
199 rcall printhexw
200 printstring " SP ="
201 movw temp, z_spl
202 rcall printhexw
203 printstring " PC ="
204 movw temp, z_pcl
205 rcall printhexw
206 printstring " "
207 movw xl,z_pcl
208 mem_read
209 rcall printhex
210 printstring " "
211 adiw x,1
212 mem_read
213 rcall printhex
214 printstring " "
215 adiw x,1
216 mem_read
217 rcall printhex
218 printstring " "
219 ret
220;.endif
221
222; vim:set ts=8 noet nowrap
223