Code: Select all
.nolist ;defines, includes, and equates
#DEFINE equ .equ
#DEFINE EQU .equ
#DEFINE end .end
#include "ti83plus.inc" ;ROM call definitions
.list
.org $9d93
.db $BB,$6D
b_call(_AnsName)
b_call(_chkfindsym)
ex de,hl
inc hl
inc hl
inc hl
ld b,8
ld de,Buffer
push de
; the following routine borrowed from Doors CS 4.8+
dcsSquish: ;optimized - should still work
push bc
ld c,2
dcsSquishLoop:
ld a,(hl) ;A=ascii 65d
push hl ;0=ascii 48d
push de
ld e,48d
sub e
cp 10h
jr c,dcsSquish_DONE
sub 7 ;save 5 bytes
dcsSquish_DONE:
pop de
pop hl
inc hl
dec c
jr z,dcsSquishNext
sla a
sla a
sla a
sla a
ld (ScratchVar),a
jr dcsSquishLoop
dcsSquishNext:
ld b,a
ld a,(ScratchVar)
or b
ld (de),a
inc de
pop bc
dec bc
ld a,b
or c
jr nz,dcsSquish
GET_X:
b_call(_zeroop1)
ld hl,op1+1
ld (hl),'X' ;or any other var
b_call(_rclvarsym) ;op1 / op2 -> value
b_call(_convop1)
ld a,e ;previously ld a,hl
push af
b_call(_zeroop1)
ld hl,op1+1
ld (hl),'Y' ;or any other var
b_call(_rclvarsym) ;op1 / op2 -> value
b_call(_convop1)
ld l,e ;previously ld a,hl
pop af
pop ix
ld b,8
;-----> Draw a sprite - iPutSprite courtesy of Joe W., from Ion libs
; b=size of sprite
; l=yc
; a=xc
; ix holds pointer
iPutSprite:
ld e,l
ld h,$00
ld d,h
add hl,de
add hl,de
add hl,hl
add hl,hl
ld e,a
and $07
ld c,a
srl e
srl e
srl e
add hl,de
ld de,plotsscreen
add hl,de
iPutSpriteLoop1:
sl1: ld d,(ix)
ld e,$00
ld a,c
or a
jr z,iPutSpriteSkip1
iPutSpriteLoop2:
srl d
rr e
dec a
jr nz,iPutSpriteLoop2
iPutSpriteSkip1:
ld a,(hl)
xor d
ld (hl),a
inc hl
ld a,(hl)
xor e
ld (hl),a
ld de,$0B
add hl,de
inc ix
djnz iPutSpriteLoop1
b_call(_grbufcpy_v)
ret
Buffer:
.db 0,0,0,0,0,0,0,0
Scratchvar:
.db 0,0
.end
END