-
Notifications
You must be signed in to change notification settings - Fork 82
/
code24.src
208 lines (186 loc) · 2.46 KB
/
code24.src
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
.page
.subttl 'code24'
logeb2 .byte @201,@70,@252,@73,@51
expcon .byte 7,@161,@64,@130,@76
.byte @126,@164,@26,@176
.byte @263,@33,@167,@57
.byte @356,@343,@205,@172
.byte @35,@204,@34,@52
.byte @174,@143,@131,@130
.byte @12,@176,@165,@375
.byte @347,@306,@200,@61
.byte @162,@30,@20,@201
.byte 0,0,0,0
exp
lda #<logeb2
ldy #>logeb2
jsr rommlt
lda facov
adc #@120
bcc stold
jsr incrnd
stold
sta oldov
jsr movef
lda facexp
cmp #@210
bcc exp1
gomldv
jsr mldvex
exp1
jsr int
lda integr
clc
adc #@201
beq gomldv
sec
sbc #1
pha
ldx #4+addprc
swaplp
lda argexp,x
ldy facexp,x
sta facexp,x
sty argexp,x
dex
bpl swaplp
lda oldov
sta facov
jsr fsubt
jsr negop
lda #<expcon
ldy #>expcon
jsr poly
lda #0
sta arisgn
pla
jsr mldexp
rts
polyx
sta polypt
sty polypt+1
jsr mov1f
lda #tempf1
jsr fmult
jsr poly1
lda #<tempf1
ldy #>tempf1
jmp fmult
poly
sta polypt
sty polypt+1
poly1
jsr mov2f
lda (polypt),y
sta degree
ldy polypt
iny
tya
bne poly3
inc polypt+1
poly3
sta polypt
ldy polypt+1
poly2
jsr rommlt
lda polypt
ldy polypt+1
clc
adc #4+addprc
bcc poly4
iny
poly4
sta polypt
sty polypt+1
jsr romadd
lda #<tempf2
ldy #>tempf2
dec degree
bne poly2
rts
rmulc .byte @230,@65,@104,@172,0
raddc .byte @150,@50,@261,@106,0
; random number function. rnd(x) where:
; x=0 ==> generate a random number based on hardware clock
; x<0 ==> seed a reproducable, pseudo-random number generator
; x>0 ==> generate a reproducable pseudo-random # based on
; seed value above.
rnd
jsr sign
bmi rnd1
bne qsetnr
;
; get value from hardware timers
;
lda ted+0 ;timer 1 is free-running,
sta facho
lda ted+1
sta facmo
lda ted+2 ;timer 2 isn't.
sta facmoh
lda ted+3
sta faclo
jmp strnex
qsetnr
lda #<rndx
ldy #>rndx
jsr movfm
lda #<rmulc
ldy #>rmulc
jsr rommlt
lda #<raddc
ldy #>raddc
jsr romadd
rnd1
ldx faclo
lda facho
sta faclo
stx facho
ldx facmoh
lda facmo
sta facmoh
stx facmo
strnex
lda #0
sta facsgn
lda facexp
sta facov
lda #@200
sta facexp
jsr normal
ldx #<rndx
ldy #>rndx
gmovmf
jmp movmf
; utilities involved in the run-time stack.
;
;
; move top-of-stack pointer to (fndpnt)
movtos
lda tos
sta fndpnt
lda tos+1
sta fndpnt+1
rts
;
; move (fndpnt) to (tos)
;
movfnd
lda fndpnt
sta tos
lda fndpnt+1
sta tos+1
rts
;
; reduce size of run-time stack by (y). no error checking performed!
;
rlsstk
tya
clc
adc tos
sta tos
bcc rls999
inc tos+1
rls999
rts
;.end