MSX Village forum

La Place des Développeurs [EN COURS] VDP(24) Le scrolling hardware vertical Comment créer un scroll vertical.

igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 23/09/2014 à 16h33
En cherchant à créer un "Scrolling Vertical" ne nécessitant aucun paramètre quant au positionnement de la bribe d'image à charger, je cherche l'éventuelle solution "plus ou moins identique" pour créer une Bribe d'image qui aura les mêmes caractéristiques mais convenant à un "Scrolling Horizontal".

N'étant pas capable de déterminer quel paramètre "Intégré à la bribe" permet de la situer cette bribes dans "l'Espace" entre 0 et 212 inclus, j'attend un coup de main afin d'identifier "Le comment" de la chose.

L'idée étant de voir si il est possible d'une manière ou d'une autre d'obtenir un résulta similaires aux bribes Horizontales mais cette fois sur des bribes verticales.

Concertnant les bribes horizontales, j'ai essayé d'imaginer le fonctionnement et j'en suis venu à l'idée suivante

Une bribe à la particularité de ne pas nécessiter une coordonnée pour l'afficher à un emplacement prédéterminé.
La "prédetermination" se fait lors du BSAVE et consiste à donner une coordonnée de Début et de Fin d'image pour que le MSX l'enregistre comme une Bribe

Voici un exemple simple de générateur de Bribes:
100 BLOAD"00000000.scc",S: BSAVE"10000000.scc",256*0,256*8-1,S
Cette ligne va générer une Bribe d'image avec comme latitude la ligne ZERO!
Sa longueur faisant 256 Pixel et Son épaisseur étant de 8 lignes, cette ligne de commande permet de créer une Bribe qui sera affichée "Spontanément" de la ligne 0 jusqu'à 7.

101 BLOAD"00000001.scc",S: BSAVE"10000001.scc",256*8,256*16-1,S
Cette ligne va générer une Bribe d'image avec comme Latitude 7.
Sa longueur faisant 256 Pixel et Son épaisseur étant de 8 lignes, cette ligne de commande permet de créer une Bribe qui sera affichée "Spontanément" de la ligne 8 jusqu'à 15.

102 BLOAD"00000002.scc",S: BSAVE"10000002.scc",256*16,256*24-1,S
Etc etc...

Nb: On peut créer des Bribes de 4 Lignes comme des bribes d'une seule ligne.
Le but étant de trouver le meilleur compromis entre le temps de recherche de fichier, de chargement de fichier, d'affichage de la bribe et de déplacement du SCREEN pour que le tout se fasse dans les meilleurs conditions.

Voici ou est mon problème:
Le gros problème avec cette méthode est qu'il n'est pas possible de créer une Bribe Verticale sur le même principe.
Pourquoi ?!?!
Simplement parce (Je crois) que le VDP ou le MSX ou la RAM ou encore le TOUT se fait en lecture Horizontale et non verticale.
Le VDP répète l'opération jusqu'au dernier pixel déterminé par la commande BSAVE mais toujours en lisant les lignes Horizontalement.

Voici quelques éléments qui cachent peut être une solution au problème:

Le générateur de Bribes verticales avec 256 Pixels de Longueur et 4 Pixels d'épaisseur:
Code TEXT :
 
10      'SAVE"GEN3.asc",A
20 'generateur de bribes d'images [11x(4x256)]+[(53x(4x256)]
30 VDP(10)=0: SCREEN 12
 
99 CALL CHDIR ("00-01")
 
100 BLOAD"00000000.scc",S: BSAVE"00.scc",256*0,256*4-1,S
101 BLOAD"00000000.scc",S: BSAVE"01.scc",256*4,256*8-1,S
102 BLOAD"00000000.scc",S: BSAVE"02.scc",256*8,256*12-1,S
103 BLOAD"00000000.scc",S: BSAVE"03.scc",256*12,256*16-1,S
104 BLOAD"00000000.scc",S: BSAVE"04.scc",256*16,256*20-1,S
105 BLOAD"00000000.scc",S: BSAVE"05.scc",256*20,256*24-1,S
106 BLOAD"00000000.scc",S: BSAVE"06.scc",256*24,256*28-1,S
107 BLOAD"00000000.scc",S: BSAVE"07.scc",256*28,256*32-1,S
108 BLOAD"00000000.scc",S: BSAVE"08.scc",256*32,256*36-1,S
109 BLOAD"00000000.scc",S: BSAVE"09.scc",256*36,256*40-1,S
110 BLOAD"00000000.scc",S: BSAVE"10.scc",256*40,256*44-1,S
 
111 BLOAD"00000001.scc",S: BSAVE"11.scc",256*0,256*4-1,S
112 BLOAD"00000001.scc",S: BSAVE"12.scc",256*4,256*8-1,S
113 BLOAD"00000001.scc",S: BSAVE"13.scc",256*8,256*12-1,S
114 BLOAD"00000001.scc",S: BSAVE"14.scc",256*12,256*16-1,S
115 BLOAD"00000001.scc",S: BSAVE"15.scc",256*16,256*20-1,S
116 BLOAD"00000001.scc",S: BSAVE"16.scc",256*20,256*24-1,S
117 BLOAD"00000001.scc",S: BSAVE"17.scc",256*24,256*28-1,S
118 BLOAD"00000001.scc",S: BSAVE"18.scc",256*28,256*32-1,S
119 BLOAD"00000001.scc",S: BSAVE"19.scc",256*32,256*36-1,S
120 BLOAD"00000001.scc",S: BSAVE"20.scc",256*36,256*40-1,S
121 BLOAD"00000001.scc",S: BSAVE"21.scc",256*40,256*44-1,S
122 BLOAD"00000001.scc",S: BSAVE"22.scc",256*44,256*48-1,S
123 BLOAD"00000001.scc",S: BSAVE"23.scc",256*48,256*52-1,S
124 BLOAD"00000001.scc",S: BSAVE"24.scc",256*52,256*56-1,S
125 BLOAD"00000001.scc",S: BSAVE"25.scc",256*56,256*60-1,S
126 BLOAD"00000001.scc",S: BSAVE"26.scc",256*60,256*64-1,S
127 BLOAD"00000001.scc",S: BSAVE"27.scc",256*64,256*68-1,S
128 BLOAD"00000001.scc",S: BSAVE"28.scc",256*68,256*72-1,S
129 BLOAD"00000001.scc",S: BSAVE"29.scc",256*72,256*76-1,S
130 BLOAD"00000001.scc",S: BSAVE"30.scc",256*76,256*80-1,S
131 BLOAD"00000001.scc",S: BSAVE"31.scc",256*80,256*84-1,S
132 BLOAD"00000001.scc",S: BSAVE"32.scc",256*84,256*88-1,S
133 BLOAD"00000001.scc",S: BSAVE"33.scc",256*88,256*92-1,S
134 BLOAD"00000001.scc",S: BSAVE"34.scc",256*92,256*96-1,S
135 BLOAD"00000001.scc",S: BSAVE"35.scc",256*96,256*100-1,S
136 BLOAD"00000001.scc",S: BSAVE"36.scc",256*100,256*104-1,S
137 BLOAD"00000001.scc",S: BSAVE"37.scc",256*104,256*108-1,S
138 BLOAD"00000001.scc",S: BSAVE"38.scc",256*108,256*112-1,S
139 BLOAD"00000001.scc",S: BSAVE"39.scc",256*112,256*116-1,S
140 BLOAD"00000001.scc",S: BSAVE"40.scc",256*116,256*120-1,S
141 BLOAD"00000001.scc",S: BSAVE"41.scc",256*120,256*124-1,S
142 BLOAD"00000001.scc",S: BSAVE"42.scc",256*124,256*128-1,S
143 BLOAD"00000001.scc",S: BSAVE"43.scc",256*128,256*132-1,S
144 BLOAD"00000001.scc",S: BSAVE"44.scc",256*132,256*136-1,S
145 BLOAD"00000001.scc",S: BSAVE"45.scc",256*136,256*140-1,S
146 BLOAD"00000001.scc",S: BSAVE"46.scc",256*140,256*144-1,S
147 BLOAD"00000001.scc",S: BSAVE"47.scc",256*144,256*148-1,S
148 BLOAD"00000001.scc",S: BSAVE"48.scc",256*148,256*152-1,S
149 BLOAD"00000001.scc",S: BSAVE"49.scc",256*152,256*156-1,S
150 BLOAD"00000001.scc",S: BSAVE"50.scc",256*156,256*160-1,S
151 BLOAD"00000001.scc",S: BSAVE"51.scc",256*160,256*164-1,S
152 BLOAD"00000001.scc",S: BSAVE"52.scc",256*164,256*168-1,S
153 BLOAD"00000001.scc",S: BSAVE"53.scc",256*168,256*172-1,S
154 BLOAD"00000001.scc",S: BSAVE"54.scc",256*162,256*176-1,S
155 BLOAD"00000001.scc",S: BSAVE"55.scc",256*176,256*180-1,S
156 BLOAD"00000001.scc",S: BSAVE"56.scc",256*180,256*184-1,S
157 BLOAD"00000001.scc",S: BSAVE"57.scc",256*184,256*188-1,S
158 BLOAD"00000001.scc",S: BSAVE"58.scc",256*188,256*192-1,S
159 BLOAD"00000001.scc",S: BSAVE"59.scc",256*192,256*196-1,S
160 BLOAD"00000001.scc",S: BSAVE"60.scc",256*196,256*200-1,S
161 BLOAD"00000001.scc",S: BSAVE"61.scc",256*200,256*204-1,S
162 BLOAD"00000001.scc",S: BSAVE"62.scc",256*204,256*208-1,S
163 BLOAD"00000001.scc",S: BSAVE"63.scc",256*208,256*212-1,S
 


Voici les entêtes des fichiers générés par le générateur de Bribes:


Je me trompe peut être, mais on dirait bien que cela correspond à:

BRIBE 02.SCC
Code TEXT :
 
    00      01       02       03      04      05    06     
    FE      00       04        FF      07      00    04
 


00 => FE => Décimale => 254
01 => 00 => Début Longitude X => colonne "Zero"
02 => 04 => Début Latitude Y => Ligne "Quatre"
03 => FF => fin Longitude => Colonne "deux cent cinquante cinq"
04 => 07 => Fin latitude => Ligne "Sept"
05 => 00 => semble répéter les données inscrites en 01 :moue
06 => 04 => semble répéter les données inscrites en 08 :moue

Il est peut être possible d'agir directement sur les Données indiquées au dessus pour afficher des graphismes à l'écran sans passer par les commandes COPY :top

Reste à voir si il es possible de "former" une "bribe Verticale" avec ces paramètres de la même façon que les bribes horizontales :tchin Edité par igal Le 05/10/2014 à 01h23


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 23/09/2014 à 17h28
Encore une fois, je respecte ta persévérance et ton imagination ;)

Mais la réponse à ta question est non.

BLOAD/BSAVE réalise tout simplement une opération de copie linéaire de la RAM ou de la VRAM vers un média extérieur. Lorsque tu sauvegarde par BSAVE une "bribe" de x pixels de haut, en fait tu demandes simplement au MSX de sauvegarder tous les octets consécutifs de la VRAM compris entre une adresse et une autre (et il intègre ces données dans le fichier).

Lorsque tu charges la bribe par BLOAD, il va rechercher les adresses et la longueur, contenues dans le fichier, et recharge tout simplement les données à partir de l'adresse de début. C'est tout. Et c'est pour cela que tes "bribes" s'affichent "spontanément" au bon endroit, comme tu dis. C'est simplement la reproduction exacte de la portion sauvegardée, en longueur et en adresse dans la VRAM.

BLOAD et BSAVE sont des commandes de sauvegarde de portions de mémoire (RAM ou VRAM), et ne gère donc pas de "coordonnées" au sens "latitude" et "longitude" comme tu l'expliques.

Pour les octets que tu analyses dans le "header" de tes fichiers, ce sont en fait les adresses de début et de fin :

- Bribe 00.SCC : adresse de début $0000 (0000), adresse de fin $03FF (1023) => 00 00 FF 03
- Bribe 01.SCC : adresse de début $0400 (1024), adresse de fin $07FF (2047) => 00 04 FF 07
- Bribe 02.SCC : adresse de début $0800 (2048), adresse de fin $0BFF (3071) => 00 08 FF 0B
- ...

La seule façon, à ma connaissance, de sauvegarder une "bribe" verticale en BASIC, c'est de passer par COPY. Edité par Metalion Le 23/09/2014 à 17h52


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)
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 23/09/2014 à 18h39
Metalion a raison.

Tu peux toujours tester COPY pour créer tes brides sur MSX mais j'ai peur que la lecture soit bien plus longue que pour les bribes horizontales à cause des sauts dans la VRAM.

COPY (X1,Y1)– (X2-Y2),page TO “lec:nom”
Copie la zone s’étendant de X1,Y1 à X2,Y2 vers un fichier nom dans le lecteur lec (A à F) (pour les modes écrans 5 à 8)
Si la page n'est pas précisé l'opération se déroulera sur la page active. Edité par Fabf Le 23/09/2014 à 18h39
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 23/09/2014 à 20h30
et ... pour faire suite à ce qu'à écris Fabf

copy "<non de fichier>" to (x,y),s

s étant la page écran où tu veux envoyer les données graphiques.


banniere-ericb59e
Site web    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5794

Le 23/09/2014 à 22h25
:sick :sick :sick
Apres une journée de Taf, c'est trop violent pour moi ca :oups
Désolé :oups Edité par TurboSEB Le 23/09/2014 à 22h50



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 24/09/2014 à 19h04
De très nombreuses infos détaillées par ici => http://marmsx.msxall.com/msxvw/msxvw5/appendix5c.pdf


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 29/09/2014 à 19h06
Après quelques essais, malgré la lenteur de la commande copy par rapport à bload, copy présente quand même certains avantages très intéressants.

Bload est extrêmement rapide quand il s'agit de charger des Bribes horizontales mais "verouille" le msx jusqu'à ce que le dernier pixel contenu dans le fichier soit chargé.

Copy est beaucoup moins rapide que bload mais présente l'avantage de "rendre la main" avant meme d'afficher le dernier pixel contenu dans le fichier et surtout contrairement à bload, il est possible de charger un "morceau" d'image verticale.

Après de nombreux essais je vais tenter de combiner bload et copy de sorte à recréer un scroll du genre gradius 4 (ps2) avec des décors "haut et bas" d'écran chargés avec bload et un décors central chargé par copy.

Le rendu pourrait très intéressant à la condition d'automatiser le tout par la suite :)

A suivre...


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 29/09/2014 à 19h57
tu vas voir que au final tu vas tout mettre en mémoire RAM et n'utiliser que des Copy ! :lol


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 04/10/2014 à 21h12
ericb59 :
Ca c'était facile !

Maintenant tu fais comment pour mettre un sprite de soldat qui tire sur tout ce qui bouge ? ;) :|



PS : Le scroll normalement il devrait être inversé ... du haut vers le bas...




J'y travaille :top



En attendant de travailler sur les sprites, voici le moteur du SCROLL à reculons!



http://youtu.be/aZXJifixrWk



Voici le listing:

Code TEXT :
 
10 'SAVE"RPLAY13.asc",A
20 'PLAYER REVERSE DE BRIBES DVDP(27)=(N+7)8: VDP(28)=-N AND 7:N=N+1AND255:GOSUB 10000IMAGES [11X(4X256)]+[(53X(4X256)]
30 VDP(10)=0:SCREEN 12,1:X=100:Y=100:P=0:VDP(24)=VDP(24)+170
40 IF P=0 THEN CALL CHDIR ("h-22-23"):GOTO 59
41 IF P=1 THEN CALL CHDIR ("h-20-21"):GOTO 59
42 IF P=2 THEN CALL CHDIR ("h-18-19"):GOTO 59
43 IF P=3 THEN CALL CHDIR ("h-16-17"):GOTO 59
44 IF P=4 THEN CALL CHDIR ("h-14-15"):GOTO 59
45 IF P=5 THEN CALL CHDIR ("h-12-13"):GOTO 59
46 IF P=6 THEN CALL CHDIR ("h-10-11"):GOTO 59
47 IF P=7 THEN CALL CHDIR ("h-08-09"):GOTO 59
48 IF P=8 THEN CALL CHDIR ("h-06-07"):GOTO 59
49 IF P=9 THEN CALL CHDIR ("h-04-05"):GOTO 59
50 IF P=10 THEN CALL CHDIR ("h-02-03"):GOTO 59
51 IF P=11 THEN CALL CHDIR ("h-00-01"):P=-1:GOTO 59
59 BLOAD"63.scc",S:GOSUB 10000
60 BLOAD"62.scc",S:GOSUB 10000
70 BLOAD"61.scc",S:GOSUB 10000
80 BLOAD"60.scc",S:GOSUB 10000
90 BLOAD"59.scc",S:GOSUB 10000
100 BLOAD"58.scc",S:GOSUB 10000
110 BLOAD"57.scc",S:GOSUB 10000
120 BLOAD"56.scc",S:GOSUB 10000
130 BLOAD"55.scc",S:GOSUB 10000
140 BLOAD"54.scc",S:GOSUB 10000
150 BLOAD"53.scc",S:GOSUB 10000
160 BLOAD"52.scc",S:GOSUB 10000
170 BLOAD"51.scc",S:GOSUB 10000
180 BLOAD"50.scc",S:GOSUB 10000
190 BLOAD"49.scc",S:GOSUB 10000
200 BLOAD"48.scc",S:GOSUB 10000
210 BLOAD"47.scc",S:GOSUB 10000
220 BLOAD"46.scc",S:GOSUB 10000
230 BLOAD"45.scc",S:GOSUB 10000
240 BLOAD"44.scc",S:GOSUB 10000
250 BLOAD"43.scc",S:GOSUB 10000
260 BLOAD"42.scc",S:GOSUB 10000
270 BLOAD"41.scc",S:GOSUB 10000
280 BLOAD"40.scc",S:GOSUB 10000
290 BLOAD"39.scc",S:GOSUB 10000
300 BLOAD"38.scc",S:GOSUB 10000
310 BLOAD"37.scc",S:GOSUB 10000
320 BLOAD"36.scc",S:GOSUB 10000
330 BLOAD"35.scc",S:GOSUB 10000
340 BLOAD"34.scc",S:GOSUB 10000
350 BLOAD"33.scc",S:GOSUB 10000
360 BLOAD"32.scc",S:GOSUB 10000
370 BLOAD"31.scc",S:GOSUB 10000
380 BLOAD"30.scc",S:GOSUB 10000
390 BLOAD"29.scc",S:GOSUB 10000
400 BLOAD"28.scc",S:GOSUB 10000
410 BLOAD"27.scc",S:GOSUB 10000
420 BLOAD"26.scc",S:GOSUB 10000
430 BLOAD"25.scc",S:GOSUB 10000
440 BLOAD"24.scc",S:GOSUB 10000
450 BLOAD"23.scc",S:GOSUB 10000
460 BLOAD"22.scc",S:GOSUB 10000
470 BLOAD"21.scc",S:GOSUB 10000
480 BLOAD"20.scc",S:GOSUB 10000
490 BLOAD"19.scc",S:GOSUB 10000
500 BLOAD"18.scc",S:GOSUB 10000
510 BLOAD"17.scc",S:GOSUB 10000
520 BLOAD"16.scc",S:GOSUB 10000
530 BLOAD"15.scc",S:GOSUB 10000
540 BLOAD"14.scc",S:GOSUB 10000
550 BLOAD"13.scc",S:GOSUB 10000
560 BLOAD"12.scc",S:GOSUB 10000
570 BLOAD"11.scc",S:GOSUB 10000
580 BLOAD"10.scc",S,0-11264:GOSUB 10000
590 BLOAD"09.scc",S,0-11264:GOSUB 10000
600 BLOAD"08.scc",S,0-11264:GOSUB 10000
610 BLOAD"07.scc",S,0-11264:GOSUB 10000
620 BLOAD"06.scc",S,0-11264:GOSUB 10000
630 BLOAD"05.scc",S,0-11264:GOSUB 10000
640 BLOAD"04.scc",S,0-11264:GOSUB 10000
650 BLOAD"03.scc",S,0-11264:GOSUB 10000
660 BLOAD"02.scc",S,0-11264:GOSUB 10000
670 BLOAD"01.scc",S,0-11264:GOSUB 10000
680 BLOAD"00.scc",S,0-11264:GOSUB 10000
690 CALL CHDIR (".."):P=P+1:GOTO40
1350 '
10000 VDP(24)=VDP(24)+252AND255:PUTSPRITE0,(X,Y),7,0:S=STICK(0):ONS+1 GOSUB 11000,12000,13000,14000,15000,16000,17000,18000,19000:RETURN
10010 '
11000 'STATIQUE
11010 RETURN
11020 '
12000 'HAUT
12010 Y=Y-8:RETURN
12020 '
13000 'DIAGO HAUT DROITE
13010 Y=Y-16:VDP(27)=VDP(27)+1AND255:RETURN
13020 '
14000 'DROITE
14010 VDP(27)=VDP(27)+1AND255:RETURN
14020 '
15000 'DIAGO DROITE BAS
15010 Y=Y+16:VDP(27)=VDP(27)+1AND255::RETURN
15020 '
15030 '
16000 'BAS
16010 Y=Y+8:RETURN
16020 '
17000 'DIAGO BAS GAUCHE
17010 Y=Y+16:VDP(27)=VDP(27)+255AND255:RETURN
17020 '
18000 'GAUCHE
18010 VDP(27)=VDP(27)+255AND255:RETURN
18020 '
19000 'DIAGO HAUT GAUCHE
19010 VDP(27)=VDP(27)+255AND255:Y=Y-16:RETURN
 




Voici le listing quasiment identique pour un SCROLL de haut en bas.

Code TEXT :
 
10 'SAVE"VPLAY13.asc",A
20 'PLAYER DE BRIBES DVDP(27)=(N+7)8: VDP(28)=-N AND 7:N=N+1AND255:GOSUB 10000IMAGES [11X(4X256)]+[(53X(4X256)]
30 VDP(10)=0:SCREEN 12,1:X=100:Y=100:P=0:'VDP(24)=VDP(24)+212
40 IF P=0 THEN CALL CHDIR ("h-00-01"):GOTO 59
41 IF P=1 THEN CALL CHDIR ("h-02-03"):GOTO 59
42 IF P=2 THEN CALL CHDIR ("h-04-05"):GOTO 59
43 IF P=3 THEN CALL CHDIR ("h-06-07"):GOTO 59
44 IF P=4 THEN CALL CHDIR ("h-08-09"):GOTO 59
45 IF P=5 THEN CALL CHDIR ("h-10-11"):GOTO 59
46 IF P=6 THEN CALL CHDIR ("h-12-13"):GOTO 59
47 IF P=7 THEN CALL CHDIR ("h-14-15"):GOTO 59
48 IF P=8 THEN CALL CHDIR ("h-16-17"):GOTO 59
49 IF P=9 THEN CALL CHDIR ("h-18-19"):GOTO 59
50 IF P=10 THEN CALL CHDIR ("h-20-21"):GOTO 59
51 IF P=11 THEN CALL CHDIR ("h-22-23"):P=-1:GOTO 59
59 BLOAD"00.scc",S,0-11264:GOSUB 10000
60 BLOAD"01.scc",S,0-11264:GOSUB 10000
70 BLOAD"02.scc",S,0-11264:GOSUB 10000
80 BLOAD"03.scc",S,0-11264:GOSUB 10000
90 BLOAD"04.scc",S,0-11264:GOSUB 10000
100 BLOAD"05.scc",S,0-11264:GOSUB 10000
110 BLOAD"06.scc",S,0-11264:GOSUB 10000
120 BLOAD"07.scc",S,0-11264:GOSUB 10000
130 BLOAD"08.scc",S,0-11264:GOSUB 10000
140 BLOAD"09.scc",S,0-11264:GOSUB 10000
150 BLOAD"10.scc",S,0-11264:GOSUB 10000
160 BLOAD"11.scc",S:GOSUB 10000
170 BLOAD"12.scc",S:GOSUB 10000
180 BLOAD"13.scc",S:GOSUB 10000
190 BLOAD"14.scc",S:GOSUB 10000
200 BLOAD"15.scc",S:GOSUB 10000
210 BLOAD"16.scc",S:GOSUB 10000
220 BLOAD"17.scc",S:GOSUB 10000
230 BLOAD"18.scc",S:GOSUB 10000
240 BLOAD"19.scc",S:GOSUB 10000
250 BLOAD"20.scc",S:GOSUB 10000
260 BLOAD"21.scc",S:GOSUB 10000
270 BLOAD"22.scc",S:GOSUB 10000
280 BLOAD"23.scc",S:GOSUB 10000
290 BLOAD"24.scc",S:GOSUB 10000
300 BLOAD"25.scc",S:GOSUB 10000
310 BLOAD"26.scc",S:GOSUB 10000
320 BLOAD"27.scc",S:GOSUB 10000
330 BLOAD"28.scc",S:GOSUB 10000
340 BLOAD"29.scc",S:GOSUB 10000
350 BLOAD"30.scc",S:GOSUB 10000
360 BLOAD"31.scc",S:GOSUB 10000
370 BLOAD"32.scc",S:GOSUB 10000
380 BLOAD"33.scc",S:GOSUB 10000
390 BLOAD"34.scc",S:GOSUB 10000
400 BLOAD"35.scc",S:GOSUB 10000
410 BLOAD"36.scc",S:GOSUB 10000
420 BLOAD"37.scc",S:GOSUB 10000
430 BLOAD"38.scc",S:GOSUB 10000
440 BLOAD"39.scc",S:GOSUB 10000
450 BLOAD"40.scc",S:GOSUB 10000
460 BLOAD"41.scc",S:GOSUB 10000
470 BLOAD"42.scc",S:GOSUB 10000
480 BLOAD"43.scc",S:GOSUB 10000
490 BLOAD"44.scc",S:GOSUB 10000
500 BLOAD"45.scc",S:GOSUB 10000
510 BLOAD"46.scc",S:GOSUB 10000
520 BLOAD"47.scc",S:GOSUB 10000
530 BLOAD"48.scc",S:GOSUB 10000
540 BLOAD"49.scc",S:GOSUB 10000
550 BLOAD"50.scc",S:GOSUB 10000
560 BLOAD"51.scc",S:GOSUB 10000
570 BLOAD"52.scc",S:GOSUB 10000
580 BLOAD"53.scc",S:GOSUB 10000
590 BLOAD"54.scc",S:GOSUB 10000
600 BLOAD"55.scc",S:GOSUB 10000
610 BLOAD"56.scc",S:GOSUB 10000
620 BLOAD"57.scc",S:GOSUB 10000
630 BLOAD"58.scc",S:GOSUB 10000
640 BLOAD"59.scc",S:GOSUB 10000
650 BLOAD"60.scc",S:GOSUB 10000
660 BLOAD"61.scc",S:GOSUB 10000
670 BLOAD"62.scc",S:GOSUB 10000
680 BLOAD"63.scc",S:GOSUB 10000
690 CALL CHDIR (".."):P=P+1:GOTO40
1350 '
10000 VDP(24)=VDP(24)+4AND255:PUTSPRITE0,(X,Y),7,0:S=STICK(0):ONS+1 GOSUB 11000,12000,13000,14000,15000,16000,17000,18000,19000:RETURN
10010 '
11000 'STATIQUE
11010 RETURN
11020 '
12000 'HAUT
12010 Y=Y-8:RETURN
12020 '
13000 'DIAGO HAUT DROITE
13010 Y=Y-16:VDP(27)=VDP(27)+1AND255:RETURN
13020 '
14000 'DROITE
14010 VDP(27)=VDP(27)+1AND255:RETURN
14020 '
15000 'DIAGO DROITE BAS
15010 Y=Y+16:VDP(27)=VDP(27)+1AND255::RETURN
15020 '
15030 '
16000 'BAS
16010 Y=Y+8:RETURN
16020 '
17000 'DIAGO BAS GAUCHE
17010 Y=Y+16:VDP(27)=VDP(27)+255AND255:RETURN
17020 '
18000 'GAUCHE
18010 VDP(27)=VDP(27)+255AND255:RETURN
18020 '
19000 'DIAGO HAUT GAUCHE
19010 VDP(27)=VDP(27)+255AND255:RETURN
 




Voici les modifications à apporter pour inverser le SCROLL:

1) Inverser l'ordre des répertoires contenants les bribes.

2) inverser l'ordre de chargement des bribes.

3) Changer la incrémentation de VDP(24) en remplaçant: +4AND255 par +252AND255



Voila tout. Edité par igal Le 04/10/2014 à 22h37


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 04/10/2014 à 21h16
bravo dejà pour ca igal...
après pour l'exploiter dans un jeu, je ne sais pas comment tu vas faire ?


banniere-ericb59e
Site web    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5794

Le 04/10/2014 à 21h17
Cool :top
Tres interessant pour créé une video de fond pour y surimposer des sprites ^^



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10348

Le 05/10/2014 à 10h49
avec un jeu du genre andorogynus le vitesse n'est pas nécessaire ;)


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 05/10/2014 à 14h45
Effectivement y a plus rapide sur msx mais au final, le scroll devrait se faire par pas de 2 ou encore pixel par pixel.

Sachant que les bribes sont chargées tous les 4 pixels, on devrait avoir en théorie une "capacite/vitesse" de deplacement du héros de 2 à 4 fois plus rapide que la vitesse du scroll.

@eric: il est possible "d'injecter" des ennemis de façon très précise puisque l'on peut les faire apparaître à 62 instants prédéterminés.

Pour ce qui est de l'interaction entre les spirites, on peut considérer deux approches différentes.
1) Soit le héros à un "longitude" fixe et il suffirait de faire exploser n'importe quel ennemi lorsque ce dernier se trouve sur la même longitude lorsque le sous programme "ON STRIG GOSUB " est lancé.

2) avec un hero completement libre, Il est possible d'utiliser la commande "ON SPRITES GOSUB" habituel.

Code TEXT :
 
10 'SAVE"RPLAY15.asc",A
20 'CALL CHDIR ("h-0")
30 'PLAYER DE BRIBES HORIZONTAL [22X(2X256)]+[(106X(4X256)]
40 VDP(10)=0:SCREEN 10:SET PAGE 0,1:VDP(12)=&B001000000:VDP(6)=&B00111111:VDP(7)=&B00000000:BLOAD"prima.sca",S:CALL CHDIR ("h-0")
50 N=2:P=0:R=0:X=100:Y=100
60 IF P=0THEN CALL CHDIR (".."):CALL CHDIR ("M-0"):GOSUB 220
70 IF P=1THEN CALL CHDIR (".."):CALL CHDIR ("M-1"):GOTO220
80 IF P=2THEN CALL CHDIR (".."):CALL CHDIR ("M-2"):GOTO220
90 IF P=3THEN CALL CHDIR (".."):CALL CHDIR ("M-3"):GOTO220
100 IF P=4THEN CALL CHDIR (".."):CALL CHDIR ("M-4"):GOTO220
110 IF P=5THEN CALL CHDIR (".."):CALL CHDIR ("M-5"):GOTO220
120 IF P=6THEN CALL CHDIR (".."):CALL CHDIR ("M-6"):GOTO220
130 IF P=7THEN CALL CHDIR (".."):CALL CHDIR ("M-7"):GOTO220
140 IF P=8THEN CALL CHDIR (".."):CALL CHDIR ("M-8"):GOTO220
150 IF P=9THEN CALL CHDIR (".."):CALL CHDIR ("M-9"):GOTO220
160 IF P=10THEN CALL CHDIR (".."):CALL CHDIR ("M-A"):GOTO220
170 IF P=11THEN CALL CHDIR (".."):CALL CHDIR ("M-B"):GOTO220
180 IF P=12THEN CALL CHDIR (".."):CALL CHDIR ("M-C"):GOTO220
190 IF P=13THEN CALL CHDIR (".."):CALL CHDIR ("M-D"):GOTO220
200 IF P=14THEN CALL CHDIR (".."):CALL CHDIR ("M-E"):GOTO220
210 IF P=15THEN CALL CHDIR (".."):CALL CHDIR ("M-F"):P=0
220 CALL CHDIR ("0")
222  BLOAD"0",S,0-11264:GOSUB 1510
224  BLOAD"1",S,0-11264:GOSUB 1510
226  BLOAD"2",S,0-11264:GOSUB 1510
228  BLOAD"3",S,0-11264:GOSUB 1510
230  BLOAD"4",S,0-11264:GOSUB 1510
232  BLOAD"5",S,0-11264:GOSUB 1510
234  BLOAD"6",S,0-11264:GOSUB 1510
236  BLOAD"7",S,0-11264:GOSUB 1510
238  BLOAD"8",S,0-11264:GOSUB 1510
240  BLOAD"9",S,0-11264:GOSUB 1510
242  BLOAD"A",S,0-11264:GOSUB 1510
244  BLOAD"B",S,0-11264:GOSUB 1510
246  BLOAD"C",S,0-11264:GOSUB 1510
248  BLOAD"D",S,0-11264:GOSUB 1510
250  BLOAD"E",S,0-11264:GOSUB 1510
252  BLOAD"F",S,0-11264:GOSUB 1510
254 R=R+1:CALL CHDIR (".."):CALL CHDIR ("1")
256 BLOAD"0",S,0-11264:GOSUB 1510
258 BLOAD"1",S,0-11264:GOSUB 1510
260 BLOAD"2",S,0-11264:GOSUB 1510
262 BLOAD"3",S,0-11264:GOSUB 1510
264 BLOAD"4",S,0-11264:GOSUB 1510
266 BLOAD"5",S,0-11264:GOSUB 1510
268 BLOAD"6",S:GOSUB 1510
270 BLOAD"7",S:GOSUB 1510
272 BLOAD"8",S:GOSUB 1510
274 BLOAD"9",S:GOSUB 1510
276 BLOAD"A",S:GOSUB 1510
278 BLOAD"B",S:GOSUB 1510
280 BLOAD"C",S:GOSUB 1510
282 BLOAD"D",S:GOSUB 1510
284 BLOAD"E",S:GOSUB 1510
286 BLOAD"F",S:GOSUB 1510
288 R=R+1:CALL CHDIR (".."):CALL CHDIR ("2"):GOTO 300
290 IF R=3THEN CALL CHDIR ("3"):GOTO 300
292 IF R=4THEN CALL CHDIR ("4"):GOTO 300
294 IF R=5THEN CALL CHDIR ("5"):GOTO 300
296 IF R=6THEN CALL CHDIR ("6"):GOTO 300
298 IF R=7THEN CALL CHDIR ("7"):GOTO 300
300 IF R=8THEN R=0 : P=P+1 : GOTO 60
301 BLOAD"0",S:GOSUB 1510
302 BLOAD"1",S:GOSUB 1510
304 BLOAD"2",S:GOSUB 1510
306 BLOAD"3",S:GOSUB 1510
308 BLOAD"4",S:GOSUB 1510
310 BLOAD"5",S:GOSUB 1510
312 BLOAD"6",S:GOSUB 1510
314 BLOAD"7",S:GOSUB 1510
316 BLOAD"8",S:GOSUB 1510
318 BLOAD"9",S:GOSUB 1510
320 BLOAD"A",S:GOSUB 1510
322 BLOAD"B",S:GOSUB 1510
324 BLOAD"C",S:GOSUB 1510
326 BLOAD"D",S:GOSUB 1510
328 BLOAD"E",S:GOSUB 1510
330 BLOAD"F",S:GOSUB 1510
332 R=R+1:CALL CHDIR (".."):GOTO 290
1500 '
1510 Y=Y+2AND255:COPY(0,0)-(3,3),0TO(X,Y),0:VDP(24)=VDP(24)+252and255:N=N+2AND255:IFSTRIG(0)THENGOSUB2000
1515 S=STICK(0):ONS+1 GOSUB 1530,1560,1590,1620,1650,1690,1720,1750,1780:RETURN
1520 '
1530 'STATIQUE
1540 RETURN
1550 '
1560 'HAUT
1570 Y=Y-2AND255:RETURN
1580 '
1590 'DIAGO HAUT DROITE
1600 X=X+2AND255:Y=Y-2AND255:RETURN
1610 '
1620 'DROITE
1630 X=X+2AND255:RETURN
1640 '
1650 'DROITE BAS
1660 X=X+2AND255:Y=Y+2AND255:RETURN
1670 '
1680 '
1690 'BAS
1700 Y=Y+2AND255:RETURN
1710 '
1720 'DIAGO BAS GAUCHE
1730 X=X-4AND255:Y=Y+2AND255:RETURN
1740 '
1750 'GAUCHE
1760 X=X-4AND255:RETURN
1770 '
1780 'DIAGO HAUT GAUCHE
1790 X=X-4:Y=Y-2:RETURN
2000 '
2010 'BETA MAPPE Longitude "X" '(Sélécteur de Colonnes)
2020 CALL CHDIR ("..")
2020 IF X>239THEN CALL CHDIR ("B-F"): GOTO 3000
2030 IF X>223THEN CALL CHDIR ("B-E"): GOTO 3000
2040 IF X>207THEN CALL CHDIR ("B-D"): GOTO 3000
2030 IF X>191THEN CALL CHDIR ("B-C"): GOTO 3000
2040 IF X>175THEN CALL CHDIR ("B-B"): GOTO 3000
2050 IF X>159THEN CALL CHDIR ("B-A"): GOTO 3000
2060 IF X>143THEN CALL CHDIR ("B-9"): GOTO 3000
2070 IF X>127THEN CALL CHDIR ("B-8"): GOTO 3000
2080 IF X>111THEN CALL CHDIR ("B-7"): GOTO 3000
2090 IF X>95THEN CALL CHDIR ("B-6"): GOTO 3000
2100 IF X>79THEN CALL CHDIR ("B-5"): GOTO 3000
2110 IF X>63THEN CALL CHDIR ("B-4"): GOTO 3000
2120 IF X>47THEN CALL CHDIR ("B-3"): GOTO 3000
2130 IF X>31THEN CALL CHDIR ("B-2"): GOTO 3000
2140 IF X>15THEN CALL CHDIR ("B-1"): GOTO 3000
2150 IF X>-1THEN CALL CHDIR ("B-0"): GOTO 3000
 
3000 '
3010 'BETA MAPPE Latitude "Y" (Selecteur de bribes)
3020 IF Y>239THEN CALL CHDIR ("B-F"): GOTO 4000
3030 IF Y>223THEN CALL CHDIR ("B-E"): GOTO 4000
3040 IF Y>207THEN CALL CHDIR ("B-D"): GOTO 4000
3030 IF Y>191THEN CALL CHDIR ("B-C"): GOTO 4000
3040 IF Y>175THEN CALL CHDIR ("B-B"): GOTO 4000
3050 IF Y>159THEN CALL CHDIR ("B-A"): GOTO 4000
3060 IF Y>143THEN CALL CHDIR ("B-9"): GOTO 4000
3070 IF Y>127THEN CALL CHDIR ("B-8"): GOTO 4000
3080 IF Y>111THEN CALL CHDIR ("B-7"): GOTO 4000
3090 IF Y>95THEN CALL CHDIR ("B-6"): GOTO 4000
3100 IF Y>79THEN CALL CHDIR ("B-5"): GOTO 4000
3110 IF Y>63THEN E=5: GOTO 
3120 IF Y>47THEN E=4: GOTO 4272
3130 IF Y>31THEN E=3: GOTO 4254
3140 IF Y>15THEN E=2: GOTO 4238
3150 IF Y>-1THEN E=1: GOTO 4220
 
 
4000 ' BRIBES BETA (Lecteur de Bribes par groupe de 8)
4220 '
4222  CALL CHDIR ("0"):BLOAD"0",S,0-11264
4224  BLOAD"1",S,0-11264
4226  BLOAD"2",S,0-11264
4228  BLOAD"3",S,0-11264
4230  BLOAD"4",S,0-11264
4232  BLOAD"5",S,0-11264
4234  BLOAD"6",S,0-11264
4236  BLOAD"7",S,0-11264:CALL CHDIR (".."):RETURN1515
 
4238  CALL CHDIR ("0"):BLOAD"8",S,0-11264
4240  BLOAD"9",S,0-11264
4242  BLOAD"A",S,0-11264
4244  BLOAD"B",S,0-11264
4246  BLOAD"C",S,0-11264
4248  BLOAD"D",S,0-11264
4250  BLOAD"E",S,0-11264
4252  BLOAD"F",S,0-11264:CALL CHDIR (".."):RETURN1515
 
4254 CALL CHDIR (".."):CALL CHDIR ("1"):BLOAD"0",S,0-11264
4258 BLOAD"1",S,0-11264
4260 BLOAD"2",S,0-11264
4262 BLOAD"3",S,0-11264
4264 BLOAD"4",S,0-11264
4266 BLOAD"5",S,0-11264
4268 BLOAD"6",S
4270 BLOAD"7",S:CALL CHDIR (".."):RETURN1515
 
4272 CALL CHDIR (".."):CALL CHDIR ("1"):BLOAD"8",S
4274 BLOAD"9",S
4276 BLOAD"A",S
4278 BLOAD"B",S
4280 BLOAD"C",S
4282 BLOAD"D",S
4284 BLOAD"E",S
4286 BLOAD"F",S:CALL CHDIR (".."):RETURN1515
 
4301 BLOAD"0",S:GOSUB 1510
4302 BLOAD"1",S:GOSUB 1510
4304 BLOAD"2",S:GOSUB 1510
4306 BLOAD"3",S:GOSUB 1510
4308 BLOAD"4",S:GOSUB 1510
4310 BLOAD"5",S:GOSUB 1510
4312 BLOAD"6",S:GOSUB 1510
4314 BLOAD"7",S:GOSUB 1510
4316 BLOAD"8",S:GOSUB 1510
4318 BLOAD"9",S:GOSUB 1510
4320 BLOAD"A",S:GOSUB 1510
4322 BLOAD"B",S:GOSUB 1510
4324 BLOAD"C",S:GOSUB 1510
4326 BLOAD"D",S:GOSUB 1510
4328 BLOAD"E",S:GOSUB 1510
4330 BLOAD"F",S:GOSUB 1510
4332 R=R+1:CALL CHDIR (".."):GOTO 290
1500 '
1510 Y=Y+2AND255:COPY(0,0)-(3,3),0TO(X,Y),0:VDP(24)=VDP(24)+252and255:N=N+2AND255:IFSTRIG(0)THENGOSUB2000
1515 S=STICK(0):ONS+1 GOSUB 1530,1560,1590,1620,1650,1690,1720,1750,1780:RETURN
 
Edité par igal Le 23/10/2014 à 15h42


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5485

Le 08/01/2016 à 13h34
Igal, j'aimerais expérimenté la lecture depuis les secteurs du disk pour faire un scrolling Vertical, et voir si il reste du temps machine pour faire autre chose...

Peux tu me fournir les fichiers d'un grand décors en screen 8, pour faire le test, par brides de 64 pixels de haut sous forme de fichiers "Bloadables" ?


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 08/01/2016 à 15h20
Pas de soucis. J'essais de te faire ça ce soir :)

Pour les lignes de 212 à 255 (44 lignes) ça va pas être possible :( Edité par igal Le 08/01/2016 à 15h25


Tiens... voila du boudin, voila du boudin, voila du boudin... :siffle
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie