-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathcode19.src
324 lines (287 loc) · 2.99 KB
/
code19.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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
.page
.subttl 'code19'
log
jsr sign
beq logerr
bpl log1
logerr
jmp fcerr
log1
lda facexp
sbc #@177
pha
lda #@200
sta facexp
lda #<sqr05
ldy #>sqr05
jsr romadd
lda #<sqr20
ldy #>sqr20
jsr romdiv
lda #<fone
ldy #>fone
jsr romsub
lda #<logcn2
ldy #>logcn2
jsr polyx
lda #<neghlf
ldy #>neghlf
jsr romadd
pla
jsr finlog
lda #<log2
ldy #>log2
rommlt
jsr romupk
jmp fmultt
faddh
lda #<fhalf
ldy #>fhalf
romadd
jsr romupk
jmp faddt
romsub
jsr romupk
jmp fsubt
romdiv
jsr romupk
jmp fdivt
fmult
jsr conupk
fmultt
bne *+5
jmp multrt
jsr muldiv
lda #0
sta resho
sta resmoh
sta resmo
sta reslo
lda facov
jsr mltply
lda faclo
jsr mltply
lda facmo
jsr mltply
lda facmoh
jsr mltply
lda facho
jsr mltpl1
jmp movfr
mltply
bne *+5
jmp mulshf
mltpl1
lsr a
ora #@200
mltpl2
tay
bcc mltpl3
clc
lda reslo
adc arglo
sta reslo
lda resmo
adc argmo
sta resmo
lda resmoh
adc argmoh
sta resmoh
lda resho
adc argho
sta resho
mltpl3
ror resho
ror resmoh
ror resmo
ror reslo
ror facov
tya
lsr a
bne mltpl2
multrt rts
; unpack a rom constant into the fac
;
romupk
sta index1
sty index1+1
ldy #4
lda (index1),y ;it's in rom, so ok to use ind.
sta arglo
dey
lda (index1),y
sta argmo
dey
lda (index1),y
sta argmoh
dey
lda (index1),y
sta argsgn
eor facsgn
sta arisgn
lda argsgn
ora #$80
sta argho
dey
lda (index1),y
sta argexp
lda facexp
rts
; unpack a ram constant into the fac
;
conupk
sta index1
sty index1+1
ldy #3+addprc
jsr indin1
sta arglo
dey
jsr indin1
sta argmo
dey
jsr indin1
sta argmoh
dey
jsr indin1
sta argsgn
eor facsgn
sta arisgn
lda argsgn
ora #@200
sta argho
dey
jsr indin1
sta argexp
lda facexp
rts
muldiv
lda argexp
mldexp
beq zeremv
clc
adc facexp
bcc tryoff
bmi goover
clc
.byte $2c
tryoff
bpl zeremv
adc #@200
sta facexp
bne *+5
jmp zeroml
lda arisgn
sta facsgn
rts
mldvex
lda facsgn
eor #@377
bmi goover
zeremv
pla
pla
jmp zerofc
goover
jmp overr
mul10
jsr movaf
tax
beq mul10r
clc
adc #2
bcs goover
finml6
ldx #0
stx arisgn
jsr faddc
inc facexp
beq goover
mul10r rts
tenc .byte @204,@40,0,0,0
doverr
ldx #errdvo
jmp error
div10
jsr movaf
lda #<tenc
ldy #>tenc
ldx #0
fdivf
stx arisgn
jsr movfm
jmp fdivt
fdiv
jsr conupk
fdivt
beq doverr
jsr round
lda #0
sec
sbc facexp
sta facexp
jsr muldiv
inc facexp
beq goover
ldx #253-addprc
lda #1
divide
ldy argho
cpy facho
bne savquo
ldy argmoh
cpy facmoh
bne savquo
ldy argmo
cpy facmo
bne savquo
ldy arglo
cpy faclo
savquo
php
rol a
bcc qshft
inx
sta reslo,x
beq ld100
bpl divnrm
lda #1
qshft
plp
bcs divsub
shfarg
asl arglo
rol argmo
rol argmoh
rol argho
bcs savquo
bmi divide
bpl savquo
divsub
tay
lda arglo
sbc faclo
sta arglo
lda argmo
sbc facmo
sta argmo
lda argmoh
sbc facmoh
sta argmoh
lda argho
sbc facho
sta argho
tya
jmp shfarg
ld100
lda #@100
bne qshft
divnrm
asl a
asl a
asl a
asl a
asl a
asl a
sta facov
plp ;fall thru to movfr
;.end