La Place des Développeurs FUSION-C Codez en C pour MSX les doigts dans le nez !
Bastion Rebel
Membre non connecté
Conseiller Municipal
Reprise du message précédent
suite a mes tests sur un vrai MSX ..machine de test : MSX2 NMS8250 128ko/128ko et MSX2+ SANYO PHC35+FDD 64ko/128ko
le RAM MAPPER deconne il trouve plein de slot et de bank alors qu'il n'y as que 128ko dans le slot 3.2 (#8B) bizarre et pour le 2+ c'est pareil ???
concernant le VDP c'est openMSX qui semble le plus proche , du MSX REEL .
BLUEMSX fait un scrolling ??? c'est ce que je lui ai demander j'ai verifier dans le book Pratique du MSX le registre 23 sert pour ca !!! maintenant les 2 ne font pas le meme resultat ???
y as un bug quelque part ??
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
@BastionRebel / Je suis bien content que tu te mette au C... Ben ca n'a pas l'air d'être si chinois que ça...
Par contre ne je sais pas bien si ce que je vois à l'écran, avec ton fichier BR.COM c'est bien ce que tu souhaitais faire ou pas ?
Peux tu poster ton code source, car je ne comprend pas bien quel problème tu soulèves...
Pour l'utilisation des fonctions Mapper je re-précise qu'il faut être sous MSX-DOS 2 , avec une ROM MSX-DOS 2, sinon les routines ne fonctionnent pas.
Par contre ne je sais pas bien si ce que je vois à l'écran, avec ton fichier BR.COM c'est bien ce que tu souhaitais faire ou pas ?
Peux tu poster ton code source, car je ne comprend pas bien quel problème tu soulèves...
Pour l'utilisation des fonctions Mapper je re-précise qu'il faut être sous MSX-DOS 2 , avec une ROM MSX-DOS 2, sinon les routines ne fonctionnent pas.
Bastion Rebel
Membre non connecté
Conseiller Municipal
voila le code ...
//
// Fusion-C
// My First Program in C
//
//#include "fusion-c/header/vars_msxSystem.h"
//#include "fusion-c/header/vars_msxBios.h"
//#include "fusion-c/header/vars_msxDos.h"
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_graph2.h"
#include "fusion-c/header/rammapper.h"
#include <stdio.h>
int i;
int w;
int s;
int x;
int y;
MAPPERINFOBLOCK *table;
void ft_manette(void){
char joy;
joy=JoystickRead(0);
switch (joy)
{
// haut
case 1:
if (y>5)
{
y--;
}
break;
// droite
case 3:
if (x<78)
{
x++;
}
break;
// bas
case 5:
if (y<20)
{
y++;
}
break;
// gauche
case 7:
if (x>1)
{
x--;
}
break;
}
}
void main(void)
{
x=40;
y=10;
Screen(0);
Locate(0,0);
if (ReadMSXtype()==0)
{
Width(40);
Print("MSX 1");
w=40;
}
if (ReadMSXtype()==1)
{
Width(80);
Print("MSX 2");
w=80;
}
if (ReadMSXtype()==2)
{
Width(80);
Print("MSX 2+");
w=80;
}
if (ReadMSXtype()==3)
{
Width(80);
Print("Turbo R");
w=80;
Locate(12,0);
if (GetCPU()==0)
{
Print("Z80");
}
if (GetCPU()==1)
{
Print("R800 ROM");
}
if (GetCPU()==2)
{
Print("R800 RAM");
}
}
Locate(0,1);
if (vMSX()==1)
{
Print("VDP MSX1");
}
if (vMSX()==2)
{
Print("VDP MSX2");
}
Locate(0,16);
InitRamMapperInfo(4);
table = _GetRamMapperBaseTable();
while (table->slot!=0)
{
printf("Slot #%x \r\n",table->slot);
printf("16KB Segments #%x \r\n",table->number16KBSegments);
printf("Free 16KB Segments #%x \r\n",table->numberFree16KBSegments);
printf("Allocated System 16KB Segments #%x \r\n",table->numberAllocatedSystem16KBSegments);
printf("User 16KB Segments #%x \r\n",table->numberUser16KBSegments);
printf("===================== \r\n");
table = table + 1; //one record (8 bytes per record)
}
for (s=0; s<20; s++){
for (i=0; i<8; i++) {
Locate(15,0);
printf("Cmp:%d",s);
FillVram((w*3),204,(w*7));
FillVram((w*10),219,(w*4));
Locate(20,i+15);
Print("oooooooooOOOOOOOOOOO");
FillVram((w*10),32,(w*4));
FillVram((w*3),203,(w*7));
Locate(20,i+15);
Print("OOOOOOOOOooooooooooo");
VDPwrite(23,i);
}
}
VDPwrite(23,0);
for (i=0; i<25; i++)
{
Locate(50,i);
printf("VDP%d",i);
Locate(55,i);
printf("=%d",VDPstatus(i));
}
for (i=0; i<1000; i++)
{
ft_manette();
Locate(x,y);
Print("X");
Locate(x,y);
Print(" ");
Locate(25,0);
printf("x=%d",x);
Locate(30,0);
printf("y=%d",y);
Locate(40,0);
printf("T=%d",i);
}
Locate(0,1);
//fin routine
}
pour le MAPPER Ok je comprend mieux...
pour le Prob VDP en faite quand tu essai sur openMSX tu as une chose et sur bluemsx tu en as une autre ??? l'un scrolle le txt et l'autre tous l'ecran !!
//
// Fusion-C
// My First Program in C
//
//#include "fusion-c/header/vars_msxSystem.h"
//#include "fusion-c/header/vars_msxBios.h"
//#include "fusion-c/header/vars_msxDos.h"
#include "fusion-c/header/msx_fusion.h"
#include "fusion-c/header/vdp_graph2.h"
#include "fusion-c/header/rammapper.h"
#include <stdio.h>
int i;
int w;
int s;
int x;
int y;
MAPPERINFOBLOCK *table;
void ft_manette(void){
char joy;
joy=JoystickRead(0);
switch (joy)
{
// haut
case 1:
if (y>5)
{
y--;
}
break;
// droite
case 3:
if (x<78)
{
x++;
}
break;
// bas
case 5:
if (y<20)
{
y++;
}
break;
// gauche
case 7:
if (x>1)
{
x--;
}
break;
}
}
void main(void)
{
x=40;
y=10;
Screen(0);
Locate(0,0);
if (ReadMSXtype()==0)
{
Width(40);
Print("MSX 1");
w=40;
}
if (ReadMSXtype()==1)
{
Width(80);
Print("MSX 2");
w=80;
}
if (ReadMSXtype()==2)
{
Width(80);
Print("MSX 2+");
w=80;
}
if (ReadMSXtype()==3)
{
Width(80);
Print("Turbo R");
w=80;
Locate(12,0);
if (GetCPU()==0)
{
Print("Z80");
}
if (GetCPU()==1)
{
Print("R800 ROM");
}
if (GetCPU()==2)
{
Print("R800 RAM");
}
}
Locate(0,1);
if (vMSX()==1)
{
Print("VDP MSX1");
}
if (vMSX()==2)
{
Print("VDP MSX2");
}
Locate(0,16);
InitRamMapperInfo(4);
table = _GetRamMapperBaseTable();
while (table->slot!=0)
{
printf("Slot #%x \r\n",table->slot);
printf("16KB Segments #%x \r\n",table->number16KBSegments);
printf("Free 16KB Segments #%x \r\n",table->numberFree16KBSegments);
printf("Allocated System 16KB Segments #%x \r\n",table->numberAllocatedSystem16KBSegments);
printf("User 16KB Segments #%x \r\n",table->numberUser16KBSegments);
printf("===================== \r\n");
table = table + 1; //one record (8 bytes per record)
}
for (s=0; s<20; s++){
for (i=0; i<8; i++) {
Locate(15,0);
printf("Cmp:%d",s);
FillVram((w*3),204,(w*7));
FillVram((w*10),219,(w*4));
Locate(20,i+15);
Print("oooooooooOOOOOOOOOOO");
FillVram((w*10),32,(w*4));
FillVram((w*3),203,(w*7));
Locate(20,i+15);
Print("OOOOOOOOOooooooooooo");
VDPwrite(23,i);
}
}
VDPwrite(23,0);
for (i=0; i<25; i++)
{
Locate(50,i);
printf("VDP%d",i);
Locate(55,i);
printf("=%d",VDPstatus(i));
}
for (i=0; i<1000; i++)
{
ft_manette();
Locate(x,y);
Print("X");
Locate(x,y);
Print(" ");
Locate(25,0);
printf("x=%d",x);
Locate(30,0);
printf("y=%d",y);
Locate(40,0);
printf("T=%d",i);
}
Locate(0,1);
//fin routine
}
pour le MAPPER Ok je comprend mieux...
pour le Prob VDP en faite quand tu essai sur openMSX tu as une chose et sur bluemsx tu en as une autre ??? l'un scrolle le txt et l'autre tous l'ecran !!
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
Bastion Rebel
Membre non connecté
Conseiller Municipal
normal
que sur blue je n'ai pas les meme config !!!
dans le fichier compil
:Emulator
openMSX\openmsx.exe -machine Philips_NMS_8255 -ext msxdos2 -diska dsk\
le NMS8255 a une ext MSXDOS2 !!!
que sur blue je n'ai pas les meme config !!!
dans le fichier compil
:Emulator
openMSX\openmsx.exe -machine Philips_NMS_8255 -ext msxdos2 -diska dsk\
le NMS8255 a une ext MSXDOS2 !!!
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
Bastion Rebel
Membre non connecté
Conseiller Municipal
Monos :
Une video de prisonnier III (ou j'en suis) sur un vrais MSX II !
Faut que je regarde d'ou bien le décalage xd
Merci JP, Et goonies.
Faut que je regarde d'ou bien le décalage xd
Merci JP, Et goonies.
pour ton decalage y as une fonction sous basic
fais un color 15,4,1 pour voir le bord suivant le screen ou tu est !!
setadjust(x,y) les 2 entres -7 et +7
quand le screen est ok
setscreen pour sauvegarder!!!
si la pile marche encore sinon y as pas d'enregistrement en de conservation des parametres !!!
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
@bastion rebel
La routine de scroll Hardware Vertical de FUSION-C : SetSrollV, utilises le port 23 du VDP. Donc je peux te dire qu'il n'y a pas de bug à ce niveau là. Par contre, tu l'utilises sur un mode écran Texte Screen 0... Je me pose la question de savoir du résultat attendu dans ce mode écran ? et de son interpretation dans un émulateur?
Je viens de tester ton programme mais en passant en mode Screen8, et tu as bien un scroll vertical.
Citation :
pour le Prob VDP en faite quand tu essai sur openMSX tu as une chose et sur bluemsx tu en as une autre ??? l'un scrolle le txt et l'autre tous l'ecran !!
La routine de scroll Hardware Vertical de FUSION-C : SetSrollV, utilises le port 23 du VDP. Donc je peux te dire qu'il n'y a pas de bug à ce niveau là. Par contre, tu l'utilises sur un mode écran Texte Screen 0... Je me pose la question de savoir du résultat attendu dans ce mode écran ? et de son interpretation dans un émulateur?
Je viens de tester ton programme mais en passant en mode Screen8, et tu as bien un scroll vertical.
ericb59
Membre non connecté
Conseiller Municipal
Afficher à "droite" l'action que le joueur doit faire.
Cela serais cool pour la démo alpha que j'ai envie de publier la semaine prochaine ! Edité par Monos Le 10/02/2019 à 19h36
ericb59
Membre non connecté
Conseiller Municipal
Attention tu parles de 2 fonctions différentes là :
LMMM et fLMMM
fLMMM est la plus sympa, elle nécessite l'initialisation de la structure MMTASK
qui contient ces éléments :
Attention à la subtilité... avec fLMMM on travaille en mode coordonnées.
En screen 8, tu as deux pages de VRAM qui font chacune 256 x 256 pixels.
Ta première page n'affiche à l'écran que 256 x 212 pixels
Ta seconde page se situe aux coordonnées Y, de 256 à à 511.
Si l'élément graphique que tu veux copier se trouve sur la seconde page de la VRAM aux coordonnées relatives 0,0 et qu'il fait 20 pixels sur 20.
Et que tu veux le copier aux(100,100) de la page 0 affichée à l'écran
LMMM et fLMMM
fLMMM est la plus sympa, elle nécessite l'initialisation de la structure MMTASK
qui contient ces éléments :
Code C :
typedef struct { unsigned int X; // source X (0 to 511) unsigned int Y; // source Y (0 to 1023) unsigned int X2; // destination X (0 to 511) unsigned int Y2; // destination Y (0 to 1023) unsigned int DX; // width (0 to 511) unsigned int DY; // height (0 to 511) unsigned char s0; // set to 0, dummy 1st empty byte sent to chip unsigned char DI; // set to 0 (b), works well from left to right unsigned char LOP; // 0 to copy (a), Logical+Operation ("or"| definitions) } MMMtask;
Attention à la subtilité... avec fLMMM on travaille en mode coordonnées.
En screen 8, tu as deux pages de VRAM qui font chacune 256 x 256 pixels.
Ta première page n'affiche à l'écran que 256 x 212 pixels
Ta seconde page se situe aux coordonnées Y, de 256 à à 511.
Si l'élément graphique que tu veux copier se trouve sur la seconde page de la VRAM aux coordonnées relatives 0,0 et qu'il fait 20 pixels sur 20.
Et que tu veux le copier aux(100,100) de la page 0 affichée à l'écran
Code C :
MMMtask t; t.X = 0; t.Y = 256; t.X2 = 100; t.Y2 = 100; t.DX = 20; t.DY = 20; t.s0 = 0; t.DI = 0; t.LOP = 0; fLMMM(&t);
Code :
HMMC (data_grille, 0, 256, 16, 16 ); // Page 1 ok vu avec débuger
LMMM(0,256,16,16,0,0,0);
J'ai bien le morceau dans page 2 vu que dans mon programme j'arrive à le chercher avec ton screen copy et FLMMM
J'ai peut être loupé une info la !
ericb59
Membre non connecté
Conseiller Municipal
Je ne me souviens plus très bien, car j'ai surtout travaillé avec FLMMM.
Il me semble me souvenir que LMMM ne fonctionne que sur la Page VRAM Active. DOnc pas pour aller copier un élément graphique d'une autre page.
Je vérifie dans le code source demain, mais ça doit être ça.
Il me semble me souvenir que LMMM ne fonctionne que sur la Page VRAM Active. DOnc pas pour aller copier un élément graphique d'une autre page.
Je vérifie dans le code source demain, mais ça doit être ça.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie