Browse code

Add source code of the applications

Pawel Jablonski authored on 18/03/2023 16:35:34
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,116 @@
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
+map ../../../bin/rom/rom.map
11
+
12
+; Header label
13
+const header "     0 1 2 3 4 5 6 7 8 9 a b c d e f"
14
+
15
+; Second part of row prefix
16
+const prefixEnd "0 : "
17
+
18
+; First label is the entry point
19
+.entry:
20
+	call .main
21
+	ret
22
+
23
+; No arguments
24
+; No return
25
+.main:
26
+	push A
27
+	push X
28
+	push Y
29
+	; Load address to header
30
+	mov low(*header), X
31
+	mov high(*header), Y
32
+	; Print header
33
+	call .xStringPrint
34
+	; Reset loop counter
35
+	clr A
36
+.main_loop:
37
+	push A
38
+	; Calc column number
39
+	and 0x0f, A
40
+	cmp 0, A
41
+	pop A
42
+	jne .main_loop_print_char
43
+	; Print new line every 16 chars
44
+	call .xStringNewLine
45
+	; Print prefix fo current row
46
+	call .printPrefix
47
+.main_loop_print_char:
48
+	call .xStringPrintChar
49
+	push A
50
+	; Calc column number
51
+	and 0x0f, A
52
+	cmp 0xf, A
53
+	pop A
54
+	; Do not print space for last char in row
55
+	je .main_loop_no_space
56
+	push A
57
+	; Print space between chars
58
+	mov ' ', A
59
+	call .xStringPrintChar
60
+	pop A
61
+.main_loop_no_space:
62
+	; Repeat loop 255+1 times
63
+	loope 255, A, .main_loop
64
+	; Refresh the screen
65
+	call .xLcdRefresh
66
+	pop Y
67
+	pop X
68
+	pop A
69
+	ret
70
+
71
+; Arguments:
72
+;	A - Char number
73
+; No return
74
+.printPrefix:
75
+	push A
76
+	push X
77
+	push Y
78
+	; Calc row number
79
+	swap A
80
+	and 0x0f, A
81
+	; Print high part of hex
82
+	call .printHalfHex
83
+	; Load address to prefix end
84
+	mov low(*prefixEnd), X
85
+	mov high(*prefixEnd), Y
86
+	; Print prefix end
87
+	call .xStringPrint
88
+	pop Y
89
+	pop X
90
+	pop A
91
+	ret
92
+
93
+; Arguments:
94
+;	A - Char number (4 bit)
95
+; No return
96
+.printHalfHex:
97
+	push A
98
+	; Change 4 bit hex to ASCII char
99
+	cmp 0x9, A
100
+	jge .printHalfHex_number
101
+	cmp 0xf, A
102
+	jge .printHalfHex_letter
103
+	jmp .printHalfHex_end
104
+	; Print digit
105
+.printHalfHex_number:
106
+	add '0', A
107
+	call .xStringPrintChar
108
+	jmp .printHalfHex_end
109
+	; Print letter
110
+.printHalfHex_letter:
111
+	sub 0xa, A
112
+	add 'a', A
113
+	call .xStringPrintChar
114
+.printHalfHex_end:
115
+	pop A
116
+	ret