Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ti83plus.inc"
- .org $9d95-2
- .db $bb,$6d
- bcall(_grbufclr)
- pop bc
- ld hl,31
- push hl
- push hl
- push bc
- ld hl,31
- _cx .equ 0
- _cy .equ 1
- _x .equ 2
- _y .equ 3
- _err .equ 4
- _rmask .equ 5
- _lmask .equ 6
- _off .equ 7
- _ptr .equ 8
- ;###############################
- ;draw filled circle
- FilledCircle:
- di
- ld ix,cx
- ld (ix+_x),l
- xor a
- ld (y),a
- ld (off),a
- sub l
- ld (err),a
- pop hl
- pop bc
- ex (sp),hl
- ld (ix+_cx),c
- ld (ix+_cy),l
- ld a,l
- sub (ix+_x)
- jr nc,+_
- xor a
- _:
- ld l,a
- ld a,c
- ;A=cx, L=cy-x
- call GetPtrMask
- ld (rmask),a
- ld (lmask),a
- ld (ptr),hl
- Main:
- call RotLMask
- bcall(_grBufCpy)
- call RotRMask
- bcall(_grBufCpy)
- SkipRotate:
- ld a,(x)
- dec a
- sub (ix+_y)
- jp c,End
- ld a,(err)
- inc (ix+_y)
- add a,(ix+_y)
- ;inc (ix+_y)
- add a,(ix+_y)
- ld (err),a
- bit 7,a
- jp nz,Main
- ;draw chunks
- call DrawLChunk
- bcall(_grBufCpy)
- call DrawRChunk
- bcall(_grBufCpy)
- ;change left mask
- ld a,(lmask)
- rlca
- jr nc,+_
- ld a,%00000001
- ld (lmask),a
- inc (ix+_off)
- ld hl,(ptr)
- dec hl
- ld (ptr),hl
- jr ++_
- _:
- ld b,a
- ld a,(lmask)
- cpl
- and b
- ld (lmask),a
- _: ;change right mask
- ld a,(rmask)
- rrca
- jr nc,+_
- ld a,%10000000
- inc (ix+_off)
- ld (rmask),a
- jr ++_
- _:
- ld b,a
- ld a,(rmask)
- cpl
- and b
- ld (rmask),a
- _:
- ld a,(x)
- dec a
- sub (ix+_y)
- jp c,End
- ;draw left vertical
- ld a,(cy)
- sub (ix+_y)
- ld l,a
- ld a,(y)
- add a,a
- inc a
- ld d,a
- ld a,(cx)
- sub (ix+_x)
- call GetPtrMask
- ld c,a
- ld b,d
- call DrawVertLoop
- bcall(_grBufCpy)
- ;draw right vertical
- ld a,(cy)
- sub (ix+_y)
- ld l,a
- ld a,(y)
- add a,a
- inc a
- ld d,a
- ld a,(cx)
- add a,(ix+_x)
- call GetPtrMask
- ld c,a
- ld b,d
- call DrawVertLoop
- bcall(_grBufCpy)
- ;sub x
- ld a,(err)
- ;dec (ix+_x)
- sub (ix+_x)
- dec (ix+_x)
- sub (ix+_x)
- ld (err),a
- ld hl,(ptr)
- ld de,12
- add hl,de
- ld (ptr),hl
- jp SkipRotate
- End:
- ei
- ret
- GetPtrMask:
- ld h,0
- ld b,h
- ld c,l
- add hl,hl
- add hl,bc
- add hl,hl
- add hl,hl
- ld c,a
- srl c
- srl c
- srl c
- add hl,bc
- ld bc,plotsscreen
- add hl,bc
- and 7
- ld b,a
- ld a,$80
- ret z
- _:
- rrca
- djnz -_
- ret
- RotLMask:
- ld a,(lmask)
- rlca
- jr nc,+_
- call DrawLChunk
- ld a,%00000001
- ld (lmask),a
- ld hl,(ptr)
- dec hl
- ld (ptr),hl
- inc (ix+_off)
- ret
- _:
- ld hl,lmask
- or (hl)
- ld (hl),a
- ret
- DrawLChunk:
- ld c,(ix+_lmask)
- ld a,(off)
- or a
- jr nz,+_
- ld a,(rmask)
- and c
- xor c
- ld c,a
- _:
- ld hl,(ptr)
- ld a,(x)
- add a,a
- inc a
- ld b,a
- jp DrawVertLoop
- ret
- RotRMask:
- ld a,(rmask)
- rrca
- jr nc,+_
- call DrawRChunk
- ld a,%10000000
- ld (rmask),a
- inc (ix+_off)
- ret
- _:
- ld hl,rmask
- or (hl)
- ld (hl),a
- ret
- DrawRChunk:
- ld c,(ix+_rmask)
- ld a,(off)
- or a
- jr nz,+_
- ld a,(lmask)
- and c
- xor (ix+_lmask)
- ld (lmask),a
- _:
- ld hl,(ptr)
- ld e,(ix+_off)
- ld d,0
- add hl,de
- ld a,(x)
- add a,a
- inc a
- ld b,a
- jp DrawVertLoop
- DrawVertLoop:
- ;in: B = height, C=mask, HL = pointer
- ;destroys: A, B, DE, HL
- ld de,12
- _:
- ld a,(hl)
- xor c
- ld (hl), a
- add hl,de
- djnz -_
- ret
- cx:
- .db 0
- cy:
- .db 0
- x:
- .db 0
- y:
- .db 0
- err:
- .db 0
- rmask:
- .db 0
- lmask:
- .db 0
- off:
- .db 0
- ptr:
- .dw 0
Advertisement
Add Comment
Please, Sign In to add comment