MSX Village forum

La Place des Développeurs asmsx par un noob #1: creer et afficher des sprites... ou tentative de creation d'un jeu en asm

MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 08/10/2014 à 22h00
Voilà, ça n'a pas l'ambition d'être un vrai tuto sur l'assembleur,( même si la démo s'appelle tuto :oups) mais plutôt la description de ce que je sais (ou essaie de ) faire avec asmsx. ça lancera le débat sur le sujet et permettra d'apprendre des trucs (un peu comme sur les posts d'Igal :D ) et peut être de réaliser un vrai jeu à l'arrivée...
Il y aura plusieurs posts pour chaque étape...

Etape1: Création de sprites



Pour créer des sprite le plus pratique que j'ai trouvé c'est TinySpritede janone. Il permet de sortir directement les données dans un fichier texte (ici:data_sprites.asm) pour être exploité par asmsx


il suffira d'intégrer le fichier dans le programme par la ligne:
Code ASM :
.INCLUDE"data_sprites.asm"


Etape2: Affichage de sprites



Je passe sur les initialisations des modes écran etc... Pour le reste les commentaires suffisent...
Code ASM :
;------------------------------------------------
;                 Initialisation
;------------------------------------------------
       .bios
       .page   2
       .rom
       .start  DEBUT
;
;------------------------------------------------
; Constantes VRAM
;------------------------------------------------
       CHRTBL  equ     0000h
       NAMTBL  equ     1800h
       CLRTBL  equ     2000h
       SPRTBL  equ     3800h
       SPRATR  equ     1b00h
;------------------------------------------------
DEBUT:
; sélection screen
       call    DISSCR
; réglage COLOR 11,1,1
        ld      hl,0f3e9h
        ld      [hl],15
        inc     hl
        ld      [hl],12
        inc     hl
        ld      [hl],1
; SCREEN 2
        call    INIGRP
; SCREEN ,2
        ld      bc,06201h
        call    WRTVDP
; Definition des formes sprites
        ld      hl,SPR_PATRON
        ld      de,SPRTBL; + 32
        ld      bc,8*32
        call    LDIRVM
; Definition des attributs sprites
        ld      hl,ATT_SPRITES
        ld      de,SPRATR
        ld      bc,8*4
        call    LDIRVM
 
; Boucle for the future...
LOOP:
 
jpLOOP
;
;----------------------------------------------------------
; Données
;----------------------------------------------------------
;
; Patron des sprites
SPR_PATRON:
.INCLUDE"data_sprites.asm"
;
; Attribut sprites 
;
; X, Y, N°, Couleur
ATT_SPRITES:
db80,80,0,1
db80,80,4,11
db80,160,8,1
db80,160,12,11
db160,80,16,1
db160,80,20,9
db160,160,24,1
db160,160,28,9

Episode suivant



Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 08/10/2014 à 22h04
Houla c'est excellent ça :top

Un poil plus d'explications et se serait parfait.
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 09/10/2014 à 01h17
Le problème de TinySprite, c'est qu'il utilise une particularité des Sprites MSX2 qui bogue trop en Basic.
   
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 09/10/2014 à 08h05
GDX :
Le problème de TinySprite, c'est qu'il utilise une particularité des Sprites MSX2 qui bogue trop en Basic.


ça tombe bien la on est en assembleur et MSX1:D Mais c'est toujours utile de le signaler!:top


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 09/10/2014 à 09h52
Fabf :
Houla c'est excellent ça :top



Un poil plus d'explications et se serait parfait.




Ce post ne se veut pas un tuto sur l'asm, alors pensez à aller consulter les livres tappés par notre Granced dans la bibliothèque du village.



Toutefois:

call WRTVDP: il écrit la valeur b (&h62) dans le registre c (1), ici ça configure entre autre la taille des sprites.



call LDIRVM: envoie un bloc de mémoire de taille bc(ex.:8(nb sprites) * 32 (nb d'octets par sprites) )d' un emplacement mémoire hl (ex.:SPR_PATRON(patrons de sprites définis par tinysprite)) vers la VRAM à l'emplacement de(ex.:SPRTBL (la table des patrons des sprites!))



Par contre pour les attributs de sprite je suis obligé de mettre N°4 pour afficher le sprite 1, 8 pour le 2, etc. c'est du aux sprite 16x16 ?:hum


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10338

Le 09/10/2014 à 10h36
vu les sprites utilisés il faut 2 sprites pour faire un personnage un en color 1 et l'autre en color 11


:noel
Site web    
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 09/10/2014 à 10h39
Merci MSXosaure, j'en demandais pas plus :top
Rien de tel qu'un apprentissage par l'exemple.
Tu compte nous en présenter d'autres ou continuer à rajouter sur celui là ?

GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 09/10/2014 à 11h00
Je n'ai jamais utilisé asMSX. Est-il est obligé d'écrire "ld [hl],15" au lieu de "ld (hl),15" ?
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 09/10/2014 à 11h09
GDX :
Je n'ai jamais utilisé asMSX. Est-il est obligé d'écrire "ld [hl],15" au lieu de "ld (hl),15" ?


Oui, parce que asMSX utilise les parenthèses dans les évaluations d'expressions numériques et/ou de fonctions mathématiques.

Cela fait 6 ans que j'utilise asMSX et cela ne m'a jamais posé de problèmes, on s'y habitue très rapidement.



C'est un très bon cross-assembleur et il est optimisé pour le MSX (macros spéciales, gestion des mappers, ...).

Je lui trouve juste 2 défauts : l'absence de macro personnelles, et un bug qui apparait de temps en temps sur la définition des étiquettes (mais qui se résout facilement)


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
z80 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 956

Le 09/10/2014 à 11h53
GDX :
Le problème de TinySprite, c'est qu'il utilise une particularité des Sprites MSX2 qui bogue trop en Basic.




C'est quoi la fameuse particularité des sprites MSX2 qui bogue?


TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 09/10/2014 à 12h06
Fabf :
Merci MSXosaure, j'en demandais pas plus :top

Rien de tel qu'un apprentissage par l'exemple.

Tu compte nous en présenter d'autres ou continuer à rajouter sur celui là ?




Je compte faire d'autres posts pour éviter que les infos ne se noient dans le flots de réponses/interventions.

Je vais aussi essayer de ne pas trop découper pour éviter de faire trop de nouveaux sujets...


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 777

Le 13/10/2014 à 23h57
Petite mise à jour, j'ai perdu un peu de temps à créer d'autres sprites: haut-gauche-droite-bas-tir-plateforme-ennemi. Comme quoi avant de se lancer dans un projet, il faut savoir ou on va. :oups :D

Je joins le zip contenant les fichiers du programme, des datas des sprites et de la rom:tuto_1.zip

Bon bah c'est bien beau tout ça mais il va falloir que j'essaie de faire bouger ce petit personnage...


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
z80 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 17/05/2013 à 22h52

Messages: 956

Le 14/10/2014 à 08h52
GDX :
Le problème de TinySprite, c'est qu'il utilise une particularité des Sprites MSX2 qui bogue trop en Basic.




Heu.... je vais faire mon empêcheur de tourner en rond, mais GDX, tu ne nous as toujours pas expliqué quel particularité MSX2 est utilisé par TyniSprite? :siffle


TurboR GT (1Mo), CANON V20! ( en kit, modif 2+ en cours) :top
Pas encore retrouvés: V9990, Grafx9000, SUNRISE IDE 2x CF, SUNRISE MOONSOUND, FM PAC, MUSIC MODULE, NMS8280, SD SNATCHER,... :\'(
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 14/10/2014 à 09h07
En basic, dans les modes autres que MSX1, l'instruction PUTSPRITE considère que les sprites liés par la fonction logique des couleurs font un seul Sprite. Ça pourrait être sympa comme fonction si au delà d'un certain nombre de sprite, ça ne buggait pas complètement.



Metalion :
C'est un très bon cross-assembleur et il est optimisé pour le MSX (macros spéciales, gestion des mappers, ...).

Je lui trouve juste 2 défauts : l'absence de macro personnelles, et un bug qui apparait de temps en temps sur la définition des étiquettes (mais qui se résout facilement)


Je ne vois pas ce qui peut être optimisé à part les macros. Un assembleur ne fait qu'assembler les codes machines. C'est au programmeur d'optimiser le programme. Ce n'est pas comme les autres langages. Et puis que veux tu dire par macro personnelles? Edité par GDX Le 14/10/2014 à 09h37
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 14/10/2014 à 11h15
GDX :
Metalion :
C'est un très bon cross-assembleur et il est optimisé pour le MSX (macros spéciales, gestion des mappers, ...).

Je lui trouve juste 2 défauts : l'absence de macro personnelles, et un bug qui apparait de temps en temps sur la définition des étiquettes (mais qui se résout facilement)


Je ne vois pas ce qui peut être optimisé à part les macros. Un assembleur ne fait qu'assembler les codes machines. C'est au programmeur d'optimiser le programme. Ce n'est pas comme les autres langages. Et puis que veux tu dire par macro personnelles?


GDX, je pense qu'avec un peu de volonté, tu aurais pu faire encore plus cassant comme réponse ... ^^

Mais bon, on a l'habitude ... Soit.



Je ne parle pas d'optimisation du code, bien évidemment. Je veux simplement dire que ce cross-assembleur contient des macros spéciales pour le MSX pour gérer plus facilement les ROMs, les MegaROMs, les mappers, ... Il contient aussi en pré-défini tous les noms des routines du BIOS sur les 4 générations de machines. Bref, il est orienté MSX dès le départ.



Et quand je parle de macros personnelles, je parle de la possibilité offerte par certains assembleurs de définir une macro, c'est à dire d'affecter à un nom plusieurs lignes de code.


MSX1: Daewoo DPC-200 / Yamaha CX5M
MSX2: Sony HB-F9P
MSXVR
Vidéo: V9990 (GFX-9)
Audio: MSX-Music (FM-PAC) / MSX-Audio (Audiowave) / OPL4 (Monster Sound FM Blaster) / OPNB (Neotron)
   
Répondre
Sujet verrouillé, vous ne pouvez pas poster de message