- Utilisation d’image déjà compiler en Assembleur,
- Utilisation de sprite de taille 8x8 pixels,
- Inversion du texte,
- Inversion de l’écran graphique,
- Création de rectangle très rapidement,
- Scrolling,
- Utilisation de sprite de plus de 8x8 pixels,
- Et plein d’autre trucs…
Donc je l’ai essayer et j’ai fait des petits programme pour voir ce que ça donne : C’est rapide et utile, les programme à utiliser ne sont pas gros et le tuto qui est dans le pack et simple à comprendre. Y’a qu’un seul point noir : les sprites et les maps bugs ! Donc je ne peut pas bien les afficher, j’ai mis le code source, si vous voulez y jeter un coût d’œil… Pourtant j’ai essayer de mettre les sprites en hexa et en binaire et ça marche toujours pas… Voici le code :
prgmZSPR
.nolist
#define equ .equ
#define EQU .equ
#define end .end
#include "ion.inc" ; \
.list ; \
#ifdef TI83P ; \
.org progstart-2 ; > Standard Ion Program Header
.db $BB,$6D ; /
#else ; /
.org progstart ; /
#endif ;/
bcall(_zeroop1)
ld hl,op1+1
ld (hl),'Z' ; or any other var
bcall(_rclvarsym) ; op1 / op2 -> value
bcall(_convop1)
#include "xspr.z80"
ret
Dsp_Spr:
ld a,(hl)
ld (height),a
inc HL
ld a,(hl)
ld (width),a
inc HL
push hl ;|load ix to hl
pop ix ;|
bcall(_RCLY) ;Recal Y user var
bcall(_convop1) ;X is storage in op1, so lets convert it to var a
cp 62
call nc,Clip_Number2
cp 0
Call c,Make_a_Zero
ld l,a
push hl
bcall(_RCLX) ;Recal X user var
bcall(_convop1) ;X is storage in op1, so lets convert it to var a
cp 95-16
call nc,Clip_Number
cp 0
Call c,Make_a_Zero
pop hl
height = $+1
ld b,00
width = $+1
ld c,00
call largeSprite
bcall(_zeroop1)
ld hl,op1+1
ld (hl),'W' ; or any other var
bcall(_rclvarsym) ; op1 / op2 -> value
bcall(_convop1)
cp 1
ret nz
bcall(_grbufcpy)
ret
Make_a_Zero:
xor a
ret
Clip_Number:
ld a,95-16
ret
Clip_Number2:
ld a,62
ret
;------------------------------
;Credits for Draw a sprite
;Taken from ion83 by Joe Wing.
;!!!!!!!!!!Thanks!!!!!!!!!!!!1
;------------------------------
;-----> Draw a picture
;Input: ix->sprite
; a=x
; l=y
; b=height (in pixels)
; c=width (in bytes, e.g. 2 would be 16)
;Output: nothing
; All registers are destroyed except bc', de', hl'
largeSprite:
di
ex af,af'
ld a,c
push af
ex af,af'
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,gbuf
add hl,de
largeSpriteLoop1:
push hl
largeSpriteLoop2:
ld d,(ix)
ld e,$00
ld a,c
or a
jr z,largeSpriteSkip1
largeSpriteLoop3:
srl d
rr e
dec a
jr nz,largeSpriteLoop3
largeSpriteSkip1:
ld a,(hl)
xor d
ld (hl),a
inc hl
ld a,(hl)
xor e
ld (hl),a
inc ix
ex af,af'
dec a
push af
ex af,af'
pop af
jr nz,largeSpriteLoop2
pop hl
pop af
push af
ex af,af'
ld de,$0C
add hl,de
djnz largeSpriteLoop1
pop af
ret
#include "sprdata.z80"
.end
prgmXSPR
cp 1
jr nz,cp2
ld ix,spr1
jp Dsp_spr
cp2:
.end END
prgmSPRDATA
spr1:
.db %00001000
.db %00001100
.db %00001010
.db %10101001
.db %01011001
.db %00001010
.db %00001100 .db %00001000
Pour la sprite, en hexa ça donne :
Spr1 : .db $08,$0C,$0A,$A9,$59,$0A,$0C,$08
Voilà ce que ça donne sur TI :

Même en effaçant le graph buffer avant ça donne la même chose
