MSX Village forum

La Place des Développeurs [EN COURS] un seul chargement et deux destinations. Comment charger une fois pour deux emplacements.

Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10358

Le 28/10/2015 à 14h05

Reprise du message précédent

en fait la destination est identique puisque tu rempli la vram a chaque fois
c'est l'exploitation des données qui change suivant le mode d'écran
il n'y a pas duplication c'est juste le nombres d'octets pour un pixel qui change
en screen 5 un octet = 2 pixels (1111 2222) les 4 bits codent la couleur
en screen 6 un octet = 4 pixels (11 22 33 44) les 2 bits codent la couleur
en screen 7 un octet = 2 pixels (1111 2222) les 4 bits codent la couleur
en screen 7 un octet = 1 pixel (VVV RRR BB) la palette est de 256 couleurs (le bleu est codé sur 2 bits)

rajout:
tu peux faire des essais avec des VPOKE pour comprendre comment la VRAM se remplit


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 28/10/2015 à 16h27
Merci poiur la précision Jipe :)

En fait, voila ce qui se passe:
J'affiche donc en SCREEN7 un image (des bribes d'images)générée en SCREEN5:

Pour se faire, j'ai modifié mon petit moteur expérimental ce dessous:
Code TEXT :
 
0                             'Sauvegarde Travail en cours*****
10        'save"SPRITE43.asc",a
15 'Mode ecran*********************
20 SCREEN7,2:COLOR1,1,1:'VDP(24)=VDP(24)-2AND255
21 VDP(12)=&B0010000000:'desactive les sprites
22 'SET PAGE 0,2:BLOAD"HEROS.SC5",S:COLOR=RESTORE
24 'SET PAGE 0,0:BLOAD"alpha.sc5",S:COLOR=RESTORE
25 '
27 'Variables Sprites Mobiles******
28 '
30 X=1+96+8:Y=0+7:'Position initiale du HERO
31 'XB=32+1:YB=127:' Position initiale ASCENCEUR
32 VM=16:VC=8:VS=16:VH=8:'Vitesses Monte, Chute, Saute, Horizontale
33 SH=1:SD=1:SG=1:'Empeche les sauts.
34 P=1:UP=0:' Active la pesanteur
35 RI=0:LE=0:' Desactive le passe muraille Droite et Gauche
36 'AS=0:Adherence a l Ascenceur
37 SC=2:'Vitesse de scrolling
40 'DATAS des Patterns des Sprites***************
42 GOTO 1250
44 'Variables des Pattern des sprites*************
46 A=0:B=1:C=2:D=3:E=4
48 'variables Latitudes et Longitudes des sprites fixes
49 '
50 A1=24:A2=56:A3=88:A4=120:A5=152:A6=184:A7=216
51 AA=183:AB=183:AC=183:AD=183:AE=183:AF=183:AG=183
52 B1=24:B2=56:B3=73:B4=120:B5=137:B6=200:B7=216
53 BA=95:BB=95:BC=95:BD=63:BE=63:BF=111:BG=111
54 C1=24:C2=41:C3=57:C4=136:C5=168:C6=184:C7=216
55 CA=15:CB=15:CC=15:CD=-1:CE=-1:CF=31:CG=31
56 D1=24:D2=56:D3=88:D4=120:D5=152:D6=184:D7=216  
57 DA=15:DB=15:DC=15:DD=15:DE=15:DF=16:DG=15
65 'Projection des Sprites Fixes
66 '
70 PUTSPRITE1,(A1,AA),1,A:PUTSPRITE2,(A2,AB),1,A:PUTSPRITE3,(A3,AC),1,A:PUTSPRITE4,(A4,AD),1,A:PUTSPRITE5,(A5,AE),1,A:PUTSPRITE6,(A6,AF),1,A:PUTSPRITE7,(A7,AG),1,A
75 PUTSPRITE8,(B1,BA),1,A:PUTSPRITE9,(B2,BB),1,A:PUTSPRITE10,(B3,BC),15,C:PUTSPRITE11,(B4,BD),15,D:PUTSPRITE12,(B5,BE),15,C:PUTSPRITE13,(B6,BF),15,D:PUTSPRITE14,(B7,BG),1,A
80 PUTSPRITE15,(C1,CA),15,D:PUTSPRITE16,(C2,CB),1,A:PUTSPRITE17,(C3,CC),15,C:PUTSPRITE18,(C4,CD),15,D:PUTSPRITE19,(C5,CE),15,C:PUTSPRITE20,(C6,CF),15,D:PUTSPRITE21,(C7,CG),1,A
85 'PUTSPRITE22,(D1,DA),1,A:PUTSPRITE23,(D2,DB),1,A:PUTSPRITE24,(D3,DC),1,A:PUTSPRITE25,(D4,DD),1,A:PUTSPRITE26,(D5,DE),1,A:PUTSPRITE27,(D6,DF),1,A:PUTSPRITE28,(D7,DG),1,A
90 '
92 ' Choix de la première page à afficher
93 '
94 J=1:' J est le premier répertoire affiché
95 '
100 IF J=1THEN CALL CHDIR ("I-1"):GOTO 200
102 IF J=2THEN CALL CHDIR ("I-2"):GOTO 200
104 IF J=3THEN CALL CHDIR ("I-3"):GOTO 200
106 IF J=4THEN CALL CHDIR ("I-4"):GOTO 200
200 CALL CHDIR ("D"):VB=D
202 BLOAD"2",S:GOSUB853:'COPY(0,210)-(255,211),0TO(0,210),1:GOSUB 853
204 BLOAD"1",S:GOSUB853:'COPY(0,208)-(255,209),0TO(0,208),1:GOSUB 853
206 CALL CHDIR ("..")
300 CALL CHDIR ("C")
302 BLOAD"8",S:GOSUB853:'COPY(0,206)-(255,207),0TO(0,206),1:GOSUB 853
304 BLOAD"7",S:GOSUB853:'COPY(0,204)-(255,205),0TO(0,204),1:GOSUB 853
306 BLOAD"6",S:GOSUB853:'COPY(0,202)-(255,203),0TO(0,202),1:GOSUB 853
308 BLOAD"5",S:GOSUB853:'COPY(0,200)-(255,201),0TO(0,200),1:GOSUB 853
310 BLOAD"4",S:GOSUB853:'COPY(0,198)-(255,199),0TO(0,198),1:GOSUB 853
312 BLOAD"3",S:GOSUB853:'COPY(0,196)-(255,197),0TO(0,196),1:GOSUB 853
314 BLOAD"2",S:GOSUB853:'COPY(0,194)-(255,195),0TO(0,194),1:GOSUB 853
316 BLOAD"1",S:GOSUB853:'COPY(0,192)-(255,193),0TO(0,192),1:GOSUB 853
318 CALL CHDIR ("..")
320 CALL CHDIR ("B")
322 BLOAD"8",S:GOSUB853:'COPY(0,190)-(255,191),0TO(0,190),1:GOSUB 853
324 BLOAD"7",S:GOSUB853:'COPY(0,188)-(255,189),0TO(0,188),1:GOSUB 853
326 BLOAD"6",S:GOSUB853:'COPY(0,186)-(255,187),0TO(0,186),1:GOSUB 853
328 BLOAD"5",S:GOSUB853:'COPY(0,184)-(255,185),0TO(0,184),1:GOSUB 853
330 BLOAD"4",S:GOSUB853:'COPY(0,182)-(255,183),0TO(0,182),1:GOSUB 853
332 BLOAD"3",S:GOSUB853:'COPY(0,180)-(255,181),0TO(0,180),1:GOSUB 853
334 BLOAD"2",S:GOSUB853:'COPY(0,178)-(255,179),0TO(0,178),1:GOSUB 853
336 BLOAD"1",S:GOSUB853:'COPY(0,176)-(255,177),0TO(0,176),1:GOSUB 853
338 CALL CHDIR ("..")
340 CALL CHDIR ("A")
342 BLOAD"8",S:GOSUB853:'COPY(0,174)-(255,175),0TO(0,174),1:GOSUB 853
344 BLOAD"7",S:GOSUB853:'COPY(0,172)-(255,173),0TO(0,172),1:GOSUB 853
346 BLOAD"6",S:GOSUB853:'COPY(0,170)-(255,171),0TO(0,170),1:GOSUB 853
348 BLOAD"5",S:GOSUB853:'COPY(0,168)-(255,169),0TO(0,168),1:GOSUB 853
350 BLOAD"4",S:GOSUB853:'COPY(0,166)-(255,167),0TO(0,166),1:GOSUB 853
352 BLOAD"3",S:GOSUB853:'COPY(0,164)-(255,165),0TO(0,164),1:GOSUB 853
354 BLOAD"2",S:GOSUB853:'COPY(0,162)-(255,163),0TO(0,162),1:GOSUB 853
356 BLOAD"1",S:GOSUB853:'COPY(0,160)-(255,161),0TO(0,160),1:GOSUB 853
358 CALL CHDIR ("..")
360 CALL CHDIR ("9")
362 BLOAD"8",S:GOSUB853:'COPY(0,158)-(255,159),0TO(0,158),1:GOSUB 853
364 BLOAD"7",S:GOSUB853:'COPY(0,156)-(255,157),0TO(0,156),1:GOSUB 853
366 BLOAD"6",S:GOSUB853:'COPY(0,154)-(255,155),0TO(0,154),1:GOSUB 853
368 BLOAD"5",S:GOSUB853:'COPY(0,152)-(255,153),0TO(0,152),1:GOSUB 853
370 BLOAD"4",S:GOSUB853:'COPY(0,150)-(255,151),0TO(0,150),1:GOSUB 853
372 BLOAD"3",S:GOSUB853:'COPY(0,148)-(255,149),0TO(0,148),1:GOSUB 853
374 BLOAD"2",S:GOSUB853:'COPY(0,146)-(255,147),0TO(0,146),1:GOSUB 853
376 BLOAD"1",S:GOSUB853:'COPY(0,144)-(255,145),0TO(0,144),1:GOSUB 853
378 CALL CHDIR ("..")
380 CALL CHDIR ("8")
382 BLOAD"8",S:GOSUB853:'COPY(0,142)-(255,143),0TO(0,142),1:GOSUB 853
384 BLOAD"7",S:GOSUB853:'COPY(0,140)-(255,141),0TO(0,140),1:GOSUB 853
386 BLOAD"6",S:GOSUB853:'COPY(0,138)-(255,139),0TO(0,138),1:GOSUB 853
388 BLOAD"5",S:GOSUB853:'COPY(0,136)-(255,137),0TO(0,136),1:GOSUB 853
390 BLOAD"4",S:GOSUB853:'COPY(0,134)-(255,135),0TO(0,134),1:GOSUB 853
392 BLOAD"3",S:GOSUB853:'COPY(0,132)-(255,133),0TO(0,132),1:GOSUB 853
394 BLOAD"2",S:GOSUB853:'COPY(0,130)-(255,131),0TO(0,130),1:GOSUB 853
396 BLOAD"1",S:GOSUB853:'COPY(0,128)-(255,129),0TO(0,128),1:GOSUB 853
398 CALL CHDIR ("..")
400 CALL CHDIR ("7")
402 BLOAD"8",S:GOSUB853:'COPY(0,126)-(255,127),0TO(0,126),1:GOSUB 853
404 BLOAD"7",S:GOSUB853:'COPY(0,124)-(255,125),0TO(0,124),1:GOSUB 853
406 BLOAD"6",S:GOSUB853:'COPY(0,122)-(255,123),0TO(0,122),1:GOSUB 853
408 BLOAD"5",S:GOSUB853:'COPY(0,120)-(255,121),0TO(0,120),1:GOSUB 853
410 BLOAD"4",S:GOSUB853:'COPY(0,118)-(255,119),0TO(0,118),1:GOSUB 853
412 BLOAD"3",S:GOSUB853:'COPY(0,116)-(255,117),0TO(0,116),1:GOSUB 853
414 BLOAD"2",S:GOSUB853:'COPY(0,114)-(255,115),0TO(0,114),1:GOSUB 853
416 BLOAD"1",S:GOSUB853:'COPY(0,112)-(255,113),0TO(0,112),1:GOSUB 853
418 CALL CHDIR ("..")
420 CALL CHDIR ("6")
422 BLOAD"8",S:GOSUB853:'COPY(0,110)-(255,111),0TO(0,110),1:GOSUB 853
424 BLOAD"7",S:GOSUB853:'COPY(0,108)-(255,109),0TO(0,108),1:GOSUB 853
426 BLOAD"6",S:GOSUB853:'COPY(0,106)-(255,107),0TO(0,106),1:GOSUB 853
428 BLOAD"5",S:GOSUB853:'COPY(0,104)-(255,105),0TO(0,104),1:GOSUB 853
430 BLOAD"4",S:GOSUB853:'COPY(0,102)-(255,103),0TO(0,102),1:GOSUB 853
432 BLOAD"3",S:GOSUB853:'COPY(0,100)-(255,101),0TO(0,100),1:GOSUB 853
434 BLOAD"2",S:GOSUB853:'COPY(0,98)-(255,99),0TO(0,98),1:GOSUB 853
436 BLOAD"1",S:GOSUB853:'COPY(0,96)-(255,97),0TO(0,96),1:GOSUB 853
438 CALL CHDIR ("..")
440 CALL CHDIR ("5")
442 BLOAD"8",S:GOSUB853:'COPY(0,94)-(255,95),0TO(0,94),1:GOSUB 853
444 BLOAD"7",S:GOSUB853:'COPY(0,92)-(255,93),0TO(0,92),1:GOSUB 853
446 BLOAD"6",S:GOSUB853:'COPY(0,90)-(255,91),0TO(0,90),1:GOSUB 853
448 BLOAD"5",S:GOSUB853:'COPY(0,88)-(255,89),0TO(0,88),1:GOSUB 853
450 BLOAD"4",S:GOSUB853:'COPY(0,86)-(255,87),0TO(0,86),1:GOSUB 853
452 BLOAD"3",S:GOSUB853:'COPY(0,84)-(255,85),0TO(0,84),1:GOSUB 853
454 BLOAD"2",S:GOSUB853:'COPY(0,82)-(255,83),0TO(0,82),1:GOSUB 853
456 BLOAD"1",S:GOSUB853:'COPY(0,80)-(255,81),0TO(0,80),1:GOSUB 853
458 CALL CHDIR ("..")
460 CALL CHDIR ("4")
462 BLOAD"8",S:GOSUB853:'COPY(0,78)-(255,79),0TO(0,78),1:GOSUB 853
464 BLOAD"7",S:GOSUB853:'COPY(0,76)-(255,77),0TO(0,76),1:GOSUB 853
466 BLOAD"6",S:GOSUB853:'COPY(0,74)-(255,75),0TO(0,74),1:GOSUB 853
468 BLOAD"5",S:GOSUB853:'COPY(0,72)-(255,73),0TO(0,72),1:GOSUB 853
470 BLOAD"4",S:GOSUB853:'COPY(0,70)-(255,71),0TO(0,70),1:GOSUB 853
472 BLOAD"3",S:GOSUB853:'COPY(0,68)-(255,69),0TO(0,68),1:GOSUB 853
474 BLOAD"2",S:GOSUB853:'COPY(0,66)-(255,67),0TO(0,66),1:GOSUB 853
476 BLOAD"1",S:GOSUB853:'COPY(0,64)-(255,65),0TO(0,64),1:GOSUB 853
478 CALL CHDIR ("..")
480 CALL CHDIR ("3")
482 BLOAD"8",S:GOSUB853:'COPY(0,62)-(255,63),0TO(0,62),1:GOSUB 853
484 BLOAD"7",S:GOSUB853:'COPY(0,60)-(255,61),0TO(0,60),1:GOSUB 853
486 BLOAD"6",S:GOSUB853:'COPY(0,58)-(255,59),0TO(0,58),1:GOSUB 853
488 BLOAD"5",S:GOSUB853:'COPY(0,56)-(255,57),0TO(0,56),1:GOSUB 853
490 BLOAD"4",S:GOSUB853:'COPY(0,54)-(255,55),0TO(0,54),1:GOSUB 853
492 BLOAD"3",S:GOSUB853:'COPY(0,52)-(255,53),0TO(0,52),1:GOSUB 853
494 BLOAD"2",S:GOSUB853:'COPY(0,50)-(255,51),0TO(0,50),1:GOSUB 853
496 BLOAD"1",S:GOSUB853:'COPY(0,48)-(255,49),0TO(0,48),1:GOSUB 853
498 CALL CHDIR ("..")
500 CALL CHDIR ("2")
502 BLOAD"8",S:GOSUB853:'COPY(0,46)-(255,47),0TO(0,46),1:GOSUB 853
504 BLOAD"7",S:GOSUB853:'COPY(0,44)-(255,45),0TO(0,44),1:GOSUB 853
506 BLOAD"6",S:GOSUB853:'COPY(0,42)-(255,43),0TO(0,42),1:GOSUB 853
508 BLOAD"5",S:GOSUB853:'COPY(0,40)-(255,41),0TO(0,40),1:GOSUB 853
510 BLOAD"4",S:GOSUB853:'COPY(0,38)-(255,39),0TO(0,38),1:GOSUB 853
512 BLOAD"3",S:GOSUB853:'COPY(0,36)-(255,37),0TO(0,36),1:GOSUB 853
514 BLOAD"2",S:GOSUB853:'COPY(0,34)-(255,35),0TO(0,34),1:GOSUB 853
516 BLOAD"1",S:GOSUB853:'COPY(0,32)-(255,33),0TO(0,32),1:GOSUB 853
518 CALL CHDIR ("..")
520 CALL CHDIR ("1")
522 BLOAD"8",S:GOSUB853:'COPY(0,30)-(255,31),0TO(0,30),1:GOSUB 853
524 BLOAD"7",S:GOSUB853:'COPY(0,28)-(255,29),0TO(0,28),1:GOSUB 853
526 BLOAD"6",S:GOSUB853:'COPY(0,26)-(255,27),0TO(0,26),1:GOSUB 853
528 BLOAD"5",S:GOSUB853:'COPY(0,24)-(255,25),0TO(0,24),1:GOSUB 853
530 BLOAD"4",S:GOSUB853:'COPY(0,22)-(255,23),0TO(0,22),1:GOSUB 853
532 BLOAD"3",S:GOSUB853:'COPY(0,20)-(255,21),0TO(0,20),1:GOSUB 853
534 BLOAD"2",S:GOSUB853:'COPY(0,18)-(255,19),0TO(0,18),1:GOSUB 853
536 BLOAD"1",S:GOSUB853:'COPY(0,16)-(255,17),0TO(0,16),1:GOSUB 853
538 CALL CHDIR ("..")
540 CALL CHDIR ("0")
542 BLOAD"8",S:GOSUB853:'COPY(0,14)-(255,15),0TO(0,14),1:GOSUB 853
544 BLOAD"7",S:GOSUB853:'COPY(0,12)-(255,13),0TO(0,12),1:GOSUB 853
546 BLOAD"6",S:GOSUB853:'COPY(0,10)-(255,11),0TO(0,10),1:GOSUB 853
548 BLOAD"5",S:GOSUB853:'COPY(0,8)-(255,9),0TO(0,8),1:GOSUB 853
550 BLOAD"4",S:GOSUB853:'COPY(0,6)-(255,7),0TO(0,6),1:GOSUB 853
552 BLOAD"3",S:GOSUB853:'COPY(0,4)-(255,5),0TO(0,4),1:GOSUB 853
554 BLOAD"2",S:GOSUB853:'COPY(0,2)-(255,3),0TO(0,2),1:GOSUB 853
556 BLOAD"1",S:GOSUB853:'COPY(0,0)-(255,1),0TO(0,0),1:GOSUB 853
558 CALL CHDIR ("..")
559 IFJ=4THENSC=0:GOSUB853:GOTO559
560 CALL CHDIR ("F")
562 BLOAD"8",S:GOSUB853:'BLOAD"8",S,0+32768!:GOSUB 853
564 BLOAD"7",S:GOSUB853:'BLOAD"7",S,0+32768!:GOSUB 853
566 BLOAD"6",S:GOSUB853:'BLOAD"6",S,0+32768!:GOSUB 853
568 BLOAD"5",S:GOSUB853:'BLOAD"5",S,0+32768!:GOSUB 853
570 BLOAD"4",S:GOSUB853:'BLOAD"4",S,0+32768!:GOSUB 853
572 BLOAD"3",S:GOSUB853:'BLOAD"3",S,0+32768!:GOSUB 853
574 BLOAD"2",S:GOSUB853:'BLOAD"2",S,0+32768!:GOSUB 853
576 BLOAD"1",S:GOSUB853:'BLOAD"1",S,0+32768!:GOSUB 853:'Zone Sprites
578 CALL CHDIR ("..")
580 CALL CHDIR ("E")
582 BLOAD"8",S:GOSUB853:'BLOAD"8",S,0+32768!:GOSUB 853
584 BLOAD"7",S:GOSUB853:'BLOAD"7",S,0+32768!:GOSUB 853:'Zone Sprites
586 BLOAD"6",S:GOSUB853:'BLOAD"6",S,0+32768!:GOSUB 853:'Zone Sprites
588 BLOAD"5",S:GOSUB853:'BLOAD"5",S,0+32768!:GOSUB 853:'Zone Sprites
590 BLOAD"4",S:GOSUB853:'BLOAD"4",S,0+32768!:GOSUB 853
592 BLOAD"3",S:GOSUB853:'BLOAD"3",S,0+32768!:GOSUB 853
594 BLOAD"2",S:GOSUB853:'BLOAD"2",S,0+32768!:GOSUB 853
596 BLOAD"1",S:GOSUB853:'BLOAD"1",S,0+32768!:GOSUB 853
598 CALL CHDIR ("..")
600 CALL CHDIR ("D")
602 BLOAD"8",S:GOSUB853:'BLOAD"8",S,0+32768!:GOSUB 853
604 BLOAD"7",S:GOSUB853:'BLOAD"7",S,0+32768!:GOSUB 853
606 BLOAD"6",S:GOSUB853:'BLOAD"6",S,0+32768!:GOSUB 853
608 BLOAD"5",S:GOSUB853:'BLOAD"5",S,0+32768!:GOSUB 853
610 BLOAD"4",S:GOSUB853:'BLOAD"4",S,0+32768!:GOSUB 853
612 BLOAD"3",S:GOSUB853:'BLOAD"3",S,0+32768!:GOSUB 853
614 CALL CHDIR (".."):CALL CHDIR (".."):J=J+1:GOTO100
838 'Projection des Sprites Mobiles***************
839 '
840 'XB=XB+8AND255:'MOTEUR ASCENCEUR
841 'IFAS=1THENX=XB:'ADHERENCE ASCENCEUR 1
843 'PUTSPRITE29,(XB,YB),15,A:'ASCENCEUR 1
845 'IFY>YB-14THENIFY<YBTHENIFX>XB-4THENIFX<XB+8THENAS=1
847 '
850 'Moteur Principal
852 '
853 S=STICK(0):ONS+1GOSUB 860,870,880,890,860,860,860,930,940:'Renvoie selon Stick ZERO
854 RETURN:'VDP(24)=VDP(24)-SCAND255:RETURN
855 '
856 'Gestion des Mouvements
857 '
858 'STATIQUE
860 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1000:SPRITEON:'Si colision aller a 1000
861 'IFRI=1THENP=1
862 'IFLE=1THENP=1
863 IFP=1THEN910:'Si pesanteur alors aller a ligne 210 (chute)
864 RETURN
867 '
868 'SAUT HAUT
870 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1010:SPRITEON:'Si colision aller a 1010
872 IFSH=5THEN910:'Si Saut boucle x fois alors aller a 210
873 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y
874 Y=Y-VS:SH=SH+1:P=1:'Saut Haut utilise! Pesanteur active
876 RETURN
877 '
878 'SAUT DROITE
880 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1020:SPRITEON:'Si colision aller a 1020
882 IFSD=3THEN910:'Si Saut Droite deja utilise alors aller a 210
883 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y
884 X=X+VS:Y=Y-VS:SD=SD+1:P=1:'Saut Droite utilise! Pesanteur active
886 RETURN
887 '
888 'DROITE
890 PUTSPRITE0,(X,Y),8,A:ONSPRITEGOSUB1030:SPRITEON:'Si colision aller a 1030
892 X=X+VH:'Deplacement a droite
893 '
894 IFP=1THEN910:'Si pesanteur alors aller a 210 (chute)
896 RETURN 
897 '
898 'CHUTE A DROITE
900 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1040:SPRITEON:'SI COLISION ALLER A 1040
902 X=X+VC:'Deplacement a Droite
903 IFUP=1THENY=Y+2:UP=0:'si saut utilise alors recalibrer Y
904 IFP=1THENY=Y+VC:'Si pesanteur alors chute de VC pixels
906 RETURN
907 '
908 'CHUTE
910 PUTSPRITE0,(X,Y),8,D:ONSPRITE GOSUB1050:SPRITEON:'Si colision alors 1050
911 IFLE=1THENEL=EL+1:P=1:'Si RI actif alors Pesanteur Actif
912 IFEL=2THENX=X+1:LE=0:EL=0
913 IFRI=1THENRI=0:P=1:'Si RI actif alors Pesanteur Actif
914 IFUP=1THENY=Y+2:UP=0:'Si saut utilise alors recalibrer Y
915 IFP=1THENY=Y+VC:'Si pesanteur alors chute de VC pixels
916 RETURN
917 '
918 'CHUTE A GAUCHE
920 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1060:SPRITEON:SI COLISION ALLER A 1060
922 X=X-16:'Deplacement a Gauche
923 IFUP=1THENY=Y+2:UP=0:SI SAUT UTILISE ALORS RECALIBRER Y
924 IFP=1THENY=Y+VC:'Si pesanteur alors chute de VC pixels
926 RETURN
927 '
928 'GAUCHE
930 PUTSPRITE0,(X,Y),8,B:ONSPRITE GOSUB1070:'SPRITEON:Si colision aller a 1070
932 X=X-VH:'Deplacement a Gauche
933 '
934 IFP=1THEN910:'Si pesanteur aller a 210 (chute)
936 RETURN
937 '
938 'SAUT GAUCHE
940 PUTSPRITE0,(X,Y),8,D:ONSPRITEGOSUB1080:SPRITEON:'Si colision aller a 1020
942 IFSG=3THEN910:'Si Saut Gauche deja utilise alors aller a 210
943 IFUP=1THENY=Y+2:UP=0:AS=0:'Si saut utilise alors recalibrer Y
944 X=X-VS:Y=Y-VS:SG=SG+1:P=1:'Saut Gauche utilisé! Pesanteur active
946 RETURN
998 '
999 'COLISION STATIQUE
1000 P=0:SH=0:SD=0:SG=0
1001 SPRITEOFF
1002 IFRI=1THENP=1
1003 IFLE=1THENP=1
1004 IFUP=0THENY=Y-2:UP=1
1005 RETURN
1008 '
1009 'COLISION SAUT HAUT
1010 P=0:SH=0:SD=0:SG=0
1011 SPRITEOFF
1013 IFUP=0THENY=Y-2:UP=1
1014 RETURN
1018 '
1019 'COLISION SAUT DROITE
1020 P=0:SH=0:SD=0:SG=0
1021 SPRITEOFF
1023 IFUP=0THENY=Y-2:UP=1
1024 RETURN
1028 '
1029 'COLISION DROITE
1030 IFP=1THENRETURN
1031 P=1:SH=0:SD=0:SG=0:RI=1
1032 SPRITEOFF
1033 IFUP=0THENY=Y-2:UP=1
1034 RETURN
1038 '
1039 'COLISION CHUTE A DROITE
1040 P=0:SH=0:SD=0:SG=0
1041 SPRITEOFF
1043 IFUP=0THENY=Y-2:UP=1
1044 RETURN
1048 '
1049 'COLISION BAS
1050 P=0:SH=0:SD=0:SG=0
1051 'SPRITEOFF
1053 IFUP=0THENY=Y-2:UP=1
1054 RETURN
1058 '
1059 'COLISION CHUTE A GAUCHE
1060 P=0:SH=1:SD=0:SG=0
1061 SPRITEOFF
1063 IFUP=0THENY=Y-2:UP=1
1064 RETURN
1068 '
1069 'COLISION GAUCHE
1070 IFP=1THENRETURN
1071 P=1:SH=0:SD=0:SG=0:LE=1
1072 X=X-16-1:SPRITEOFF
1073 IFUP=0THENY=Y-2:UP=1
1074 RETURN
1078 '
1079 'COLISION SAUT GAUCHE
1080 P=0:SH=0:SD=0:SG=0
1081 SPRITEOFF
1083 IFUP=0THENY=Y-2:UP=1
1084 RETURN
1088 '
1200 DESSIN DES SPRITES
1201 '
1250 FOR I=1TO16:READA$:S$=S$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTI
1252 ' DESSIN DES SPRITES
1260 RESTORE 1301
1270 FORI=1TO16:READA$:S$=S$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTI
1280 SPRITE$(0)=S$
1290 GOTO 1350
1301 DATA 0000000000000000
1302 DATA 0000000000000000
1303 DATA 0000000000000000
1304 DATA 0000000000000000
1305 DATA 0000000000000000
1306 DATA 0000000000000000
1307 DATA 0000000000000000
1308 DATA 0000000000000000
1309 DATA 1111111111111111
1310 DATA 1000000000000000
1311 DATA 0000000000000000
1312 DATA 0000000000000000
1313 DATA 0000000000000000
1314 DATA 0000000000000000
1315 DATA 0000000000000000
1316 DATA 0000000000000000
1350 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTJB
1360 RESTORE 1401
1370 FORJB=1TO16:READA$:T$=T$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTJB
1380 SPRITE$(1)=T$
1390 GOTO 1450
1401 DATA 0000000000000000
1402 DATA 0000000000000000
1403 DATA 0000000000000000
1404 DATA 0000000000000000
1405 DATA 0000000000000000
1406 DATA 0000000000000000
1407 DATA 0000000000000000
1408 DATA 0000000000000000
1409 DATA 1111111111111111
1410 DATA 0000000000000001
1411 DATA 0000000000000000
1412 DATA 0000000000000000
1413 DATA 0000000000000000
1414 DATA 0000000000000000
1415 DATA 0000000000000000
1416 DATA 0000000000000000
1450 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTK
1460 RESTORE 1501
1470 FORK=1TO16:READA$:U$=U$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTK
1480 SPRITE$(2)=U$
1490 GOTO 1550
1501 DATA 0000000000000000
1502 DATA 0000000000000000
1503 DATA 0000000000000000
1504 DATA 0000000000000000
1505 DATA 0000000000000000
1506 DATA 0000000000000000
1507 DATA 0000000000000000
1508 DATA 0000000010000000
1509 DATA 1111111111111111
1510 DATA 0000000000000000
1511 DATA 0000000000000000
1512 DATA 0000000000000000
1513 DATA 0000000000000000
1514 DATA 0000000000000000
1515 DATA 0000000000000000
1516 DATA 0000000000000000
1550 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+LEFT$(A$,8))):NEXTL
1560 RESTORE 1601
1570 FORL=1TO16:READA$:V$=V$+CHR$(VAL("&B"+RIGHT$(A$,8))):NEXTL
1580 SPRITE$(3)=V$
1590 GOTO 44
1601 DATA 0000000000000000
1602 DATA 0000000000000000
1603 DATA 0000000000000000
1604 DATA 0000000000000000
1605 DATA 0000000000000000
1606 DATA 0000000000000000
1607 DATA 0000000000000000
1608 DATA 1000000000000000
1609 DATA 1111111111111111
1610 DATA 0000000000000000
1611 DATA 0000000000000000
1612 DATA 0000000000000000
1613 DATA 0000000000000000
1614 DATA 0000000000000000
1615 DATA 0000000000000000
1616 DATA 0000000000000000

 


Chaque bribes d'image.SC5 chargée en SCREEN7 se "dédouble" à ceci près que les deux images générées ne sont pas "parfaitement identiques.

@Jipe: J'ai bien compris ton explication mais une chose m'intrigue:
Pourquoi l'image générée est donc "pseudo dédoublée" (les deux images e sont pas véritablement clonées mais presque identiques) alors que les SCREEN5 et 7 on selon les références que tu écris la même "architecture"?

en screen 5 un octet = 2 pixels (1111 2222) les 4 bits codent la couleur
en screen 7 un octet = 2 pixels (1111 2222) les 4 bits codent la couleur

En fait je voudrais voir si en créant une image en SCREEN7 puis affichée en SCREEN5, je peux afficher des images sur 2 pages différentes du SCREEN5 :D
(Le screen 7 est un exemple...Si ca marche avec un autre mode graphique, je suis preneur :top )


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

Le 28/10/2015 à 17h10
le screen 7 fait 512 x 212
le screen 5 fait 256 x 212
donc tu génére une image en 256 pixels de large
ensuite en screen 7 les octets s'affichent a la file 256 + 256 dans la page de 512 de large d'ou l'impression de dédoublement
comme la page screen5 est plus petite en taille l'image ne doit pas dépasser la moitié de l'écran en screen 7


:noel
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 28/10/2015 à 17h31
Voici ce qui se passe en image.

La source est faite de Bribes.SC5 et l'image est affichée en SCREEN7.

https://youtu.be/ktUq5QvypgA

Arf j'arrive pas à intégrer la vidéo correctement :fou

Merci MetalGear2 :) Edité par igal Le 28/10/2015 à 17h55


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 27/11/2010 à 23h40

Messages: 2768

Le 28/10/2015 à 17h50
igal :
Arf j'arrive pas à intégrer la vidéo correctement :fou







Mon site consacré au MSX : http://mymsx2.free.fr
Site web    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 29/10/2015 à 08h32
Voici l'astuce que je cherche à mettre au point.

Je créer une IMAGE.SCx qui me permettrait d'afficher des données en VRAM sur la page 0 ET 1 mais en utilisant un seul BLOAD :top

L'idée est donc d'encapsuler dans IMAGE.SC7 des "Pixels" qui sont tellement "distant" les uns des autres que certains Pixels seraient visibles sur "SET PAGE 0" et d'autres "Pixels" seraient visibles sur "SET PAGE1" en SCREEN 5.

Au final, on obtiendrait le résulta escompter à savoir [Un seul chargement et Deux destinations].

Si vous avez des critiques (positives ou négatives), n'hésitez pas. Toutes les critiques sont bonnes (enfin presque toutes lol)


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 29/10/2015 à 09h40
igal,

Il faut voir la VRAM comme un écran continu, ou étendu, si tu préfères.
- Si on prends l'exemple du SCREEN 5, la VRAM se comporte comme un écran étendu de 256x1024.
- SI on prends l'exemple du SCREEN 7, la VRAM se comporte comme un écran étendu de 512x512.
(voir à ce sujet la page 150 du livre "Pratique du MSX2")

BLOAD,S charge une série continue d'octets dans la VRAM(*), ni plus, ni moins. Il ne prends pas en compte le SCREEN dans lequel est le VDP, il ne fait que sauvegarder la portion de VRAM qu'on lui demande de sauvegarder.

Si tu veux qu'une portion d'écran soit à la fois sur 2 pages différentes par un seul BLOAD,S, il n'y a qu'une seule solution : c'est de sauvegarder la VRAM dans exactement la même configuration que tu veux retrouver au chargement. Ce qui signifie que tu vas alors forcément ré-écrire sur toute la partie d'écran qui est entre les deux portions (et entre les deux pages). Et je ne pense pas que ce soit ce que tu recherches.

En résumé, à part cette solution (qui, je pense, ne conviens pas à ta demande), il n'y en a pas d'autres.

(*) Ce n'est pas tout à fait vrai, parce que la palette de couleur est chargée séparément et est transférée ailleurs en VRAM (dans la table des couleurs) lors de l'instruction "COLOR = RESTORE", mais cela ne concerne que 32 octets. Edité par Metalion Le 29/10/2015 à 09h48


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 29/10/2015 à 12h26
C'est plus compliqué en fait. La VRAM n'est pas gérée pareil dans tous les modes d'écran puis, en SCREEN5, on ne peut pas mettre une adresse suppérieure à 07FFFh dans BSAVE. Il faudrait au moins trouver sur quoi se base l'instruction pour aller au dessus de 07FFFh.
   
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 29/10/2015 à 14h05
Justement, je voudrais BSAVE en SCREEN 7 puis ensuite BLOAD EN SCREEN 5 :)

En fait je pense que:

Les 4 pages en screen 5 totalisent le meme nombre de données que les 2 pages en screen 7.

Partant du constat qu'en screen 5 sous page ZÉRO on peut écrire des données sur la page 1 sans dire au basic de placer ces données en page 1.
Pour se faire, il faut avoir précédemment BSAVE les données placées en page 1 mais en étant sous la page 0 et en indiquant que les données à sauvegardées avec la valeur hexadécimale la plus grande possible PLUS la plus grande valeur décimale possible.

(Nb:il me semble que ça marche aussi avec des valeurs négatives)

C'est la méthode que j'utilise pour faire générer les pages 0 et 1 en ne sortant pas de la page 0 et sans indiquer quelques coordonnées que ce soit à bload.

Partant de ce constat:
Je me dit que "peut etre" qu'en usant de la même méthode avec le screen 7 qui compte 2 pages seulement mais "implique" autant de données que les 4 pages d'un screen 5, je pourrai créer une image.SC7 qui une fois affichée en screen 5 aurait des données qui s'afficheraient en partie dans une page et en partie dans l'autre page (peut être les pages 1 et 2 du screen 5 qui équivaudrait à des données stockées en fin de la page 0 et en début de la page 1 du screen7).

Bon c'est tordu comme d'habitude mais on se refait pas :fou Edité par igal Le 29/10/2015 à 14h07


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

Le 29/10/2015 à 14h15
en théorie je pense que ça doit marcher

en pratique il faut générer une image ainsi faite

256 octets de la 1ére ligne + 256 octets de la 2éme ligne
256 octets de la 3éme ligne + 256 octets de la 4éme ligne
256 octets de la 5éme ligne + 256 octets de la 6éme ligne
etc....

a mon avis ça va être bien plus long que 2 bload


:noel
Site web    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 29/10/2015 à 16h46
igal :
Les 4 pages en screen 5 totalisent le meme nombre de données que les 2 pages en screen 7


Oui, c'est exact.



igal :
Partant du constat qu'en screen 5 sous page ZÉRO on peut écrire des données sur la page 1 sans dire au basic de placer ces données en page 1.


Oui, puisque quand tu fais BLOAD,S tu peux charger les données où tu veux en VRAM, en utilisant un offset (qui, de mémoire, est limité). Remarque que, techniquement parlant, tu "dis au basic" de placer les données là où tu le souhaites.



igal :
Pour se faire, il faut avoir précédemment BSAVE les données placées en page 1 mais en étant sous la page 0 et en indiquant que les données à sauvegardées avec la valeur hexadécimale la plus grande possible PLUS la plus grande valeur décimale possible. (Nb:il me semble que ça marche aussi avec des valeurs négatives)


Jusque là, c'est toujours le fonctionnement normal de BSAVE, décrit ici :



Code :
* BSAVE <filename>, <start address>, <end address>, S
* BLOAD <filename> ,S

These are statements of DISK BASIC, used to save/load the contents of VRAM 
to/from disk files. Both can be used in any screen mode, note, however, that 
only the active pages are valid when the screen mode is from 5 to 8. No 
cassette tapes can be used. Valid value range of <address> is from -32768 to 
-2, or from 0 to 65534 (&HFFFE).


Ces commandes n'acceptant que des arguments sous la forme de nombres sur 2 octets, leur fonctionnement est limité dans l'espace de la VRAM, mais l'offset de la commande BLOAD permet de transférer les données sur une autre page que celle qui est active. Note que le fait que les arguments soit positifs ou négatifs ne change rien, puisqu'il s'agit de deux représentations du même nombre ( 65534 = &hFFFE = -2).



igal :
Partant de ce constat: Je me dit que "peut etre" qu'en usant de la même méthode avec le screen 7 qui compte 2 pages seulement mais "implique" autant de données que les 4 pages d'un screen 5, je pourrai créer une image.SC7 qui une fois affichée en screen 5 aurait des données qui s'afficheraient en partie dans une page et en partie dans l'autre page (peut être les pages 1 et 2 du screen 5 qui équivaudrait à des données stockées en fin de la page 0 et en début de la page 1 du screen7).


Oui, si tu sauvegardes un bloc de 65536 octets en SCREEN 7 et que tu le recharges en SCREEN5, tu vas effectivement remplir 2 pages en SCREEN 5. Sauf que pour que le résultat soit correctement affiché en SCREEN 5, tu devras avoir préparé ton image en SCREEN 7 de manière à ce que chaque ligne de pixels en SCREEN 7 soit construite de 2 lignes successives de ton image en SCREEN 5 (c'est ce qu'explique Jipe). Et qu'il te faudra aussi déplacer les autres tables (sprites, palette, ...) pour ne pas venir les écraser.



Et il faut compter également la remarque de GDX : le comportement des commandes BSAVE,S/BLOAD,S est effectivement différent en fonction du mode graphique, et elles connaissent certaines limitations qu'on ne peut connaitre qu'en les expérimentant directement.



Mais il me semble qu'on s'éloigne de ce que tu voulais faire au départ (ou du moins ce que j'en ai compris) : tu voulais charger une "bribe" en page 0 et en même temps en page 1, simplement décalées d'une page, sans modifier ce qu'il y a entre les deux. Si c'est bien ça que tu veux faire, tout ce qu'on vient d'expliquer ne sert à rien.



Je m'explique : si tu sauvegardes une "bribe" correspondant à une seule ligne de pixel en SCREEN 7 (512 pixels consécutifs, donc) et que tu la recharges en SCREEN 5, tu obtiendras 2 lignes consécutives de 256 pixels sur la page 0. La deuxième ligne ne sera pas en page 1. Et la conclusion serait pareille si ta "bribe" fait 2,3,4 ou 16 pixels de haut. Tu obtiendrais une image "entrelacée" (ou "désentrelacée", c'est selon) en page 0, mais toujours rien en page 1.



La seule façon d'avoir une image identique en page 0 et en page 1 est de charger une image qui va occuper complètement la page 0 et la page 1 en SCREEN 5, et donc qui aura occupé complètement la page 0 en SCREEN 7. Ce qui va (je pense), à l'encontre de ce que tu veux faire.



Je reste convaincu que la meilleure solution à ton problème est d'utiliser une macro-commande du VDP (la commande YMMM) en la déclenchant par une succession de commandes VDP en BASIC (voir le début de ce sujet).



EDIT : Et plus précisément, ici : http://www.msxvillage.fr/forum/topic.php?id=1956#m44958 Edité par Metalion Le 29/10/2015 à 19h57


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 07/11/2015 à 11h15
Merci pour tes explication Metalion..

Je poste juste un dessin puis je reviendrais par la suite sur certains details que tu souléves.



N'hésitez pas a réagir, toutes les suggestions sont bonnes :)


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5795

Le 07/11/2015 à 11h33
Donc si on rajoute une simple commande : copy ........,0 to........., 1, ca devrait le faire non?
Apres faut voir si le temps de boucle traitement programme a son importance pour le projet d'Igal



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

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10358

Le 07/11/2015 à 11h33
vérifie bien mais tu devrait avoir une image de 512 x 128 en screen 7


:noel
Site web    
TurboSEB Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5795

Le 07/11/2015 à 11h41
Je pense a un truc, le programme Dynamic Publisher (screen7 de memoire et ca doit etre du monochrome ) utilise un format de fichier qui permet de charger 2 pages ^^
sur mes Mega Msx News (malheureusement, ce ne sont pas les versions dispo sur le site ou il manque la partie dynamic publisher) , j'utiliser un programme sous basic asser complexe, qui permet de charger en vram ces fichiers qui s'affiche bien sur 2 pages en scrolling vertical ^^ Edité par TurboSEB Le 07/11/2015 à 11h42



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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++ Groupe : Shoutbox

Inscrit le : 08/08/2010 à 20h57

Messages: 5795

Le 07/11/2015 à 12h10
@GDX, merci, je comprend mieu :top

En screen 5, il me semble que l'on peut deja sauvegarder 2 pages en une en mettant les bonnes adresses dans le Bsave
(désolé si je dis des bêtises, j'essais encore de piger ce que veut le tortueux cerveau d'Igal :lol) Edité par TurboSEB Le 07/11/2015 à 12h12



MSX 1&2 + Moniteurs+divers (environ 0.70Tonnes)
   
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie