MO5 : Routine assembleur SPRITE

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Baptiste
Messages : 121
Inscription : 11 mars 2013 15:17
Localisation : Vernouillet (78)

MO5 : Routine assembleur SPRITE

Message par Baptiste »

Bonjour,

Je recherche une routine en assembleur pour afficher un sprite de 16x16 pour MO5, qui pourra être utilisée à partir d'un programme BASIC.

Merci beaucoup.
Baptiste
Rien ne sert de courir, en plus tu risques de tomber.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: MO5 : Routine assembleur SPRITE

Message par jester »

__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: MO5 : Routine assembleur SPRITE

Message par __sam__ »

Plusieurs questions se posent:
1 es tu familier de l'assembleur
2 idem pour le basic
3 idem de la machine cible
4 l'appel de routines asm depuis le basic
5 tes sprites sont ils monochrome en utilisant les couleurs de fond de l'écrann ou plus sophistiqués avec leur propre coulleurs ?
6 les sprites doivent ils êtres positionnés au pixel près dans l'axe des X?
7 enfin combien de sprites au total maximal à l'écran à chaque instant?

À partir des réponses on peut concevoir un moteur de sprites très correct.


_Wood_ en avait fait un pour mo5 si j ai bonne mémoire (mais hors basic)

si tu visais les to8/9/9+ il y a des possibilités sympa avec l'instruction turtle sans faire d'asm.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Baptiste
Messages : 121
Inscription : 11 mars 2013 15:17
Localisation : Vernouillet (78)

Re: MO5 : Routine assembleur SPRITE

Message par Baptiste »

Bonjour,

Merci pour vos réponses.

Je ne connais pas le langage ASM, mais charger en mémoire une routine et l'appeler depuis le BASIC, ça je sais. J'ai besoin d'une routine qui dessine à l'écran un sprite monochrome (plus simple). J'utilise uniqument mon MO5, donc compatible en priorité pour cette machine.

Un peu comme la routine que j'utilise sur Amstrad. Je charge dans une plage mémoire mes données de sprites. Je charge la routine d'affiche. Ensuite, j'appelle la routine en lui passant 2 paramètres : adresse écran, adresse du sprite.

Une routine qui affiche un sprite de 16x16 peut me suffire, mais si on peut paramétrer les dimensions, ce serait top.

Merci.
Rien ne sert de courir, en plus tu risques de tomber.
Baptiste
Messages : 121
Inscription : 11 mars 2013 15:17
Localisation : Vernouillet (78)

Re: MO5 : Routine assembleur SPRITE

Message par Baptiste »

jester a écrit :il y a peut être ça: http://dcmoto.free.fr/programmes/animatix/index.html
Merci, j'ai regardé c'est juste inutilisable. Effectivement, il y a une routine d'affichage intégrée, mais impossible de dessiner le moindre sprite avec cet outil. C'est vraiment pas intuitif lol

A la rigueur, si je connaissais la structure des fichiers générés, je pourrais développer mon propre outil de tracé.
Rien ne sert de courir, en plus tu risques de tomber.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: MO5 : Routine assembleur SPRITE

Message par Daniel »

La plupart des programmes MO5 en Basic utilisent des caractères graphiques pour afficher des sprites. Avec cette méthode il y a au maximum 2 couleurs par carré de 8x8 pixels. Chaque carré est un caractère, avec 4 caractères on fait un sprite de 16x16, avec 6 on fait 24x16 etc. Chaque caractère est déclaré avec l'instruction DEFGR$.

Le sprite est défini par une chaîne de caractères contenant les séquences utilisateurs pour définir les couleurs d'affichage, les couleurs de fond, les retours à la ligne et les caractères graphiques.

Appelons cette chaîne S$. Pour l'afficher en X,Y il suffit de faire LOCATEX,Y:PRINTS$;

Les inconvénients sont :
1) La nécessité de déplacer les sprites par sauts de 8 pixels, le mouvement n'est pas fluide
2) La lenteur relative de l'affichage en Basic

Pour faire mieux (déplacement par pixel et affichage rapide) la seule solution est d'écrire le programme intégralement en assembleur. Avec un MO5, la plus grosse difficulté est de s'adapter aux contraintes des couleurs : pas plus de 2 couleurs dans chaque segment horizontal de 8 pixels.
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: MO5 : Routine assembleur SPRITE

Message par __sam__ »

Tout à fait Daniel et ne pas oublier de restaurer l'arriere-plan du sprite. Avec 1 seul à l'écran on s'en sors. Avec plus il faut prévoir un ordre d'affichage et l'ordre inverse pour restaurer les portions de fond. Si le fond est uniforme c'est par contre plus simple.

Quoi qu'il en soit, je recommande la technique du DEFGR$ bien plus simple que les sprites au pixels près. À ce sujet qqn ici avait fait un sokoban bien fichu avec des sprites 16*16 en defgr$. Son nom m'echappe. Qu'il me pardonne. ;)
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Baptiste
Messages : 121
Inscription : 11 mars 2013 15:17
Localisation : Vernouillet (78)

Re: MO5 : Routine assembleur SPRITE

Message par Baptiste »

__sam__ a écrit :Quoi qu'il en soit, je recommande la technique du DEFGR$ bien plus simple que les sprites au pixels près. À ce sujet qqn ici avait fait un sokoban bien fichu avec des sprites 16*16 en defgr$. Son nom m'echappe. Qu'il me pardonne. ;)
LOL !!! C'était moi. Oui, la technique du DEFGR$ est ce qui l'y a de plus simple. Je cherche surtout un moyen d'afficher plus rapidement les éléments à l'écran. ne connaissant pas du tout l'assembleur, je voudrai mixer BASIC et routine ASM.

Après des sprites monochromes, affichés sur un fond uniforme, me va très bien.

Je vais tester plus à fond Animatix...
Rien ne sert de courir, en plus tu risques de tomber.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: MO5 : Routine assembleur SPRITE

Message par __sam__ »

lol en effet.

Il me vient une idée: définir les sprites avec defgr$ et utiliser une routine pour afficher rapidement 2x2 caractères defgr$ n'importe où à l'écran en passant l'adresse écran et les 4 no de caractères gr$ à utiliser à la routine asm. Je serais avec mon bon matériel que ce serait vite fait.. Mais là je suis plus que limité en ce moment. :-(

Une routine spécialement dédiée aux gr$ irait à tous les coups bien plus vite que le print du basic.

Il y a un autre outil pour les sprites: cartoon-maker . Je j'ai vu sur to7/70 et je suppose qu'il existe sur mo5 aussi.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Baptiste
Messages : 121
Inscription : 11 mars 2013 15:17
Localisation : Vernouillet (78)

Re: MO5 : Routine assembleur SPRITE

Message par Baptiste »

__sam__ a écrit :(...) Une routine spécialement dédiée aux gr$ irait à tous les coups bien plus vite que le print du basic.
Tout à fait. Je souhaite surtout pouvoir afficher plus rapidement mes caractères. Même si ce n'est pas au pixel près, pas grave, a partir du moment où je gagne en vitesse d'affichage.

Je peux continuer à utiliser la fonction DEFGR$ pour le design, mais une routine d'affichage rapide serait la bienvenue.
Rien ne sert de courir, en plus tu risques de tomber.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: MO5 : Routine assembleur SPRITE

Message par Fool-DupleX »

Et pourquoi ne pas partir de ceci :

http://www.hebdogiciel.free.fr/THOMSON.htm

Chercher "Lutin" sur la page. Ce programme crée de nouvelles instructions BASIC pour animer et tester les collisions entre des sprites de 8x8 (routines en assembleur). On doit pouvoir l'adapter.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: MO5 : Routine assembleur SPRITE

Message par Fool-DupleX »

Je me réponds à moi-même car j'ai trouvé encore mieux :

http://dcmoto.free.fr/documentation/int ... index.html

p.133 et suivantes. C'est pour TO7/70 mais c'est adaptable. 16x16, rapide, au pixel près et ça prend la forme d'une instruction BASIC supplémentaire, donc très facile à utiliser.
Baptiste
Messages : 121
Inscription : 11 mars 2013 15:17
Localisation : Vernouillet (78)

Re: MO5 : Routine assembleur SPRITE

Message par Baptiste »

Fool-DupleX a écrit :(...)
Merci beaucoup !
Rien ne sert de courir, en plus tu risques de tomber.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: MO5 : Routine assembleur SPRITE

Message par Fool-DupleX »

De rien.

Par contre, j'ai jeté un oeil au code, l'adaptation requiert une très bonne connaissance des entrailles de la machine. Je peux filer un coup de main si nécessaire.

Ce qui me ramène à un truc qui m'a toujours manqué cruellement : un désassemblage + documentation complets de l'interpréteur BASIC sur MO5. Ce travail a été fait en grand partie pour le BASIC 512 est c'est super-utile, par exemple sur le TO8.

Mais par exemple, je galère toujours quand il s'agit de rajouter des instructions supplémentaires au BASIC du MO5. Ne serait-ce qu'avoir une doc de la page 0 du BASIC, ce serait bien utile. Avis aux amateurs, car je n'ai malheureusement pas le temps de m'en occuper, sinon il y a bien longtemps que je l'aurais fait ...
Garland_Raven
Messages : 25
Inscription : 19 juin 2017 19:00

Re: MO5 : Routine assembleur SPRITE

Message par Garland_Raven »

This sample is taken from
http://dcmoto.free.fr/documentation/pas ... ement.djvu
page 106

And it's quite amazing.

Code : Tout sélectionner

USERAF      EQU     $2070
PUTCH       EQU     2
CHDRAW      EQU     $2036

            ORG   &32000
            LDX    #DEFGR0
            STX    USERAF
            LDV    #TABLE
DEBUT       LDB     ,U+
            CMPB   #4
            BEQ     SUITE
            CALL   PUTCH
            BRA     DEBUT
SUITE       CLRA
            LDX     #$14
            LDY     #$0C
SUITE2      LDB     #$80
            STB      CHDRAW
            CALL    CHPLH
            JSR      COMPT
            LDB      #$81
            STB      CHDRAW
            CALL    CHPLH
            JSR       COMPT
            INCA
            CMPA    #$32
            BNE      SUITE2
            BRA      FIN
COMPT       PSHS     A
            CLRA    
            CLRB
A1          ADDD    #1 
            CMPD    #$80FF
            BNE       A1
            PULS     A
            RTS
FIN         LDB       #$70
            CALL PUTCH
            STOP
TABLE       FCB   $0C, $1B, $73, $14, $4
DEFGR0      FCB    36, 36, 36, 60, 255, 24, 60, 60
DEFGR1      FCB    129, 66, 36, 60, 60, 90, 189, 60
            END                                         

You can change DEFGR0 and 1 in their respective lines at the bottom, after the end of program execution - these are the 8x8bits defining the single frame.
There are 2 frames here (DEFGR0 and 1) which alternates every 50 times (this is done by CMPA #$32 which compares the "steps" in accumulator A).

Execute from &32000 or $7D00.
Répondre