MSX Village forum

La Place des Développeurs FUSION-C Codez en C pour MSX les doigts dans le nez !

Monos Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 28/09/2018 à 17h10

Messages: 101

Le 25/01/2019 à 18h53

Reprise du message précédent

J'ai réalisé prisonnier II.
Lien

Voici la librairie que j'ai utilisé.
Lien


Il faut donner à manger à nos machines !
Bastion Rebel Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 21/09/2013 à 07h42

Messages: 1717

Le 25/01/2019 à 19h59
j'ai pas encore le book!!!


TURBO-R FS-A1ST 512/128ko MSX2+ NMS 8250 F4 /Fix Audio /Ram 1/4Mb VDP9958 VRAM 192ko 2FDD SANYO WAVY PHC35J MSX2 NMS 8280 Ram 4Mb VDP9938 VRAM 192ko 2FDD NMS 8250 128/128ko 2FDD VG8235/39 128/128ko 1FDD SONY HB-F700D MSX1 MC810 32/16k VG 8020 64k HB75F 64k HX-22 64k RS232/ CX5M 32k HB501F EXT : My Exp 4X/[b] MegaFlashSCC 512ko/BERT R2/BEER CF/SUNRISE 2CF/FUNRICE V2.01/MAXIOL/MEGASCSI HDD-CD/SDMSX 1SD/FMPAC SRAM/NMS1205+1160/RS 232 Harukaze/GR8NET/DOS2/ HOMER V2 RAM512ko/Floppy Pack/MAXduino/ROM1664/FM Pak /GR8NET /AMIGA/ PC/ RaspB Pi(B) / ARDUINO
E-mail    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 26/01/2019 à 08h39
@Monos : Pas mal le jeu. Merci pour le lien sur la library Master System.
Ca mérite un approfondissement !

@Bastion Rebel : Le livre n'est pas obligatoire :p Il a été prévu pour les débutant surtout ... Ha ok ... Tu débutes ? :p ;)


banniere-ericb59e
Site web    
Monos Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 28/09/2018 à 17h10

Messages: 101

Le 26/01/2019 à 08h58
Merci.

Citation :
Pour le reste des explications sur le Tool Chain, et sur la programmation C, mais ça tu connais déjà apparemment.

Pour la programmation on va dire que j'ai les bases en C et que j'arrive plus ou moins à exploiter ça. Je ne suis pas trop familier encore avec les pointeurs mais c'est ma faute ça xd je ne rentre pas dedans xd Je sais ce que c'est.

Au niveau de la tool chain, ba j'utilise not pad ++ et une autre organisation que la tienne. J'ai testé mon organisation que je fais pour la master system. Après quand on connais les trois bonnes commandes de SDCC pour passer du C à l'assembleur, linkage et compilation !

Par contre sur MS j'ai pas de Code loc. Sur msx à semble être à code-loc 0x107 mais la je ne sais pas à quoi ça correspond. Mais faut dire aussi que j'ai pas encore fait ma recherche, je connais rien de la ram card des MSX. Par contre c'est rigolo, les DATA sont placé à la premier adresse mémoire avec Data loc alors que sur MS c'est en C000 qui correspond au port d'entrée de la cartouche.


Il faut donner à manger à nos machines !
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 26/01/2019 à 09h11
@monos : Sous MSX-DOS le code des programmes démarre toujours à 0x0100. Le codelock à 0x107 c'est pour prendre en compte le décalage dû au crt0 du MSX-DOS. Sinon la vraie valeur pour le DOS c'est bien 0x0100.
Si tu codes pour des ROM le codelock est différent.

Par contre le Datalock à 0x0000 Ne signifie pas que ça commence à 0x0000 Mais que le compilateur va se débrouiller tout seul. Sinon on peut effectivement déterminer une adresse... si on sait ce que l'on fait quoi ...

Pour les pointeurs...Bha... C'est juste accéder à une adresse mémoire en fait ... rien de bien méchant. ;)


banniere-ericb59e
Site web    
Monos Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 28/09/2018 à 17h10

Messages: 101

Le 27/01/2019 à 13h03
Edit pour éviter double poste !
Dans le Quick Manual, page 46 fonction halt :
Je pense que c'est Halt(void)
Halt avec un H majuscule ?

page 32 avec le Vsync et Hsync, tu as marqué void mais tu parles de return 1 ! Void ne retourn rien normalement.
fin édit :
=========
Le HideDisplay ne semble pas trop fonctionner j'ai l'impression.
Je suis en train (Rien à voir avec une locomotive) de tester différent truc !
Normalement je ne devrais pas voir les "tiles" se poser !

Bon mon code n'est pas de l'art mais je test !

Code :
//
// Fusion-C
// My First Program in C
//
#include "header/msx_fusion.h"
#include "header/vdp_sprites.h"
#include "header/vdp_graph2.h"
const unsigned char curseur_1[]={
0b11111111,
0b10000000,
0b10000000,
0b10000000,
0b10000000,
0b10000000,
0b10000000,
0b10000000,    
0b11111111,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,    
0b10000000,
0b10000000,
0b10000000,
0b10000000,
0b10000000,
0b10000000,
0b10000000,    
0b11111111,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,
0b00000001,    
0b11111111,
};
const unsigned char Tiles_Block[]={
// Bloc    
    
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,4,4,4,4,4,4,4,4,4,4,4,4,4,4,13,
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
// Sol
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,2,2,2,2,2,2,2,2,2,2,2,2,2,2,13,
13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13
};
const unsigned char board[]={
1,1,1,1,1,1,1,1,1,1,1,
1,0,0,0,0,0,0,0,0,0,1,    
1,0,0,0,0,0,0,0,0,0,1,    
1,0,0,0,0,0,0,0,0,0,1,    
1,0,0,0,0,0,0,0,0,0,1,    
1,0,0,0,0,0,0,0,0,0,1,    
1,0,0,0,0,0,0,0,0,0,1,    
1,0,0,0,0,0,0,0,0,0,1,    
1,0,0,0,0,0,0,0,0,0,1,    
1,0,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1,1    
};
const unsigned char color_curseur[]={15,15,15,15,15,15,15,15};
void draw_board();
void draw_block(unsigned char px,unsigned char py,unsigned int id_color);
void main(void) 
{
    
    Screen(5);
    RestoreSC5Palette ();
    SetColors(15,0,1);
    Cls();
    HideDisplay;
    
  
    // Préparation du curseur
    SpriteReset();
    SpriteSmall();
    
    SetSpritePattern(0,curseur_1,32);
    
    SC5SpriteColors(0,color_curseur);
    SC5SpriteColors(1,color_curseur);
    SC5SpriteColors(2,color_curseur);
    SC5SpriteColors(3,color_curseur);
    
        PutSprite(0,0,0,0,0);
        PutSprite(1,1,8,0,0);
        PutSprite(2,2,0,8,0);
        PutSprite(3,3,8,8,0);
    
    
draw_board();
ShowDisplay();
    
    
    
    
    
    while(1)
    {
    
    };
}
void draw_board()
{
    unsigned char tiles_x;
    unsigned char tiles_y;
    unsigned char cycle=0;
    
    for (tiles_y=0;tiles_y<11;tiles_y++)
    {
        for (tiles_x=0;tiles_x<11;tiles_x++)
        {
            if (board[cycle]==1)
            {
                
                draw_block(tiles_x*16,tiles_y*16,0);
                
            }
            else if (board[cycle]==0)
            {
             draw_block(tiles_x*16,tiles_y*16,256);
            }
            
            cycle++;
            
                
        }
    }
    
    
    
    
}
 void draw_block(unsigned char px,unsigned char py,unsigned int id_color)
 {
    unsigned int x;
    unsigned int y;
    
    
     
    for(y=0;y<16;y++)
  {
    for(x=0;x<16;x++)
        {
             Pset(px+x,py+y,Tiles_Block[id_color],8);
            id_color++;
        }
    }
     
     
 }
Edité par Monos Le 27/01/2019 à 13h38


Il faut donner à manger à nos machines !
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 27/01/2019 à 17h39
Monos :

Je pense que c'est Halt(void) Halt avec un H majuscule ?
...
Le HideDisplay ne semble pas trop fonctionner j'ai l'impression.


Oui c'est Halt() avec H majuscule.
Ton code fonctionne, il faut HideDisplay(); pour désactiver l'affichage (il manque les parenthèses). SDCC n'est pas très bon pour indiquer les erreurs ou parfois il n'indique pas la bonne ligne.
En revanche, il y a un point noir sur certains tiles... bizarre :hum
   
Monos Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 28/09/2018 à 17h10

Messages: 101

Le 27/01/2019 à 17h52
Merdum. Erreur de débutant merci Sylvain.
Oui pour les points, pas encore testé du tout mais je pensais qu'en travaillant la mémoire vidéo vdp éteint aller résoudre ce problème. bon je suis en mode test de partout.
Merci pour corriger l'erreur.


Il faut donner à manger à nos machines !
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 27/01/2019 à 18h28
Peut-être avec du biactol ? :lol
Bon, j'ai ajouté des scrolls à ton code, pour le vertical ça fonctionne, mais pour l'horizontal ça ne bouge pas.

Code C :
 
#define HAUT 1
#define BAS 5
#define DROITE 3
#define GAUCHE 7
...
    unsigned char v=0,h=0;
...
    while(1)
    { 
        if (JoystickRead(0)==HAUT) { SetScrollV(++v); }
        if (JoystickRead(0)==BAS) { SetScrollV(--v); }
        if (JoystickRead(0)==DROITE) { SetScrollH(++h); }
        if (JoystickRead(0)==GAUCHE) { SetScrollH(--h); }
    };
 
   
Monos Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 28/09/2018 à 17h10

Messages: 101

Le 27/01/2019 à 18h31
Le MSX2 ne gère pas le scrool horizontal si je ne dit pas de bêtise.


Il faut donner à manger à nos machines !
Monos Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 28/09/2018 à 17h10

Messages: 101

Le 28/01/2019 à 06h55

Bon voila ou j'en suis sur mes tests et un semblant début de portage de prisonnier sur msx2.
J'utilise les rectangles pour le sol et les murs.

J'aimerais bien passer quand même en mode "tiles". Mais j'ai pas encore tout saisis les modes et les adresses des VDP. Cela va venir.
C'est rigolot de se pencher sur une nouvelle machine. Finalement unjeu c'est simplement des morceaux image et la gestion des commandes entrée .


Il faut donner à manger à nos machines !
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 28/01/2019 à 08h12
Monos :
Le MSX2 ne gère pas le scrool horizontal si je ne dit pas de bêtise.

Tu as raison, pour le scroll horizontal c'est une fonction pour MSX2+ ou Turbo-R.

Sinon, qu'as tu fait pour ne plus avoir les points noirs ?
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 28/01/2019 à 08h37
Merci Je vais corriger les erreurs dans le manuel.

Contrairement à ce qui est indiqué dans le manuel : SetScrollV focntionne sur MSX2 et 2+, Tandis que SetScrollH ne fonctionne que sur MSX 2+


IsHsync et IsVsync : retournent un Unsigned Char


Citation :
J'aimerais bien passer quand même en mode "tiles". Mais j'ai pas encore tout saisis les modes et les adresses des VDP. Cela va venir.


Fait donc un jeu MSX2. Plutôt que de passer sur un mode Ecran non Bitmap... Peux de gens codent pour MSX2 et je trouve ça bien dommage.

Après en mode Screen 5 Tu as au total 4 Pages "écrans" disponible pour y mettre des Tiles Bitmap. Regarde le code de "Brick Breaker Santa Demo", il tourne en Screen8, donc seulement deux pages de dispo, mais le principe est le même. J'ai une page Ecran principale, et une page où il mes tiles bitmap. Edité par ericb59 Le 28/01/2019 à 08h52


banniere-ericb59e
Site web    
Visiteur

Vagabond

Rang

Avatar

Message : 0

Le 28/01/2019 à 09h37
Utilisation d'arguments en ligne de commande DOS :

Code C :
 
/*
 * testarg.c : Prise en compte des arguments
 */
#include <stdio.h>
 
/*
 * Pour ceux qui y sont habitués, notez l'iversion des paramètres par rapport
 * au classique "int main(int argc, char* argv[])".
 *
 * argc correspond au nombre d'arguments passés après le nom du programme sous DOS
 * argv est un tableau sur pointeur de caractères = tableau de chaines de caractères
 *
 */
int main(char* argv[], int argc)
{
  int i;
  printf("nombre arguments: %d\n\r", argc);
  // l'argument 0 n'est pas le nom de l'exécutable mais le premier argument
  for (i=0;i<argc;i++) {
      printf("%s\n\r",argv[i]);
  }
  return 0;
}
 


donnera :

Code TEXT :
A:\>testarg a b c toto
nombre arguments: 4
a
b
c
toto
 
A:\>
   
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5481

Le 28/01/2019 à 10h23
@Monos : Besoins d'infos sur les mode ecrans des MSX ?
Utilises cet ouvrage de référence en français, par Maitre GDX :
http://msxvillage.fr/upload/pratique_du_msx.zip


banniere-ericb59e
Site web    
Monos Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 28/09/2018 à 17h10

Messages: 101

Le 29/01/2019 à 05h20
LA vache, 358 page, chaud à imprimé la xd
Pré version je vais attendre. Merci, j'ai déja sortie le guide msx de je ne sais plus qui , ma il me semble plus complet...

Edit :
Si si j'ai des glich avec mon affichage pour le moment.
Sinon je viens de comprendre le system de page.
Et aussi cette commande :

HMMC (data, px, py, 16, 16 );
Avec ça je peux mémoriser mon "tiles" sur la disquettes / Cartouche et l'afficher directement à l'écran à l'endroit voulu. C'est cool.
Un peu moins en disquette car ça doit partir en Ram (pas en cartouche normalement vu que mon tableau c'est une constante).
l'idée de la page c'est de libéré la mémoire par contre.
J'ai bien avancé ce matin avant d'aller au boulot. Edité par Monos Le 29/01/2019 à 06h44


Il faut donner à manger à nos machines !
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie