View difference between Paste ID: kS3bUhiF and yG7QNRT2
SHOW: | | - or go back to the newest paste.
1
#include "ti83plus.inc"
2
	.org $9d95-2
3
	.db $bb,$6d
4
	bcall(_grbufclr)
5
	pop bc
6-
	ld hl,31
6+
	ld hl,5
7
	push hl
8
	ld hl,5
9
	push hl
10-
	ld hl,31
10+
11
	ld hl,12
12
	
13
_cx .equ 0
14
_cy .equ 1
15
_x .equ 2
16
_y .equ 3
17
_err .equ 4
18
_rmask .equ 5
19
_lmask .equ 6
20
_off .equ 7
21
_ptr .equ 8
22
23
;###############################
24
;draw filled circle
25
FilledCircle:
26
	di
27
	ld ix,cx
28
	ld (ix+_x),l
29
	xor a
30
	ld (y),a
31
	ld (off),a
32
	sub l
33
	ld (err),a
34
	pop hl
35
	pop bc
36
	ex (sp),hl
37
	ld (ix+_cx),c
38
	ld (ix+_cy),l
39
	
40
	ld a,l
41
	sub (ix+_x)
42
	jr nc,+_
43
	xor a
44
_:
45
	ld l,a
46
	ld a,c
47
	;A=cx, L=cy-x
48
	call GetPtrMask
49
	ld (rmask),a
50
	ld (lmask),a
51
	ld (ptr),hl
52
	
53
Main:
54
	call RotLMask
55
	bcall(_grBufCpy)
56
	call RotRMask
57
	bcall(_grBufCpy)
58
SkipRotate:
59
	ld a,(x)
60
	dec a
61
	sub (ix+_y)
62
	jp c,End
63
	ld a,(err)
64
	inc (ix+_y)
65
	add a,(ix+_y)
66
	;inc (ix+_y)
67
	add a,(ix+_y)
68
	ld (err),a
69
	bit 7,a
70
	jp nz,Main
71
		;draw chunks
72
	call DrawLChunk
73
	bcall(_grBufCpy)
74
	call DrawRChunk
75
	bcall(_grBufCpy)
76
		;change left mask
77
	ld a,(lmask)
78
	or a
79
	jr z,+++_
80
	rlca
81
	jr nc,++_
82
	ld a,(cx)
83
	sub (ix+_y)
84
	jr nc,+_
85
	xor a
86
	ld (lmask),a
87
	jr +++_
88
_:
89
	ld a,%00000001
90
	ld (lmask),a
91
	inc (ix+_off)
92
	ld hl,(ptr)
93
	dec hl
94
	ld (ptr),hl
95
	jr ++_
96
_:
97
	ld b,a
98
	ld a,(lmask)
99
	cpl
100
	and b
101
	ld (lmask),a
102
_:		;change right mask
103
	ld a,(rmask)
104
	or a
105
	jr z,+++_
106
	rrca
107
	jr nc,++_
108
	ld a,(cx)
109
	add a,(ix+_y)
110
	cp 96
111
	jr c,+_
112
	xor a
113
	ld (rmask),a
114
	jr +++_
115-
	ld a,(y)
115+
116
	ld a,%10000000
117
	inc (ix+_off)
118
	ld (rmask),a
119
	jr ++_
120
_:
121
	ld b,a
122
	ld a,(rmask)
123
	cpl
124
	and b
125
	ld (rmask),a
126
_:
127
	ld a,(x)
128
	dec a
129
	sub (ix+_y)
130-
	ld a,(y)
130+
131
		;draw left vertical
132
	ld a,(cy)
133
	sub (ix+_y)
134
	jr nc,+_
135
	xor a
136
_:
137
	ld l,a
138
	ld a,(y)	;clip the height...
139
	add a,a
140
	inc a
141
	ld d,a
142
	ld a,(cy)
143
	add a,(ix+_y)
144
	inc a
145
	sub d
146
	jr nc,+_
147
	add a,d
148
	jr nc,++_
149
	ld d,a
150
_:
151
	ld a,(cy)
152
	sub (ix+_x)
153
	add a,d
154
	ld e,a
155
	ld a,64
156
	sub e
157
	jr nc,+_
158
	add a,d
159
	jr nc,++_
160
	ld d,a	
161
_:		;done clipping
162
	ld a,(cx)
163
	sub (ix+_x)
164
	jr c,+_
165
	call GetPtrMask
166
	ld c,a
167
	ld b,d
168
	call DrawVertLoop
169
	bcall(_grBufCpy)
170
_:
171
		;draw right vertical
172
	ld a,(cy)
173
	sub (ix+_y)
174
	jr nc,+_
175
	xor a
176
_:
177
	ld l,a
178
	ld a,(y)	;clip the height..
179
	add a,a
180
	inc a
181
	ld d,a
182
	ld a,(cy)
183
	add a,(ix+_y)
184
	inc a
185
	sub d
186
	jr nc,+_
187
	add a,d
188
	jr nc,++_
189
	ld d,a
190
_:
191
	ld a,(cy)
192
	sub (ix+_x)
193
	add a,d
194
	ld e,a
195
	ld a,64
196
	sub e
197
	jr nc,+_
198
	add a,d
199
	jr nc,++_
200
	ld d,a	
201-
	ld c,(ix+_lmask)
201+
_:		;done clipping
202
	ld a,(cx)
203
	add a,(ix+_x)
204
	cp 96
205
	jr nc,+_
206
	call GetPtrMask
207
	ld c,a
208
	ld b,d
209
	call DrawVertLoop
210
	bcall(_grBufCpy)
211
_:
212
		;sub x
213
	ld a,(err)
214
	dec (ix+_x)
215
	sub (ix+_x)
216
	;dec (ix+_x)
217
	sub (ix+_x)
218
	ld (err),a
219
	ld a,(cy)
220
	sub (ix+_x)
221
	jr c,+_
222
	ld hl,(ptr)
223
	ld de,12
224
	add hl,de
225
	ld (ptr),hl
226
_:
227
	jp SkipRotate
228
End:
229
	ei
230
	ret
231
	
232
GetPtrMask:
233
	ld h,0
234-
	ld c,(ix+_rmask)
234+
235
	ld c,l
236
	add hl,hl
237
	add hl,bc
238
	add hl,hl
239
	add hl,hl
240
	ld c,a
241
	srl c
242
	srl c
243
	srl c
244
	add hl,bc
245
	ld bc,plotsscreen
246
	add hl,bc
247
	and 7
248
	ld b,a
249
	ld a,$80
250
	ret z
251
_:
252
	rrca
253
	djnz -_
254
	ret
255
256
	
257
RotLMask:
258
	ld a,(lmask)
259-
        xor c
259+
260
	ret z
261
	rlca
262
	jr nc,++_
263
	call DrawLChunk
264
	ld a,(cx)
265
	dec a
266
	sub (ix+_y)
267
	jr nc,+_
268
	xor a
269
	ld (lmask),a
270
	ret
271
_:
272
	ld hl,(ptr)
273
	dec hl
274
	ld (ptr),hl
275
	inc (ix+_off)
276
	ld a,%00000001
277
	ld (lmask),a
278
	ret
279
_:
280
	ld hl,lmask
281
	or (hl)
282
	ld (hl),a
283
	ret
284
	
285
DrawLChunk:
286
	ld a,(lmask)
287
	or a
288
	ret z
289
	ld c,a
290
	ld a,(off)
291
	or a
292
	jr nz,+_
293
	ld a,(rmask)
294
	and c
295
	xor c
296
	ld c,a
297
_:
298
	ld hl,(ptr)
299
	ld a,(x)
300
	add a,a
301
	inc a
302
	ld b,a
303
	ld a,(cy)
304
	sub (ix+_x)
305
	jr nc,+_
306
	add a,b
307
	ret nc
308
	ld b,a
309
_:
310
	ld a,(cy)
311
	add a,(ix+_x)
312
	ld d,a
313
	ld a,64
314
	sub d
315
	jr nc,+_
316
	add a,b
317
	ret nc
318
	ld b,a	
319
_:
320
	jp DrawVertLoop
321
	ret
322
	
323
RotRMask:
324
	ld a,(rmask)
325
	or a
326
	ret z
327
	rrca
328
	jr nc,++_
329
	call DrawRChunk
330
	ld a,(cx)
331
	inc a
332
	add a,(ix+_y)
333
	cp 96
334
	jr c,+_
335
	xor a
336
	ld (rmask),a
337
	ret
338
_:
339
	ld a,%10000000
340
	ld (rmask),a
341
	inc (ix+_off)
342
	ret
343
_:
344
	ld hl,rmask
345
	or (hl)
346
	ld (hl),a
347
	ret
348
	
349
DrawRChunk:
350
	ld a,(rmask)
351
	or a
352
	ret z
353
	ld c,a
354
	ld a,(off)
355
	or a
356
	jr nz,+_
357
	ld a,(lmask)
358
	and c
359
	xor (ix+_lmask)
360
	ld (lmask),a
361
_:
362
	ld hl,(ptr)
363
	ld e,(ix+_off)
364
	ld d,0
365
	add hl,de
366
	ld a,(x)
367
	add a,a
368
	inc a
369
	ld b,a
370
	ld a,(cy)
371
	sub (ix+_x)
372
	jr nc,+_
373
	add a,b
374
	ret nc
375
	ld b,a
376
_:
377
	ld a,(cy)
378
	add a,(ix+_x)
379
	ld d,a
380
	dec d
381
	ld a,64
382
	sub d
383
	jr nc,+_
384
	add a,b
385
	ret nc
386
	ld b,a	
387
_:
388
	jp DrawVertLoop
389
390
DrawVertLoop:
391
        ;in: B = height, C=mask, HL = pointer
392
        ;destroys: A, B, DE, HL
393
        ld de,12
394
_:
395
        ld a,(hl)
396
        or c
397
        ld (hl), a
398
        add hl,de
399
        djnz -_
400
        ret
401
402
	
403
	
404
cx:
405
	.db 0
406
cy:
407
	.db 0
408
x:
409
	.db 0
410
y:
411
	.db 0
412
err:
413
	.db 0
414
rmask:
415
	.db 0
416
lmask:
417
	.db 0
418
off:
419
	.db 0
420
ptr:
421
	.dw 0