-
Notifications
You must be signed in to change notification settings - Fork 87
/
Copy pathcode18.src
266 lines (244 loc) · 2.67 KB
/
code18.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
.page
.subttl 'code18'
fnwait
jsr getnum
stx andmsk
ldx #0
jsr chrgot
beq stordo
jsr combyt
stordo
stx eormsk
ldy #0
waiter
jsr indpok
eor eormsk
and andmsk
beq waiter
zerrts rts
fsubt
lda facsgn
eor #@377
sta facsgn
eor argsgn
sta arisgn
lda facexp
jmp faddt
fadd5
jsr shiftr
bcc fadd4
fadd
jsr conupk
faddt bne *+5
jmp movfa
ldx facov
stx oldov
ldx #argexp
lda argexp
faddc
tay
beq zerrts
sec
sbc facexp
beq fadd4
bcc fadda
sty facexp
ldy argsgn
sty facsgn
eor #@377
adc #0
ldy #0
sty oldov
ldx #fac
bne fadd1
fadda
ldy #0
sty facov
fadd1
cmp #$f9
bmi fadd5
tay
lda facov
lsr 1,x
jsr rolshf
fadd4
bit arisgn
bpl fadd2
ldy #facexp
cpx #argexp
beq subit
ldy #argexp
subit
sec
eor #@377
adc oldov
sta facov
lda 3+addprc,y
sbc 3+addprc,x
sta faclo
lda addprc+2,y
sbc 2+addprc,x
sta facmo
lda 2,y
sbc 2,x
sta facmoh
lda 1,y
sbc 1,x
sta facho
fadflt
bcs normal
jsr negfac
normal
ldy #0
tya
clc
norm3
ldx facho
bne norm1
ldx facho+1
stx facho
ldx facmoh+1
stx facmoh
ldx facmo+1
stx facmo
ldx facov
stx faclo
sty facov
adc #@10
addpr2 =addprc+addprc
addpr4 =addpr2+addpr2
addpr8 =addpr4+addpr4
cmp #@30+addpr8
bne norm3
zerofc
lda #0
zerof1
sta facexp
zeroml
sta facsgn
rts
fadd2
adc oldov
sta facov
lda faclo
adc arglo
sta faclo
lda facmo
adc argmo
sta facmo
lda facmoh
adc argmoh
sta facmoh
lda facho
adc argho
sta facho
jmp squeez
norm2
adc #1
asl facov
rol faclo
rol facmo
rol facmoh
rol facho
norm1
bpl norm2
sec
sbc facexp
bcs zerofc
eor #@377
adc #1
sta facexp
squeez
bcc rndrts
rndshf
inc facexp
beq overr
ror facho
ror facmoh
ror facmo
ror faclo
ror facov
rndrts rts
negfac
lda facsgn
eor #@377
sta facsgn
negfch
lda facho
eor #@377
sta facho
lda facmoh
eor #@377
sta facmoh
lda facmo
eor #@377
sta facmo
lda faclo
eor #@377
sta faclo
lda facov
eor #@377
sta facov
inc facov
bne incfrt
incfac
inc faclo
bne incfrt
inc facmo
bne incfrt
inc facmoh
bne incfrt
inc facho
incfrt rts
overr
ldx #errov
jmp error
mulshf
ldx #resho-1
shftr2
ldy 3+addprc,x
sty facov
ldy 3,x
sty 4,x
ldy 2,x
sty 3,x
ldy 1,x
sty 2,x
ldy bits
sty 1,x
shiftr
adc #@10
bmi shftr2
beq shftr2
sbc #@10
tay
lda facov
bcs shftrt
shftr3
asl 1,x
bcc shftr4
inc 1,x
shftr4
ror 1,x
ror 1,x
rolshf
ror 2,x
ror 3,x
ror 4,x
ror a
iny
bne shftr3
shftrt
clc
rts
fone .byte @201,0,0,0,0
logcn2 .byte 3,@177,@136,@126
.byte @313,@171,@200,@23
.byte @233,@13,@144,@200
.byte @166,@70,@223,@26
.byte @202,@70,@252,@73,@40
sqr05 .byte @200,@65,4,@363,@64
sqr20 .byte @201,@65,@4,@363,@64
neghlf .byte @200,@200,0,0,0
log2 .byte @200,@61,@162,@27,@370
;.end