Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ti83pce.inc"
- .assume ADL=1
- .db tExtTok, tAsm84CeCmp
- .org userMem
- call _ClrLCDFull
- ld a, $27
- ld ($E30018), a ; c'est comme ça qu'on met l'écran en 8 bits
- ld hl, 000f0h ; ma première couleur %0000000011110 une sorte de bleu
- ld (mpLCDPalette), hl ; on mets cette couleur comme première couleur de la palette
- ld hl, 0f800h ; deuxième couleur %1111100000000000 une sorte de rouge
- ld (mpLCDPalette+2), hl ; deuxième couleur de la palette (+2 car une couleur = 2 octets)
- ld hl, 0f5DDh ; troisième couleur %1111010111011101
- ld (mpLCDPalette+4), hl ; troisième couleur de la palette
- ; ne pas se tromper, les couleurs ici sont en RGB1555 , le premier bit on sait pas trop ce que c'est, les 5 suivants c'est le rouge, les 5 d'après, le vert et les 5derniers le bleu
- ld hl, Sprite ; on mets l'adresse de la sprite dans hl
- ld de, vRam+1280 ; l'adresse de l'endroit ou on veut afficher la sprite
- ld a, 8 ; hauteur de la sprite (ma sprite est en 8x8)
- aff_sprite:
- ld bc, 8 ; largeur de la sprite
- ldir ; on écrit la première ligne avec un ldir simple
- ld bc, 312 ; on mets dans bc 320-largeur de la sprite
- ex de, hl
- add hl, bc ; on l'ajoute a de (l'endroit ou doit être dessinée la sprite) comme ça on a dans de le premier pixel de la ligne du dessous
- ex de, hl
- dec a
- jr nz, aff_sprite ; on boucle jusqu'a ce que la sprite soit entièrement affichée (quand a = 0)
- ; second sprite (ici c'est la sprite avec transparence, tout simplement dans cette sprite on va regarder si un pixel en question est d'une couleur bien définie, et si c'est le cas on n'affiche pas ce pixel)
- ld de, Sprite2 ; adresse de la deuxième sprite
- ld hl, vRam+2560 ; adresse de la ou on veux dessiner la sprite
- ld b, 8 ; hauteur de la sprite
- spriteLoop:
- push bc ; contient la hauteur de la sprite pour la boucle Y)
- ld b, 8 ; largeur de la sprite
- spriteX:
- ld a, (de) ; on mets dans a la couleur du pixel actuel de la sprite
- cp 0 ; on la compare avec la couleur qu'on ne veut pas afficher (j'ai choisi de ne pas afficher la première couleur de ma palette)
- jr z, emptyPxl ; si c'est le cas, on passe la partie affichage
- ld (hl), a ; on affiche le pixel (hl contient l'adresse dans la vram du pixel)
- emptyPxl:
- inc hl ; on passe au pixel d'après sur l'écran
- inc de ; on passe au pixel d'après sur la sprite
- djnz spriteX ; on loop sur tout les X
- ld bc, 312 ; quand c'est fini on met 320-largeur dans dans bc
- add hl, bc ; on ajoute a hl pour avoir le premier pixel de la ligne d'en dessous
- pop bc ; on remet notre hauteur de la sprite pour la boucle des y
- djnz spriteLoop ; on loop sur tout les y
- call _GetKey ; on admire le résultat :troll:
- ld a, $2D
- ld ($E30018), a ; c'est comme ça qu'on repasse en mode 16 bits pour éviter de tout casser lol
- call _ClrLCDFull
- call _ClrScrnFull
- ret
- Sprite: ; notre première sprite, les nombres sont simplement la couleur du pixel (enfin le numéro de la couleur dans la palette)
- .db 1, 1, 0, 0, 0, 0, 0, 0
- .db 0, 0, 1, 1, 0, 0, 0, 0
- .db 0, 0, 0, 0, 1, 1, 0, 0
- .db 0, 0, 0, 0, 0, 0, 1, 1
- .db 0, 0, 0, 0, 0, 0, 1, 1
- .db 0, 0, 0, 0, 1, 1, 0, 0
- .db 0, 0, 1, 1, 0, 0, 0, 0
- .db 1, 1, 0, 0, 0, 0, 0, 0,0 ; toujours finir une sprite avec un 0 en plus
- Sprite2:
- .db 1, 1, 0, 0, 0, 0, 2, 2
- .db 0, 0, 1, 1, 2, 2, 0, 0
- .db 0, 0, 2, 2, 1, 1, 0, 0
- .db 2, 2, 0, 0, 0, 0, 1, 1
- .db 2, 2, 0, 0, 0, 0, 1, 1
- .db 0, 0, 2, 2, 1, 1, 0, 0
- .db 0, 0, 1, 1, 2, 2, 0, 0
- .db 1, 1, 0, 0, 0, 0, 2, 2,0
Advertisement
Add Comment
Please, Sign In to add comment