blob: 87b66bad4f1a1cb50d7f53441c2aa3795094612b (
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
; print the number at 0xF
print_num:
; non-address definitions
.label zero 48
.label out_start 32
; define stuff in memory
.label number 16
.label mult 17
mov a 1
str a mult
.label currnum 18
.label tmp1 19
.label out_pointer 20
mov a out_start
str a out_pointer
.label swap_counter 21
loop_start:
; get num-(num%mult)
ld a number
ld b mult
mod
swp c b
sub
str c tmp1
; get num-(num%(mult*10))
mov a 10
ld b mult
mul
swp c b
ld a number
mod
swp c b
sub
; subtract the thingies to get the current digit
swp c b
ld a tmp1
sub
swp c a
ld b mult
div
str c currnum
; add zero to currnum and store at out_pointer
swp a c ; currnum -> A
mov b zero
add
ld a out_pointer
srr c a ; store c to address at a (which is out_pointer)
; continue loop
; increment out_pointer
ld a out_pointer
mov b 1
add
str c out_pointer
; increment mult
ld a mult
mov b 10
mul
str c mult
swp c b ; mult -> b
ld a number ; get number
mod ; get mod, will be equal to number if reached end
cmr c a ; compare result of mod and number (which is still in a)
jz loop_start ; jump if not equal
; escaped from loop; swapping around memory to flip the text
ld a out_pointer
mov b out_start
sub
swp c a
mov b 2
div
str c swap_counter
cmp c 0
jnz end_swap
start_swap:
; ptr - counter
ld b swap_counter
ld a out_pointer
sub
str c tmp1
; start + counter
ld a swap_counter ; 1
mov b 1
sub ; 1
swp c b ; 1 -> b
mov a out_start ; 32
add ; 32 + 1 = 33
swp c b
ld a tmp1
swpm a b
ld a swap_counter
mov b 1
sub
str c swap_counter
cmp c 0
jz start_swap
end_swap:
; add \n\0
ld b out_pointer
mov a 10 ; \n
srr a b
mov a 1
add
mov a 0 ; \0
srr a c
ret
|