-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.s
More file actions
103 lines (75 loc) · 1.34 KB
/
script.s
File metadata and controls
103 lines (75 loc) · 1.34 KB
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
//FIB(X0) = x1
//FIB(24) = 46368
MOV X0 24
PRINT 0 'F'
PRINT 1 'i'
PRINT 2 'b'
PRINT 3 '('
MOV X1 4
LR X7
ADD X7 X7 3
B PRINT_NUMBER_UNSIGNED
ADD X1 X1 1
PRINT X1 ')'
ADD X1 X1 1
PRINT X1 '='
ADD X1 X1 1
WRITE X1 0x00
//at this point screen says : fib(x0)=
//caluclate fib x0
MOV X1 0x0000
MOV X2 0x0001
MOV X3 0x0001
fib_loop:
CMP X3 X0
BGT fib_done
ADD X5 X1 X2
MOV X1 X2
MOV X2 X5
ADD X3 X3 0x0001
B fib_loop
fib_done:
//x1 = fib(x0)
MOV X0 X1
READ X1 0x00
LR X7
ADD X7 X7 3
B PRINT_NUMBER_UNSIGNED
EXIT
/*
TODO description
Arguments:
X0 -> Number
X1 -> Screen Location
X7 -> Return Register
*/
PRINT_NUMBER_UNSIGNED:
#ALIAS X0 NUMBER
#ALIAS X1 SCREENLOC
#ALIAS X2 BCDECIMAL
#ALIAS X3 SHIFT
#ALIAS X5 RUNSUM
MOV SHIFT 12
BCDH BCDECIMAL NUMBER
MOV RUNSUM 0
.digit_loop:
LSR X4 BCDECIMAL SHIFT
AND X4 X4 0x000F
ADD RUNSUM RUNSUM X4
ADD X4 X4 '0'
CMP RUNSUM 0
beq .end_digit_print
PRINT SCREENLOC X4
ADD SCREENLOC SCREENLOC 1
.end_digit_print:
SUB SHIFT SHIFT 4
CMP SHIFT 0
BLT .digit_loop_end
B .digit_loop
.digit_loop_end:
BCDL BCDECIMAL NUMBER
AND BCDECIMAL BCDECIMAL 0x000F
ADD BCDECIMAL BCDECIMAL '0'
PRINT SCREENLOC BCDECIMAL
//TODO do ones place
b X7