MSX Village forum

La Place des Développeurs [RESOLU] VDP(27) le Scrolling hardware Horizontal Comment alimenter de nouveaux décors VDP (27)?

igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 09/12/2013 à 11h25
Salut à tous.

La commande VDP(27)=VDP(27)-1AND255 permet de faire scrooler horizontalement une page BLOAD"IMAGE.SCx",S précédemment chargée.
Nb: VDP(27)=VDP(27)+1AND255 fait dérouler dans l'autre sens :D

L'effet est très impressionnant mais sans intérêt si l'on ne renouvelle/génère pas de nouveaux décors.

Je cherche donc un moyen très simple "d'injecter" des décors simultanément au déroulement du SCROLL!

Pour le moment, voici à quoi ressemble le programme:

Code TEXT :
 
10 'SAVE"SCROOL.ASC",a
20 VDP(10)=0:SCREEN12,,,,,1
30 BLOAD"IMAGE.SCC",S
40 VDP(27)=VDP(27)-1AND255: ' [+1AND255] pour dérouler dans l'autre sens!
50 GOTO 40
 


Merci de vôtre aide :top

Après Plusieurs mois de travail, voici la solution:
Voici le Diagramme du fonctionnement très précis du moteur de Scroll Horizontal bidirectionnel selon la volonté du joueur.

Le But de ce diagramme est de le rendre le plus accessible et compréhensible possible.
De la sorte, ceux qui en ont la volonté pourront facilement le modifier :top

Ouvrez l'image sous un autre onglet puis cliquer sur la loupe agrandir ou alors sauvegarder l'image puis l'ouvrir puis zoomer avec le logiciel de votre choix.
Question résolu avec ce diagramme:


Voici le player:
Code VB :
 
0           'SAVE"METAL001.asc",A
2 'PLAYER DE BRIBES VERICALES[(8 X 212)]
8 'Mode graphique
9 SCREEN 12:'COLOR1,1,0
12 'deplace l'écran verticalement
13 'VDP(24)=VDP(24)+212:VDP(9)=VDP(9)OR2
18 DEFINT A-Z:SETPAGE1,0:CLS:SETPAGE0,1:CLS
21 'Chargement intro/demo
25 SETPAGE0,1:BLOAD"INTRO.SCC",S:COLOR=RESTORE:SETPAGE1,0
26 IF INKEY$=""THEN26
27 'Chargement de la Page Alpha
28 CLS:SCREEN 8:CLS:CALL CHDIR("STAGE1")
29 CALL CHDIR("0")
30 SETPAGE0,1:BLOAD"0.SC8",S:SETPAGE1,0:SETPAGE0,0
35 'retour au repertoire des Pages
37 CALL CHDIR("..")
40 'initialisation des variables hero
45 X=100:Y=100:C=0
79 'CONDITIONS PRIMA X8**************
80 S=STICK(0):ONS+1 GOSUB 100,110,120,130,140,150,160,170,180:GOTO80
99 '
100 'DIRECTION STATIQUE*************
102 RETURN
104 '
110 'DIRECTION HAUT X8**************
112 RETURN
114 '
120 'DIRECTION HAUT DROITE X8******* 
122 RETURN
124 '
130 'DIRECTION DROITE X8************
131 'VA=0:'Scroll de droite a Droite
132 'VB=0:'Scroll de droite a Droite
133 D=1:VD=0:'Scroll vers la droite
134 I=&H2:'Repertoire Prima
135 II=&H1:'Repertoire des Bribes Prima
136 CALLCHDIR("1"):'Condition Proima droite
137 GOTO 10300:'Vers moteur X8 Droite
138 '
140 'DIRECTION BAS DROITE X8********
142 RETURN
144 '
150 'DIRECTION BAS X8***************
152 RETURN
154 '
160 'DIRECTION BAS GAUCHE X8********
162 RETURN
164 '
170 'DIRECTION GAUCHE X8************
171 'VA=256:'Scroll de droite a gauche
172 'VB=256:'Scroll de droite a gauche
173 G=1:VG=256:'Scroll vers la gauche
174 II=&HE:'Repertoire des Bribes Prima
175 I=&HE:'Repertoire Prima
176 CALLCHDIR("F"):'Condition Prima Gauche
177 GOTO 1300:'Vers moteur X8 Gauche
178 '
180 'DIRECTION GAUCHE HAUT X8*******
182 RETURN
184 SCREEN 0:PRINT"SORTIE 184
185 '
1300 'DIRECTION GAUCHE************
1310 CALLCHDIR("F"):'SCROLL VERS LA GAUCHE
1320 S=STICK(0):ONS+1GOSUB100,110,120,1322,140,150,160,1324,180:GOTO1320
1322 G=1:I=I+3AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("0"):GOTO10324
1324 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1330 S=STICK(0):ONS+1GOSUB100,110,120,1332,140,150,160,1334,180:GOTO1330
1332 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("F"):GOTO11134
1334 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1350 CALL CHDIR ("..")
1360 CALLCHDIR("E"):'SCROLL VERS LA GAUCHE
1370 S=STICK(0):ONS+1GOSUB100,110,120,1372,140,150,160,1374,180:GOTO1370
1372 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("F"):GOTO11124
1374 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1380 S=STICK(0):ONS+1GOSUB100,110,120,1382,140,150,160,1384,180:GOTO1380
1382 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("E"):GOTO11034
1384 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1400 CALL CHDIR ("..")
1410 CALLCHDIR("D"):'SCROLL VERS LA GAUCHE
1420 S=STICK(0):ONS+1GOSUB100,110,120,1422,140,150,160,1424,180:GOTO1420
1422 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("E"):GOTO11024
1424 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1430 S=STICK(0):ONS+1GOSUB100,110,120,1432,140,150,160,1434,180:GOTO1430
1432 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("D"):GOTO10984
1434 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1450 CALL CHDIR ("..")
1460 CALLCHDIR("C"):'SCROLL VERS LA GAUCHE
1470 S=STICK(0):ONS+1GOSUB100,110,120,1472,140,150,160,1474,180:GOTO1470
1472 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("D"):GOTO10974
1474 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1480 S=STICK(0):ONS+1GOSUB100,110,120,1482,140,150,160,1484,180:GOTO1480
1482 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("C"):GOTO10934
1484 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1500 CALLCHDIR("..")
1510 CALLCHDIR("B"):'SCROLL VERS LA GAUCHE
1520 S=STICK(0):ONS+1GOSUB100,110,120,1522,140,150,160,1524,180:GOTO1520
1522 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("C"):GOTO10924
1524 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1530 S=STICK(0):ONS+1GOSUB100,110,120,1532,140,150,160,1534,180:GOTO1530
1532 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("B"):GOTO10884
1534 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1550 CALLCHDIR("..")
1560 CALLCHDIR("A"):'SCROLL VERS LA GAUCHE
1570 S=STICK(0):ONS+1GOSUB100,110,120,1572,140,150,160,1574,180:GOTO1570
1572 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("B"):GOTO10874
1574 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1580 S=STICK(0):ONS+1GOSUB100,110,120,1582,140,150,160,1584,180:GOTO1580
1582 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("A"):GOTO10834
1584 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1600 CALLCHDIR("..")
1610 CALLCHDIR("9"):'SCROLL VERS LA GAUCHE
1620 S=STICK(0):ONS+1GOSUB100,110,120,1622,140,150,160,1624,180:GOTO1620
1622 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("A"):GOTO10824
1624 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1630 S=STICK(0):ONS+1GOSUB100,110,120,1632,140,150,160,1634,180:GOTO1630
1632 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("9"):GOTO10784
1634 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1650 CALLCHDIR("..")
1660 CALLCHDIR("8"):'SCROLL VERS LA GAUCHE
1670 S=STICK(0):ONS+1GOSUB100,110,120,1672,140,150,160,1674,180:GOTO1670
1672 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("9"):GOTO10774
1674 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1680 S=STICK(0):ONS+1GOSUB100,110,120,1682,140,150,160,1684,180:GOTO1680
1682 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("8"):GOTO10734
1684 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1700 CALLCHDIR("..")
1710 CALLCHDIR("7"):'SCROLL VERS LA GAUCHE
1720 S=STICK(0):ONS+1GOSUB100,110,120,1722,140,150,160,1724,180:GOTO1720
1722 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("8"):GOTO10724
1724 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1730 S=STICK(0):ONS+1GOSUB100,110,120,1732,140,150,160,1734,180:GOTO1730
1732 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("7"):GOTO10684
1734 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1750 CALLCHDIR("..")
1760 CALLCHDIR("6"):'SCROLL VERS LA GAUCHE
1770 S=STICK(0):ONS+1GOSUB100,110,120,1772,140,150,160,1774,180:GOTO1770
1772 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("7"):GOTO10674
1774 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1780 S=STICK(0):ONS+1GOSUB100,110,120,1782,140,150,160,1784,180:GOTO1780
1782 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("6"):GOTO10634
1784 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1800 CALLCHDIR("..")
1810 CALLCHDIR("5"):'SCROLL VERS LA GAUCHE
1820 S=STICK(0):ONS+1GOSUB100,110,120,1822,140,150,160,1824,180:GOTO1820
1822 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("6"):GOTO10624
1824 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1830 S=STICK(0):ONS+1GOSUB100,110,120,1832,140,150,160,1834,180:GOTO1830
1832 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("5"):GOTO10584
1834 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1850 CALLCHDIR("..")
1860 CALLCHDIR("4"):'SCROLL VERS LA GAUCHE
1870 S=STICK(0):ONS+1GOSUB100,110,120,1872,140,150,160,1874,180:GOTO1870
1872 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("5"):GOTO10574
1874 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1880 S=STICK(0):ONS+1GOSUB100,110,120,1882,140,150,160,1884,180:GOTO1880
1882 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("4"):GOTO10534
1884 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1900 CALLCHDIR("..")
1910 CALLCHDIR("3"):'SCROLL VERS LA GAUCHE
1920 S=STICK(0):ONS+1GOSUB100,110,120,1922,140,150,160,1924,180:GOTO1920
1922 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("4"):GOTO10524
1924 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1930 S=STICK(0):ONS+1GOSUB100,110,120,1932,140,150,160,1934,180:GOTO1930
1932 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("3"):GOTO10484
1934 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
1950 CALLCHDIR("..")
1960 CALLCHDIR("2"):'SCROLL VERS LA GAUCHE
1970 S=STICK(0):ONS+1GOSUB100,110,120,1972,140,150,160,1974,180:GOTO1970
1972 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("3"):GOTO10474
1974 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
1980 S=STICK(0):ONS+1GOSUB100,110,120,1982,140,150,160,1984,180:GOTO1980
1982 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("2"):GOTO10434
1984 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
2000 CALLCHDIR("..")
2010 CALLCHDIR("1"):'SCROLL VERS LA GAUCHE
2020 S=STICK(0):ONS+1GOSUB100,110,120,2022,140,150,160,2024,180:GOTO2020
2022 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("2"):GOTO10424
2024 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
2030 S=STICK(0):ONS+1GOSUB100,110,120,2032,140,150,160,2034,180:GOTO2030
2032 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("1"):GOTO10384
2034 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
2050 CALLCHDIR("..")
2060 CALLCHDIR("0"):'SCROLL VERS LA GAUCHE
2070 S=STICK(0):ONS+1GOSUB100,110,120,2072,140,150,160,2074,180:GOTO2070
2072 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("1"):GOTO10374
2074 G=0:VG=VG-8AND255:COPY"115"TO(VG,0):SETSCROLLVG
2080 S=STICK(0):ONS+1GOSUB100,110,120,2082,140,150,160,2084,180:GOTO2080
2082 G=1:I=I+2AND&HF:GOSUB5300:VD=VG-256AND255:CALLCHDIR("0"):GOTO10334
2084 G=0:VG=VG-8AND255:COPY"111"TO(VG,0):SETSCROLLVG
2090 IFD=1THENI=I-1AND&HF:D=0
2100 CALLCHDIR(".."):CALLCHDIR("..")
2580 'choix DU repertoire DES repertoires de Bribes
2582 IF I=&HFTHENCALLCHDIR("F"):I=&HE:GOTO1310
2584 IF I=&HETHENCALLCHDIR("E"):I=&HD:GOTO1310
2586 IF I=&HDTHENCALLCHDIR("D"):I=&HC:GOTO1310
2588 IF I=&HCTHENCALLCHDIR("C"):I=&HB:GOTO1310
2590 IF I=&HBTHENCALLCHDIR("B"):I=&HA:GOTO1310
2592 IF I=&HATHENCALLCHDIR("A"):I=&H9:GOTO1310
2594 IF I=&H9THENCALLCHDIR("9"):I=&H8:GOTO1310
2596 IF I=&H8THENCALLCHDIR("8"):I=&H7:GOTO1310
2598 IF I=&H7THENCALLCHDIR("7"):I=&H6:GOTO1310
2600 IF I=&H6THENCALLCHDIR("6"):I=&H5:GOTO1310
2602 IF I=&H5THENCALLCHDIR("5"):I=&H4:GOTO1310
2604 IF I=&H4THENCALLCHDIR("4"):I=&H3:GOTO1310
2606 IF I=&H3THENCALLCHDIR("3"):I=&H2:GOTO1310
2608 IF I=&H2THENCALLCHDIR("2"):I=&H1:GOTO1310
2610 IF I=&H1THENCALLCHDIR("1"):I=&H0:GOTO1310
2612 IF I=&H0THENCALLCHDIR("0"):I=&HF:GOTO1310
2613 '
5299 'Repertoire des repertoires bascule Gauche vers la Droite
5300 IFD=1THENI=I-1AND&HF:D=0
5301 IFI=&HFTHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("F"):RETURN
5302 IFI=&HETHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("E"):RETURN
5303 IFI=&HDTHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("D"):RETURN
5304 IFI=&HCTHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("C"):RETURN
5305 IFI=&HBTHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("B"):RETURN
5306 IFI=&HATHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("A"):RETURN
5307 IFI=&H9THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("9"):RETURN
5308 IFI=&H8THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("8"):RETURN
5309 IFI=&H7THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("7"):RETURN
5310 IFI=&H6THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("6"):RETURN
5311 IFI=&H5THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("5"):RETURN
5312 IFI=&H4THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("4"):RETURN
5313 IFI=&H3THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("3"):RETURN
5314 IFI=&H2THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("2"):RETURN
5315 IFI=&H1THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("1"):RETURN
5316 IFI=&H0THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("0"):RETURN
10300 'DIRECTION DROITE************
10310 CALLCHDIR("0"):'SCROLL VERS LA DROITE
10320 S=STICK(0):ONS+1GOSUB100,110,120,10324,140,150,160,10322,180:GOTO10320
10322 D=1:I=I-3AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("F"):GOTO1324
10324 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10330 S=STICK(0):ONS+1GOSUB100,110,120,10334,140,150,160,10332,180:GOTO10330
10332 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("0"):GOTO2084
10334 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10350 CALL CHDIR ("..")
10360 CALLCHDIR("1"):'SCROLL VERS LA DROITE
10370 S=STICK(0):ONS+1GOSUB100,110,120,10374,140,150,160,10372,180:GOTO10370
10372 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("0"):GOTO2074
10374 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10380 S=STICK(0):ONS+1GOSUB100,110,120,10384,140,150,160,10382,180:GOTO10380
10382 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("1"):GOTO2034
10384 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10400 CALL CHDIR ("..")
10410 CALLCHDIR("2"):'SCROLL VERS LA DROITE
10420 S=STICK(0):ONS+1GOSUB100,110,120,10424,140,150,160,10422,180:GOTO10420
10422 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("1"):GOTO2024
10424 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10430 S=STICK(0):ONS+1GOSUB100,110,120,10434,140,150,160,10432,180:GOTO10430
10432 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("2"):GOTO1984 
10434 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10450 CALL CHDIR ("..")
10460 CALLCHDIR("3"):'SCROLL VERS LA DROITE
10470 S=STICK(0):ONS+1GOSUB100,110,120,10474,140,150,160,10472,180:GOTO10470
10472 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("2"):GOTO1974
10474 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10480 S=STICK(0):ONS+1GOSUB100,110,120,10484,140,150,160,10482,180:GOTO10480
10482 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("3"):GOTO1934 
10484 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10500 CALL CHDIR ("..")
10510 CALLCHDIR("4"):'SCROLL VERS LA DROITE
10520 S=STICK(0):ONS+1GOSUB100,110,120,10524,140,150,160,10522,180:GOTO10520
10522 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("3"):GOTO1924
10524 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10530 S=STICK(0):ONS+1GOSUB100,110,120,10534,140,150,160,10532,180:GOTO10530
10532 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("4"):GOTO1884
10534 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10550 CALL CHDIR ("..")
10560 CALLCHDIR("5"):'SCROLL VERS LA DROITE
10570 S=STICK(0):ONS+1GOSUB100,110,120,10574,140,150,160,10572,180:GOTO10570
10572 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("4"):GOTO1874
10574 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10580 S=STICK(0):ONS+1GOSUB100,110,120,10584,140,150,160,10582,180:GOTO10580
10582 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("5"):GOTO1834
10584 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10600 CALL CHDIR ("..")
10610 CALLCHDIR("6"):'SCROLL VERS LA DROITE
10620 S=STICK(0):ONS+1GOSUB100,110,120,10624,140,150,160,10622,180:GOTO10620
10622 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("5"):GOTO1824
10624 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10630 S=STICK(0):ONS+1GOSUB100,110,120,10634,140,150,160,10632,180:GOTO10630
10632 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("6"):GOTO1784
10634 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10650 CALL CHDIR ("..")
10660 CALLCHDIR("7"):'SCROLL VERS LA DROITE
10670 S=STICK(0):ONS+1GOSUB100,110,120,10674,140,150,160,10672,180:GOTO10670
10672 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("6"):GOTO1774
10674 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10680 S=STICK(0):ONS+1GOSUB100,110,120,10684,140,150,160,10682,180:GOTO10680
10682 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("7"):GOTO1734 
10684 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10700 CALL CHDIR("..")
10710 CALLCHDIR("8"):'SCROLL VERS LA DROITE
10720 S=STICK(0):ONS+1GOSUB100,110,120,10724,140,150,160,10722,180:GOTO10720
10722 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("7"):GOTO1724
10724 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10730 S=STICK(0):ONS+1GOSUB100,110,120,10734,140,150,160,10732,180:GOTO10730
10732 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("8"):GOTO1684 
10734 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10750 CALL CHDIR ("..")
10760 CALLCHDIR("9"):'SCROLL VERS LA DROITE
10770 S=STICK(0):ONS+1GOSUB100,110,120,10774,140,150,160,10772,180:GOTO10770
10772 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("8"):GOTO1674
10774 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10780 S=STICK(0):ONS+1GOSUB100,110,120,10784,140,150,160,10782,180:GOTO10780
10782 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("9"):GOTO1634 
10784 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10800 CALL CHDIR ("..")
10810 CALLCHDIR("A"):'SCROLL VERS LA DROITE
10820 S=STICK(0):ONS+1GOSUB100,110,120,10824,140,150,160,10822,180:GOTO10820
10822 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("9"):GOTO1624
10824 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10830 S=STICK(0):ONS+1GOSUB100,110,120,10834,140,150,160,10832,180:GOTO10830
10832 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("A"):GOTO1584 
10834 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10850 CALL CHDIR ("..")
10860 CALLCHDIR("B"):'SCROLL VERS LA DROITE
10870 S=STICK(0):ONS+1GOSUB100,110,120,10874,140,150,160,10872,180:GOTO10870
10872 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("A"):GOTO1574
10874 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10880 S=STICK(0):ONS+1GOSUB100,110,120,10884,140,150,160,10882,180:GOTO10880
10882 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("B"):GOTO1534 
10884 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10900 CALL CHDIR ("..")
10910 CALLCHDIR("C"):'SCROLL VERS LA DROITE
10920 S=STICK(0):ONS+1GOSUB100,110,120,10924,140,150,160,10922,180:GOTO10920
10922 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("B"):GOTO1524
10924 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10930 S=STICK(0):ONS+1GOSUB100,110,120,10934,140,150,160,10932,180:GOTO10930
10932 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("C"):GOTO1484
10934 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10950 CALL CHDIR ("..")
10960 CALLCHDIR("D"):'SCROLL VERS LA DROITE
10970 S=STICK(0):ONS+1GOSUB100,110,120,10974,140,150,160,10972,180:GOTO10970
10972 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("C"):GOTO1474
10974 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
10980 S=STICK(0):ONS+1GOSUB100,110,120,10984,140,150,160,10982,180:GOTO10980
10982 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("D"):GOTO1434 
10984 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
11000 CALL CHDIR ("..")
11010 CALLCHDIR("E"):'SCROLL VERS LA DROITE
11020 S=STICK(0):ONS+1GOSUB100,110,120,11024,140,150,160,11022,180:GOTO11020
11022 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("D"):GOTO1424
11024 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
11030 S=STICK(0):ONS+1GOSUB100,110,120,11034,140,150,160,11032,180:GOTO11030
11032 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("E"):GOTO1384
11034 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
11050 CALL CHDIR ("..")
11110 CALLCHDIR("F")'SCROLL VERS LA DROITE
11120 S=STICK(0):ONS+1GOSUB100,110,120,11124,140,150,160,11122,180:GOTO11120
11122 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("E"):GOTO1374
11124 D=0:COPY"111"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
11130 S=STICK(0):ONS+1GOSUB100,110,120,11134,140,150,160,11132,180:GOTO11130
11132 D=1:I=I-2AND&HF:GOSUB20300:VG=VD+256AND255:CALLCHDIR("F"):GOTO1334
11134 D=0:COPY"115"TO(VD,0):VD=VD+8AND255:SETSCROLLVD
11140 IFG=1THENI=I+1AND&HF:G=0
11150 CALL CHDIR (".."):CALL CHDIR ("..")
12580 'choix DU repertoire DES repertoires de Bribes
12582 IF I=&HFTHENCALLCHDIR("F"):I=&H0:GOTO10310
12584 IF I=&HETHENCALLCHDIR("E"):I=&HF:GOTO10310
12586 IF I=&HDTHENCALLCHDIR("D"):I=&HE:GOTO10310
12588 IF I=&HCTHENCALLCHDIR("C"):I=&HD:GOTO10310
12590 IF I=&HBTHENCALLCHDIR("B"):I=&HC:GOTO10310
12592 IF I=&HATHENCALLCHDIR("A"):I=&HB:GOTO10310
12594 IF I=&H9THENCALLCHDIR("9"):I=&HA:GOTO10310
12596 IF I=&H8THENCALLCHDIR("8"):I=&H9:GOTO10310
12598 IF I=&H7THENCALLCHDIR("7"):I=&H8:GOTO10310
12600 IF I=&H6THENCALLCHDIR("6"):I=&H7:GOTO10310
12602 IF I=&H5THENCALLCHDIR("5"):I=&H6:GOTO10310
12604 IF I=&H4THENCALLCHDIR("4"):I=&H5:GOTO10310
12606 IF I=&H3THENCALLCHDIR("3"):I=&H4:GOTO10310
12608 IF I=&H2THENCALLCHDIR("2"):I=&H3:GOTO10310
12610 IF I=&H1THENCALLCHDIR("1"):I=&H2:GOTO10310
12612 IF I=&H0THENCALLCHDIR("0"):I=&H1:GOTO10310
12613 '
20299 'Repertoire des repertoires bascule Droite vers Gauche
20300 IFG=1THENI=I+1AND&HF:G=0
20301 IFI=&H0THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("0"):RETURN
20302 IFI=&H1THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("1"):RETURN
20303 IFI=&H2THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("2"):RETURN
20304 IFI=&H3THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("3"):RETURN
20305 IFI=&H4THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("4"):RETURN
20306 IFI=&H5THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("5"):RETURN
20307 IFI=&H6THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("6"):RETURN
20308 IFI=&H7THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("7"):RETURN
20309 IFI=&H8THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("8"):RETURN
20310 IFI=&H9THENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("9"):RETURN
20311 IFI=&HATHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("A"):RETURN
20312 IFI=&HBTHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("B"):RETURN
20313 IFI=&HCTHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("C"):RETURN
20314 IFI=&HDTHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("D"):RETURN
20315 IFI=&HETHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("E"):RETURN
20316 IFI=&HFTHENCALLCHDIR(".."):CALLCHDIR(".."):CALLCHDIR("F"):RETURN


Voici le générateur de Bribes:
Code VB :
 
10 'SAVE"GENOUTV8.ASC",A
20 'generateur de bribes Verticales d'images en 8 X 212. 
22 'generateur par copy de bribes verticales.
30 ' Mode Graphique utilisé
32 VDP(10)=0: SCREEN 8
70 'Charger image ZERO [256X212] depuis la ligne Zero vers la page Zero.
71 SETPAGE 0,0: CLS
72 '
76 'Entrer dans le repertoire STAGE1 prealablement cree.
77 'A l interieur de STAGE1 doivent se trouver les repertoires 0.1.2.3 avec les images .SC8 respectives
78 CALL CHDIR("STAGE1")
79 CALL CHDIR("0"):BLOAD"0.SC8",S
80 '
81 A=0:'debut de copy
89 Z=211:'fin de copy
90 'Creer repertoires de 0 a F et y générer 2 bribes Larges de 8 lignes.
100 CALL MKDIR ("0"):CALL CHDIR ("0")
101 COPY(0,A)-(7,Z),0TO"111"
105 COPY(8,A)-(15,Z),0TO"115"
109 CALL CHDIR ("..")
110 CALL MKDIR ("1"):CALL CHDIR ("1")
111 COPY(16,A)-(23,Z),0TO"111"
115 COPY(24,A)-(31,Z),0TO"115"
119 CALL CHDIR ("..")
120 CALL MKDIR ("2"):CALL CHDIR ("2")
121 COPY(32,A)-(39,Z),0TO"111"
125 COPY(40,A)-(47,Z),0TO"115"
129 CALL CHDIR ("..")
130 CALL MKDIR ("3"):CALL CHDIR ("3")
131 COPY(48,A)-(55,Z),0TO"111"
135 COPY(56,A)-(63,Z),0TO"115"
139 CALL CHDIR ("..")
140 CALL MKDIR ("4"):CALL CHDIR ("4")
141 COPY(64,A)-(71,Z),0TO"111"
145 COPY(72,A)-(79,Z),0TO"115"
149 CALL CHDIR ("..")
150 CALL MKDIR ("5"):CALL CHDIR ("5")
151 COPY(80,A)-(87,Z),0TO"111"
155 COPY(88,A)-(95,Z),0TO"115"
159 CALL CHDIR ("..")
160 CALL MKDIR ("6"):CALL CHDIR ("6")
161 COPY(96,A)-(103,Z),0TO"111"
165 COPY(104,A)-(111,Z),0TO"115"
169 CALL CHDIR ("..")
170 CALL MKDIR ("7"):CALL CHDIR ("7")
171 COPY(112,A)-(119,Z),0TO"111"
175 COPY(120,A)-(127,Z),0TO"115"
179 CALL CHDIR ("..")
180 CALL MKDIR ("8"):CALL CHDIR ("8")
181 COPY(128,A)-(135,Z),0TO"111"
185 COPY(136,A)-(143,Z),0TO"115"
189 CALL CHDIR ("..")
190 CALL MKDIR ("9"):CALL CHDIR ("9")
191 COPY(144,A)-(151,Z),0TO"111"
195 COPY(152,A)-(159,Z),0TO"115"
199 CALL CHDIR ("..")
200 CALL MKDIR ("A"):CALL CHDIR ("A")
201 COPY(160,A)-(167,Z),0TO"111"
205 COPY(168,A)-(175,Z),0TO"115"
209 CALL CHDIR ("..")
210 CALL MKDIR ("B"):CALL CHDIR ("B")
211 COPY(176,A)-(183,Z),0TO"111"
215 COPY(184,A)-(191,Z),0TO"115"
219 CALL CHDIR ("..")
220 CALL MKDIR ("C"):CALL CHDIR ("C")
221 COPY(192,A)-(199,Z),0TO"111"
225 COPY(200,A)-(207,Z),0TO"115"
229 CALL CHDIR ("..")
230 CALL MKDIR ("D"):CALL CHDIR ("D")
231 COPY(208,A)-(215,Z),0TO"111"
235 COPY(216,A)-(223,Z),0TO"115"
239 CALL CHDIR ("..")
240 CALL MKDIR ("E"):CALL CHDIR ("E")
241 COPY(224,A)-(231,Z),0TO"111"
245 COPY(232,A)-(239,Z),0TO"115"
249 CALL CHDIR ("..")
250 CALL MKDIR ("F"):CALL CHDIR ("F")
251 COPY(240,A)-(247,Z),0TO"111"
255 COPY(248,A)-(255,Z),0TO"115"
259 CALL CHDIR ("..")
300 CALL CHDIR (".."):CALL CHDIR ("..")
 


Voici l'image du Disque Dur (CF) qui contient tout le nécessaire:
METAL.zip Edité par igal Le 06/09/2016 à 11h21


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: 1482

Le 09/12/2013 à 11h33
En BASIC, il n'y a que la commande COPY qui pourra t'aider.
Tu charges sur une page passive, et tu copie au fur et à mesure sur la page active.


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

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 09/12/2013 à 12h03
Le AND255 ne sert à rien ! Edité par GDX Le 12/12/2013 à 15h44
   
Maggoo Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 25/06/2013 à 17h49

Messages: 192

Le 09/12/2013 à 14h28
GDX :
Le AND255 ne sert à rien.




Je me souviens plus trop comment ca fonctionne, mais est ce qu'il n'existe pas un mode ou le scrolling se fait sur 2 pages? Les 2 registres de scrolling (26 et 27) totalisent 9 bit. Est ce que dans le mode "2 pages", les valeurs jusque 511 sont acceptees? Qu'en est il sous Basic? Je pense qu'il vaut mieux utiliser l'instruction Set Scroll que VDP(27) non?
Site web    
ericb59 Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 17/04/2012 à 10h25

Messages: 5469

Le 09/12/2013 à 17h24
Metalion :
En BASIC, il n'y a que la commande COPY qui pourra t'aider.

Tu charges sur une page passive, et tu copie au fur et à mesure sur la page active.




j'ai jamais réussi à faire un scroll propre en basic avec défilement de décors qui se renouvelle...

J'attends de voir vos solutions... :gne


banniere-ericb59e
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 09/12/2013 à 17h35
@Métalion: J'ai utilisé la fonction COPY tel que tu peux le voir sur la vidéo:

Pour l'occasion, j'ai fait scrollé une image en SCREEN 12 simultanément verticale et horizontale et c'est assez rapide je trouve.
Screen 12 Multidirectionnel H/8 et V/8:

http://youtu.be/aNlN5ckJtvQ

Screen 12 Multidirectionnel H/8 et V/1:

http://youtu.be/-Q653-eQhz4

Ca reste très simpliste comme approche.
En fait je me demande si l'un d'entre vous peut poster une formule qui permette de "plaquer" des Blocs de 16X16 ou encore des Bandes de 16X212 :moue

Edit:
Screen 12 Multidirectionnel H/8 :
(on voit mieux s'exécuter la commande COPY ;) )

http://youtu.be/vnpdttPfNuw

@MsxLégend:
comment t'as fait pour te débarrasser de la grosse bande horizontale qui fait la jointure entre le haut et le bas de l'image lors ce que ca scrool à la verticale?
T'as solutionner le truc avec ta démo T ^^ erminator Edité par igal Le 09/12/2013 à 17h59


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10287

Le 09/12/2013 à 19h23
The MSX PAZZA

The MSX 2+ VDP has three additional registers, number 25 to 27. These registers can be accessed from BASIC using VDP(26)-VDP(28). So, to determine the correct VDP number of a register, you need to add one to the register number.

The registers are used as followed:

reg b7 b6 b5 b4 b3 b2 b1 b0
25 - CMD VDS YAE YJK WTE MSK SP2
26 - - H08 H07 H06 H05 H04 H03
27 - - - - - H02 H01 H00

The abbreviations have the following meaning:

CMD: Command function
This bit determines how the VDP commands function. When this bit is reset, the commands only function in screen 5 to 12. In the other case, the commands function in all screen modes. On screen 5 to 12, they behave as usual. On the other screens, the VDP uses the same addressing scheme as if the VDP is in screen 8. Hence, you have to set the coordinates just like when you are working in screen 8.

VDS: VRAM data select
This bit determines the function for VDP pin 8. When VDS is reset, the 3.38MHz clock signal for the CPU will be put on pin 8. Otherwise, the so-called VDS signal is put on pin 8. This signal is low when the VDP accesses the VRAM for screen display. Otherwise, the VDS signal is high.
Since most MSX 2+ computers derive the CPU clock from pin 8, you should always keep this bit to 0.

YAE and YJK
These are described in the section 'Select MSX 2+ screens in assembly' in the other part of the article.

WTE: Wait function
This bit determines whether the wait function of the VDP is enabled. When WTE is reset, the wait function is disabled. Otherwise, the wait function is enabled. In the latter case, the VDP will generate wait states when the CPU wants to access the VRAM before the VDP is ready for it. Programs using the wait function do not need to explicitly check bit 7 of status register 2 when transferring data to or from VRAM using the VDP commands.

MSK: Mask bit
This bit can enable the mask function of the VDP. When MSK is reset, the mask function is disabled. Otherwise, the mask function is enabled, which means that the eight left most pixels will be masked with the border color. You need to do this when you implement a horizontal scroll using register 26 and 27. The output for the eight left most pixels is not guaranteed when register 27 is not equal to zero. Please note that in screen 6 and 7, sixteen pixels will be masked in stead of eight.

SP2: Screen size bit
This bit sets the screen size for horizontal scroll. When SP2 is reset, the screen will have a size of one page. Everything dissapearing at the left hand of the screen will re-appear at the right hand side. When the bit is set, the screen will have a size of two pages. If the first page dissapears to the left of the screen, the second page will appear at the right hand side. Though, you must have selected an odd page number to use this functionality.

H08-H00: The horizontal scroll value

These bits are used to set the horizontal scroll value. On screen 6 and 7, the VDP scrolls with two pixels per unit. On the other screens, the VDP scrolls with one pixel per unit.
The horizontal scroll value must be split-up into two registers. Bit H08-H03 must be placed in register 26 and determine a shift of the screen to left. Bit H02-H00 must be placed in register 27 and determine a shift of the screen to the right. This makes setting the scroll value a little bit complicated. For example, to scroll the screen N pixels to the left under BASIC, you can use the following commands:

VDP(27)=(N+7)8: VDP(28)=-N AND 7

This is the same as using the command:

SET SCROLL N

Other programming languages, like assembler, do not have the SET SCROLL command. So, when using these languages you can use the method shown above.

google trad

Le MSX 2 + VDP a trois registres supplémentaires , le nombre 25 à 27 . Ces registres sont accessibles à partir de base en utilisant VDP ( 26 ) - VDP ( 28 ) . Ainsi, pour déterminer le nombre de VDP correcte d'un registre , vous avez besoin d' ajouter un le numéro de registre .

Les registres sont utilisés comme suit :

reg b7 b6 b5 b4 b3 b2 b1 b0
25 - CMD VDS YAE YJK WTE MSK SP2
26 - H08 H07 H06 H05 H04 H03
27 ----- H02 H01 H00

Les abréviations ont la signification suivante:

CMD : la fonction de commande
Ce bit détermine comment le VDP commandes fonction. Lorsque ce bit est remis à zéro , les commandes fonction que dans l'écran de 5 à 12 . Dans l'autre cas , la fonction de commandes dans tous les modes de l'écran . Sur l'écran de 5 à 12 , ils se comportent comme d'habitude . D' les autres écrans , la VDP utilise le même système d'adressage comme si la VDP est dans l'écran 8 . Par conséquent, vous devez définir les coordonnées aiment juste lorsque vous travaillez dans l'écran 8 .

VDS : données VRAM sélectionner
Ce bit détermine la fonction de VDP broche 8 . Lorsque VDS est remis à zéro , le signal 3.38MHz d'horloge pour le CPU sera mis sur la broche 8 . Sinon , le signal que l'on appelle VDS est mis sur la broche 8 . Ce signal est faible lorsque le VDP accède à la VRAM pour l'affichage de l'écran. Sinon , le signal VDS est élevée .
Comme la plupart des MSX 2 + ordinateurs proviennent de l'horloge du CPU de la broche 8 , vous devez toujours garder ce bit à 0 .

EJA et YJK
Ceux-ci sont décrits dans la section « Sélectionner MSX 2 + écrans dans l'assembly ' dans l'autre partie de l'article .

WTE : fonction Attendre
Ce bit détermine si la fonction d'attente de la VDP est activée . Quand WTE est remis à zéro , la fonction d'attente est désactivé . Sinon, la fonction d'attente est activée . Dans ce dernier cas , le PDV générer des états d'attente lorsque le CPU veut accéder à la VRAM avant la VDP est prêt pour cela . programmes en utilisant la fonction d'attente n'ont pas besoin de vérifier explicitement le bit 7 du registre d'état 2 lors du transfert de données vers ou à partir de VRAM en utilisant les commandes de VDP .

MSK : peu de masque
Ce bit peut activer la fonction de masque de la VDP . Quand MSK est remis à zéro , la fonction de masque est désactivé . Sinon, la fonction de masque est activé , ce qui signifie que les huit plus à gauche pixels seront masqués par la couleur de la bordure . Vous devez faire quand vous implémentez un défilement horizontal utilisant le registre 26 et 27 . la sortie pour les huit plus à gauche pixels n'est pas garanti lorsque le registre 27 n'est pas égal à zéro . S'il vous plaît noter que dans l'écran 6 et 7 , seize pixels seront masqués à la place de huit .

SP2 : peu de taille de l'écran
Ce bit définit la taille de l'écran pour défilement horizontal . Lorsque SP2 est réinitialisé, l'écran aura une taille d'une page . Tout dissapearing à la main gauche de l'écran s'affiche de nouveau du côté de la main droite. Lorsque le bit est défini, l'écran aura une taille de deux pages . Si la première page disparait à la gauche de l'écran , la deuxième page apparaîtront sur ​​le côté de la main droite . Bien, vous devez avoir sélectionné un numéro de page impair pour utiliser cette fonctionnalité .

H08 - H00 : La valeur de défilement horizontale
Ces bits sont utilisés pour définir la valeur de défilement horizontale . Sur l'écran 6 et 7 , les rouleaux de VDP avec deux pixels par unité . Sur les autres écrans , les rouleaux de VDP avec un pixel par unité .
La valeur de défilement horizontale doit être divisé - en deux registres . Bit H08 - H03 doit être placé dans le registre 26 et de déterminer un décalage de l'écran à gauche . Bit H02- H00 doit être placé dans le registre 27 et de déterminer un décalage de l'écran .. à droite Cela rend la mise en valeur d'un peu compliqué de défilement Par exemple , pour faire défiler les N pixels de l'écran vers la gauche sous BASIC , vous pouvez utiliser les commandes suivantes :

VDP ( 27 ) = ( N 7 ) 8 : VDP ( 28 ) = -N ET 7

C'est le même que l'utilisation de la commande:

SET SCROLL N

Ensemble de défilement de N

D'autres langages de programmation, comme l'assembleur , n'ont pas la commande SET SCROLL . Ainsi, lors de l'utilisation de ces langues, vous pouvez utiliser la méthode ci-dessus.


:noel
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 10/12/2013 à 07h58
J'ai fait un petit exemple de défilement vertical de la page 0 vers la page 1, ça pourra peut-être servir même si ce n'est pas vraiment le sujet. ^^



Code TEXT :
10 SCREEN8
20 VDP(9)=VDP(9)OR2 'sprites OFF
30 CIRCLE(127,105),106,7:PAINT STEP(0,0),15,7:SETPAGE,1:CLS:CIRCLE(127,105),106,6:SETPAGE,0
40 'BLOAD"IMAGE1.SC8",S:SETPAGE,1:BLOAD"IMAGE2.SC8",S:SETPAGE,0
50 Y=0:YD=212
60 IF VDP(-2)AND 1 THEN60
70 VDP(35)=Y:VDP(36)=1:VDP(37)=0:VDP(38)=0:VDP(39)=YD:VDP(40)=0:VDP(41)=255:VDP(42)=1:VDP(43)=1:VDP(44)=0:VDP(46)=0:VDP(47)=&HE0
80 VDP(24)=Y:Y=Y+1:IF Y<44 THEN YD=Y+212 ELSE YD=Y-44
90 IF Y=212 THEN110
100 GOTO60
110 IF NOTSTRIG(0) THEN110


Ça marche dans tous les modes graphiques à partir du SCREEN 4. Il faut seulement retirer le "PAINT STEP(0,0),15,7" en SCREEN 4 ou 12. En SCREEN 6 ou 7, il faut adapter la largeur du COPY avec celle de l'écran.



  • La ligne 20 sert à désactiver les Sprites parce que les COPY se font sur la zone des Sprites.
  • La ligne 30 est à effacer si on utilise la ligne 40.
  • La ligne 60 sert à tester si le COPY est fini ou pas. Cette ligne est nécessaire car le VDP ne peut pas faire 2 COPY simultanément.
  • La ligne 70 est l'instruction "YMMM" du VDP. (voir le livre "Pratique du MSX2" pour les explications). Il est nécessaire car l'instruction COPY du Basic ne fonctionne pas sur les lignes 212 à 255.
  • La ligne 80 sert au défilement vertical. "SET SCROLL ,Y" est utilisable à la place de VDP(24)=Y mais ne fonctionne qu'à partir du MSX2+.



Pour faire un défilement en Basic avec des décors qui se renouvellent, c'est peut-être faisable en faisant une bande de 256 x 16 de décors caché d'avance et à chaque déplacement d'une ligne du scroll, faire un COPY de 16 x 16 plus bas afin de créer la bande de 256 x 16 suivante au fur et à mesure.

Je n'ai jamais essayé mais il ne faut pas se faire d'illusion, même si ça marche, c'est sans doute lent et pas synchro. Ça serait juste utilisable pour une démo.



igal :
En fait je me demande si l'un d'entre vous peut poster une formule qui permette de "plaquer" des Blocs de 16X16 ou encore des Bandes de 16X212 :moue


Pour un scroll horizontal, il faut des blocks 8x8~212 car le cache ne fait que 8X212.

Ça risque d'être assez moche sans synchro. Le scroll vertical passe sans doute mieux. Edité par GDX Le 10/12/2013 à 08h30
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 10/12/2013 à 13h39
J'ai essayé le défilement horizontal de la page 0 vers la page 1 avec l'instruction SET SCROLL. C'est tout simple et ça marche plutôt bien ! :)

Code TEXT :
10 SCREEN8
20 CIRCLE(127,105),106,7:PAINT STEP(0,0),15,7:SETPAGE,1:CLS:CIRCLE(127,105),106,6:SETPAGE,0
30 'BLOAD"IMAGE1.SC8",S:SETPAGE,1:BLOAD"IMAGE2.SC8",S:SETPAGE,0
40 X=0
50 COPY(X,0)-STEP(0,211),1 TO(X,0)
60 SET SCROLL X:X=X+1:IF X=256 THEN80
70 GOTO50
80 IF NOTSTRIG(0) THEN80
Edité par GDX Le 10/12/2013 à 14h14
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 10/12/2013 à 18h28
@GDX:

J'ai testé ton premier programme qui fonctionne très bien en permettant le sroll sur 2 pages à la verticale.
Par contre, j'ai essayé de créer une nouvelle page à scroller pour la suite, mais comme tu peux le voir, j'arrive pas à perpétuer le mouvement en implantant des nouvelles pages :moue

Un résidu de l'ancienne page vient s'intercaler entre la nouvelle page et l'ancienne :sick

http://youtu.be/O0FxC7Kc1as

Merci de ton aide ^^


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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10287

Le 10/12/2013 à 20h57
en basic 3 il existe une instruction SET SCROLL X,Y,0,0

SET SCROLL A,B,C,D
A - Horizontal mouvement.
B - Vertical mouvement.
C e D - cache les coins de l'écran. Valeur entre 0 and 1.


:noel
Site web    
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 11/12/2013 à 01h32
Pour créer une nouvelle page à scroller et ainsi de suite, il suffit d'afficher la page 1 avec VDP(24)=0 en fin de scroll et de la recopier sur la page 0. Ensuite réaffichée la page 0 comme au départ pour recharger la page suivante sur la page 1 afin de relancer le scroll.

Code TEXT :
10 SCREEN8:COLOR ,,0
20 VDP(9)=VDP(9)OR2 'sprites OFF
25 IF VDP(-2)AND 1 THEN25
26 VDP(37)=0:VDP(38)=0:VDP(39)=212:VDP(40)=1:VDP(41)=255:VDP(42)=1:VDP(43)=44:VDP(44)=0:VDP(45)=0:VDP(46)=0:VDP(47)=&H80
30 CIRCLE(127,105),106,7:PAINT STEP(0,0),15,7:SETPAGE,1:CLS:CIRCLE(127,105),106,6:SETPAGE,0
40 'BLOAD"IMAGE1.SC8",S:SETPAGE,1:BLOAD"IMAGE2.SC8",S:SETPAGE,0
50 Y=0:YD=212
60 IF VDP(-2)AND 1 THEN60
70 VDP(35)=Y:VDP(36)=1:VDP(37)=0:VDP(38)=0:VDP(39)=YD:VDP(40)=0:VDP(41)=255:VDP(42)=1:VDP(43)=1:VDP(44)=0:VDP(46)=0:VDP(47)=&HE0
80 VDP(24)=Y:Y=Y+1:IF Y<44 THEN YD=Y+212 ELSE YD=Y-44
90 IF Y=212 THEN GOSUB110
95 IF STRIG(0) THEN END
100 GOTO60
110 SETPAGE1:VDP(24)=0
111 COPY(0,0)-(255,211),1 TO(0,0),0:SETPAGE0,1:CLS
120 FORI=1TO10:CIRCLE(127,105),12*RND(1)*I,I:NEXT
130 SETPAGE,0:RETURN50


J'ai ajouté aussi le COLOR,,0 et les lignes 25 et 26 pour effacer les déchets qui se trouvent sur les lignes 212~256 de la page 1. C'est la commande LMMV du VDP (un rectangle plein). C'est pour que le switch de la page 0 à 1 se fasse proprement.

Tu peux bien sûr remplacer ce qu'il y a à la ligne 120 par un BLOAD"IMAGEx.SC8",S avec une variable pour changer d'image. :noel

EDIT :

Finalement, voici plus simple et plus propre.

Code TEXT :
10 SCREEN8:I=0
20 VDP(9)=VDP(9)OR2 'sprites OFF
30 GOSUB120:GOSUB110
40 YD=212
50 IF VDP(-2)AND 1 THEN50
60 VDP(35)=Y:VDP(36)=1:VDP(37)=0:VDP(38)=0:VDP(39)=YD:VDP(40)=0:VDP(41)=255:VDP(42)=1:VDP(43)=1:VDP(44)=0:VDP(46)=0:VDP(47)=&HE0
70 VDP(24)=VDP(24)+1 AND255:Y=Y+1:YD=YD+1 AND255
80 IF Y=212 THEN GOSUB110
90 IF STRIG(0)THEN END
100 GOTO50
110 SETPAGE,1:CLS:Y=0
120 FORI=1TO10:CIRCLE(127,105),12*RND(1)*I,I:NEXT
130 'BLOAD"IMAGE"+RIGHT$(STR$(I),LEN(STR$(I))-1)+".SC8",S:I=(I+1)mod17
140 SETPAGE,0:RETURN

Comme ça, pas besoin du switch de la page 0 à 1. :) Edité par GDX Le 14/12/2013 à 09h44
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 13/12/2013 à 14h04
La même chose mais horizontale :

Code TEXT :
10 SCREEN8:I=0
20 GOSUB80:GOSUB70
30 COPY(X,0)-STEP(0,255),1 TO(X,0)
40 SET SCROLL X:X=X+1:IF X=256 THEN GOSUB70
50 IF STRIG(0)THEN END
60 GOTO30
70 SETPAGE,1:CLS:X=0
80 FORI=1TO10:CIRCLE(127,105),12*RND(1)*I,I:NEXT
90 'BLOAD"IMAGE"+RIGHT$(STR$(I),LEN(STR$(I))-1)+".SC8",S:I=(I+1)mod17
100 SETPAGE,0:RETURN


EDIT :
- J'ai retiré le PAINT et j'ai ajouté le chargement d'images (ligne 90). Cette ligne permet de charger 17 images différentes en boucle (de IMAGE0 à IMAGE16). C'est le chiffre qu'il y a après la fonction MOD qui détermine le nombre d'image. Ce chiffre peut varier de 1 à 1000 (sans doute moins en pratique). La ligne 90 doit bien sûr remplacer la ligne 80 si elle est utilisée.
- J'ai fait la même modif sur le scroll vertical juste au dessus. Edité par GDX Le 14/12/2013 à 12h42
   
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 14/12/2013 à 09h24
Maggoo :
Je me souviens plus trop comment ca fonctionne, mais est ce qu'il n'existe pas un mode ou le scrolling se fait sur 2 pages? Les 2 registres de scrolling (26 et 27) totalisent 9 bit. Est ce que dans le mode "2 pages", les valeurs jusque 511 sont acceptees? Qu'en est il sous Basic? Je pense qu'il vaut mieux utiliser l'instruction Set Scroll que VDP(27) non?


Oups, je n'avais pas vu ton message.

Vaudrait voir, je ne connais pas bien les spécificités du 2+ (et encore moins du Turbo R). J'y jetterai un oeuil à l'occasion. Je pense que Igal peut se débrouiller avec ce que j'ai mis. Comme on dit : "Pas de nouvelle, bonne nouvelle". ^^
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 14/12/2013 à 09h34
Merci GDX.

Pour le moment, je me remet des mes tentatives sur ton programme qui nécessitait le switch des pages...

:'(

Lundi je m'y replonge :D


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