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,4
- push hl
- ld hl,4
- push hl
- push bc
- ld hl,12
- cx .equ $83CF ;axe temporary storage area
- cy .equ cx+1
- x .equ cy+1
- y .equ x+1
- off .equ y+1
- clipsave .equ off+1
- _cx .equ 0
- _cy .equ 1
- _x .equ 2
- _y .equ 3
- _off .equ 4
- _clipsave .equ 5
- ld de,plotSScreen
- di
- push de
- pop iy
- ld ix,cx
- ld e,l ;e=R
- ld (ix+_x),e
- pop hl
- pop bc ;c=CY
- ex (sp),hl ;l=CX
- ld (ix+_cy),c
- ld (ix+_cx),l
- xor a
- ld h,a
- ld b,a
- ld (y),a
- ld (off),a
- sub e
- ld d,a ;d=ERR
- ld a,c ;calculate ptr row [cy-x]
- sub e
- jr nc,+_ ;if x>cy, set y to 0, jump to column calculation
- ld l,h
- jr ++_
- _: ;row calculation
- ld l,a
- ld c,l
- add hl,hl
- add hl,bc
- add hl,hl
- add hl,hl
- _: ;column calculation
- ld a,(cx)
- ld c,a
- srl c
- srl c
- srl c
- add hl,bc
- push iy
- pop bc
- add hl,bc ;hl=PTR
- and 7
- ld b,a
- ld a,$80
- jr z,++_
- _:
- rrca
- djnz -_
- _:
- ld b,a ;b=LMASK
- ;special case RotRMask
- rrca
- ld c,a
- jr nc,SkipRotR
- inc (ix+_off)
- jr SkipRotR
- RotateMasks:
- call RotRMask
- SkipRotR:
- call RotLMask
- SkipRotate:
- ld a,(x)
- dec a
- sub (ix+_y)
- jp c,End
- ld a,d
- inc (ix+_y)
- add a,(ix+_y)
- add a,(ix+_y)
- ld d,a
- jp m,RotateMasks
- push de
- xor a
- cp c
- jr z,+_
- push bc
- push hl
- call DrawRChunk
- pop hl
- pop bc
- _:
- xor a
- cp b
- jr z,+_
- push bc
- push hl
- call DrawLChunk
- pop hl
- pop bc
- _:
- pop de
- _changeLmask:
- ld a,b ;change left mask
- or a
- jr z,_changeRmask
- rlc b
- jr nc,++_
- ld a,(cx)
- sub (ix+_y)
- jr nc,+_
- ld b,0
- jr _changeRmask
- _:
- ld b,%00000001
- inc (ix+_off)
- dec hl
- jr _changeRmask
- _:
- cpl ;jumps to here if nc after ld a,b \ rlc b
- and b
- ld b,a
- _changeRmask: ;change right mask
- ld a,c
- or a
- jr z,_testEnd
- rrc c
- jr nc,++_
- ld a,(cx)
- add a,(ix+_y)
- cp 96
- jr c,+_
- ld c,0
- jr _testEnd
- _:
- ld c,%10000000
- inc (ix+_off)
- jr _testEnd
- _:
- cpl ;jumps to here if nc after ld a,c \ rrc c
- and c
- ld c,a
- _testEnd:
- ld a,(x)
- dec a
- sub (ix+_y)
- jp c,End
- _drawLVert: ;draw left vertical
- push bc
- push hl
- push de
- ld a,(cy)
- sub (ix+_y)
- jr nc,+_
- xor a
- _:
- ld l,a
- ld a,(y) ;clip height
- add a,a
- inc a
- ld d,a
- ld a,(cy)
- add a,(ix+_y)
- inc a
- sub d
- jr nc,+_
- add a,d
- jr nc,++_
- ld d,a
- _:
- ld a,(cy)
- sub (ix+_x)
- add a,d
- ld e,a
- ld a,64
- sub e
- jr nc,+_
- add a,d
- jr nc,_vertDone ;if
- ld d,a
- _: ;done clipping height
- ld (ix+_clipsave),d
- ld a,(cx)
- sub (ix+_x)
- jr c,_drawRVert
- call GetPtrMask
- ld c,a
- ld b,d
- call DrawVertLoop
- _drawRVert:
- ld a,(cy)
- sub (ix+_y)
- jr nc,+_
- xor a
- _:
- ld l,a
- ld a,(clipsave)
- or a
- jr z,+_
- ld d,a
- ld a,(cx)
- add a,(ix+_x)
- cp 96
- jr nc,+_
- call GetPtrMask
- ld c,a
- ld b,d
- call DrawVertLoop
- _:
- _vertDone:
- pop de
- pop hl
- ld a,d
- dec (ix+_x)
- sub (ix+_x)
- sub (ix+_x)
- ld d,a
- ld a,(cy)
- sub (ix+_x)
- jr c,+_
- ld bc,12
- add hl,bc
- _:
- pop bc
- jp SkipRotate
- End:
- ld iy,Flags
- ei
- bcall(_grBufCpy)
- 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
- push iy
- pop bc
- add hl,bc
- and 7
- ld b,a
- ld a,$80
- ret z
- _:
- rrca
- djnz -_
- ret
- RotLMask:
- ld a,b
- or a
- ret z
- rlca
- jr nc,++_
- push de
- push bc
- push hl
- call DrawLChunk
- pop hl
- pop bc
- pop de
- ld a,(cx)
- dec a
- sub (ix+_y)
- jr nc,+_
- ld b,0
- ret
- _:
- dec hl
- inc (ix+_off)
- ld b,%00000001
- ret
- _:
- or b
- ld b,a
- ret
- RotRMask:
- ld a,c
- or a
- ret z
- rrca
- jr nc,++_
- push de
- push bc
- push hl
- call DrawRChunk
- pop hl
- pop bc
- pop de
- ld a,(cx)
- inc a
- add a,(ix+_y)
- cp 96
- jr c,+_
- ld c,a
- ret
- _:
- ld c,%10000000
- inc (ix+_off)
- ret
- _:
- or c
- ld c,a
- ret
- DrawRChunk:
- ld e,0
- ld a,(x)
- add a,a
- inc a
- ld b,a
- ld a,(cy)
- sub (ix+_x)
- jr nc,+_
- add a,b
- ret nc
- ld b,a
- _:
- ld a,(cy)
- add a,(ix+_x)
- ld d,a
- dec d
- ld a,64
- sub d
- jp nc,+_
- add a,b
- ret nc
- ld b,a
- _:
- ld d,e
- ld e,(ix+_off)
- add hl,de
- ld e,12
- jp DrawVertLoop;+3;skip load
- DrawLChunk:
- ld c,b ;c=mask
- ld a,(x)
- add a,a
- inc a
- ld b,a
- ld a,(cy)
- sub (ix+_x)
- jr nc,+_
- add a,b
- ret nc
- ld b,a
- _:
- ld a,(cy)
- add a,(ix+_x)
- ld d,a
- ld a,64
- sub d
- jr nc,+_
- add a,b
- ret nc
- ld b,a
- _:
- ;jp DrawVertLoop
- DrawVertLoop:
- ;in: B = height, C=mask, HL = pointer
- ;destroys: A, B, DE, HL
- ld de,12
- xor a
- or b
- ret z
- _:
- ld a,(hl)
- xor c
- ld (hl), a
- add hl,de
- djnz -_
- ret
Add Comment
Please, Sign In to add comment