Posté le 30/07/2006 à 16:12 Membre depuis le 15/03/2005, 3470 messages
Bonjour tout le monde. Vous connaissez sans doute Xlib, mais ce programme n’est pas compatible avec ma vieille TI 83… Donc j’ai fait une petite recherche sur Ticalc et j’ai trouver une lib pour 83 qu'est pas mal : Zapi. Bien sur, il a moins de fonctions mais c’est toujours bien de pouvoir faire du ti-basic étendu sur une TI 83 (et 83+). Voici une liste de ses fonctions :

- 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 :

110094.bmp

Même en effaçant le graph buffer avant ça donne la même chose sad !
Posté le 30/07/2006 à 18:15 Membre depuis le 01/12/2005, 413 messages
trop complique pour mon niveau desole sad
Posté le 30/07/2006 à 20:39 Membre depuis le 15/03/2005, 3470 messages
Si quelqu'un à deja fait un programme avec ZAPI ça serai bien qu'il m'éxplique d'où viens le problème...
Posté le 04/08/2006 à 20:29 Membre depuis le 15/03/2005, 3470 messages
Personne n'a de solution ? Même en regardant le code source (juste pour voir ce qui ne va pas)... Si quelqu'un qui sait bien ce servir de l'asm passe par ici, ce serai bien qu'il m'aide ... sad
Posté le 14/08/2006 à 18:05 Membre depuis le 10/06/2001, 20910 messages
Tu as placé ton sujet dans la partie du forum dédiée au Basic. En demandant à un modérateur de le déplacer dans la bonne rubrique, tu devrais avoir plus de réponses wink
avatarUn site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.
Posté le 14/08/2006 à 20:28 Membre depuis le 01/12/2005, 413 messages
son probleme, c'est du basic etendu, si tu avais fait attention wink
de plus il date de 15 jours et je suppose qu'il est passe a autre chose
Posté le 14/08/2006 à 22:03 Membre depuis le 15/03/2005, 3470 messages
Nan j'ai bien fait attention à la bonne rubrique, mais bon j'ai réussis à faire marcher les grandes sprites mais pas les pictures ni les maps et encore moin les petites sprites. Sinon je vais utiliser Xlib, qui est beaucoup plus pratique.
Posté le 14/08/2006 à 22:44 Membre depuis le 10/06/2001, 20910 messages
On dirait de l'assembleur votre Basic étendu. On n'a pas ça sur TI89 ! Je suis jaloux smile
avatarUn site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.
Posté le 15/08/2006 à 00:21 Membre depuis le 15/03/2005, 3470 messages
C'est de l'assembleur, mais je m'en sert avec un autre programme en basic avec la commande "send9prgmZZAPI". L'équivalent de ça, ce sont les librairies pour les programmes basics sur les 68k (j'ai pas de nom précis mais je sais que ça éxiste).
Posté le 15/08/2006 à 10:41 Membre depuis le 01/12/2005, 413 messages
oui c'est un prog en asm rajoutant des fonctions
Posté le 11/09/2006 à 22:02 Membre depuis le 09/07/2003, 21783 messages
exécutant des focntions à la volée en reprenant les arguments données, c'est assez différent, c'est pas comme si on modifiait l'OS.