Code: Select all
.nolist
#define EQU .equ
#define equ .equ
#define END .end
#define end .end
#define B_CALL bcall
#include "ti83plus.inc"
.list
.org $9D93
.DB t2ByteTok, tAsmCmp
bcall(_RunIndicOff)
bcall(_GrBufClr)
LD A, 0
LD L, 0
LD IX, Sprite
LD B, 8
Sprite8x8:
;a=x
;l=y;
;ix=sprite index
;B = number of rows (8)
LD H, 0
LD D, H
LD E, L
ADD HL, HL ;Yx2
ADD HL, DE ;x3
ADD HL, HL ;x6
ADD HL, HL ;x12
LD E, A ;copy A
SRL E ;divide x by 8
SRL E
SRL E
ADD HL, DE
LD DE, plotSScreen
ADD HL, DE ;drawing location
AND %00000111 ;A mod 8 = SHIFT
LD c, A ;copy A
LD DE, 12 ;LOAD 12 TO DE
_RowLoop:
PUSH BC ;SAVE BC (number of rows)
LD B, C ;Copy SHIFT TO B
LD C, (IX) ;Copy sprite index to C
XOR A ;Clear 2nd byte
_Shiftloop:
SRL C ;shift C right
RRA ;Catch carry to 2nd byte
DJNZ _Shiftloop ;repeatSHIFT times
INC HL ;Paste sprite to buffer
LD (HL), A ;PART 2
DEC HL
LD A, C ;PART 1
LD (HL), A
ADD HL, DE ;add 12 to buffer location
INC IX ;get next byte of sprite
POP BC ;get number of rows back
DJNZ _RowLoop ;If not done with rows, do again
bcall(_GrBufCpy)
RET
Sprite:
.DB %00111100
.DB %01111110
.DB %11110011
.DB %11100011
.DB %11000111
.DB %11001111
.DB %01111110
.DB %00111100
.end
.end