La Place des Développeurs FUSION-C Codez en C pour MSX les doigts dans le nez !
Bastion Rebel
Membre non connecté
Conseiller Municipal
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
ericb59
Membre non connecté
Conseiller Municipal
@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 Il a été prévu pour les débutant surtout ... Ha ok ... Tu débutes ?
Ca mérite un approfondissement !
@Bastion Rebel : Le livre n'est pas obligatoire Il a été prévu pour les débutant surtout ... Ha ok ... Tu débutes ?
Merci.
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.
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.
ericb59
Membre non connecté
Conseiller Municipal
@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.
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.
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 !
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 :
Edité par
Monos
Le 27/01/2019 à 13h38
//
// 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++;
}
}
}
Visiteur
Vagabond
Message : 0
Monos :
Je pense que c'est Halt(void) Halt avec un H majuscule ?
...
Le HideDisplay ne semble pas trop fonctionner j'ai l'impression.
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
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.
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.
Visiteur
Vagabond
Message : 0
Peut-être avec du biactol ?
Bon, j'ai ajouté des scrolls à ton code, pour le vertical ça fonctionne, mais pour l'horizontal ça ne bouge pas.
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); } };
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 .
ericb59
Membre non connecté
Conseiller Municipal
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
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
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
Visiteur
Vagabond
Message : 0
Utilisation d'arguments en ligne de commande DOS :
donnera :
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
@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
Utilises cet ouvrage de référence en français, par Maitre GDX :
http://msxvillage.fr/upload/pratique_du_msx.zip
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
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
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie