MSX Village forum

La Place des Développeurs [Réglé] Besoin d'aide pour appel sous routine ASM

GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 11/02/2012 à 11h42

Reprise du message précédent

Metalion :
Il y a plusieurs façons de faire. La plus simple, c'est de mettre une instruction "HALT" avant l'opération en VRAM. Cette instruction met le processeur en pause jusqu'à l'arrivée d'une interruption. Comme le VDP génère une interruption à chaque VBLANK (à la fin du balayage de l'écran), ton programme va redémarrer à l'arrivée de cette interruption, et donc le rafraichissement de l'écran va rythmer l'éxecution de ton programme.


Très mauvaise solution.



Mieux vaut utiliser le hook pour insérer ta routine et lire le registre 0 du VDP pour voir si c'est une interruption du VDP ou pas.
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 11/02/2012 à 13h24
GDX :
Très mauvaise solution


Je ne dirait pas qu'elle est "très mauvaise" :(

Elle n'est pas parfaite car pas entièrement fiable.



Mais vu qu'il débute, c'est une approche plus facile même si elle a ses problèmes.

Les autres méthodes sont beaucoup plus fiables, mais elles sont beaucoup plus compliquées à mettre en oeuvre. Edité par Metalion Le 11/02/2012 à 13h27


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 12/02/2012 à 19h50
J'ai rajouté un HALT avant l'appel de la routine bios 5C et le résultat est pas mal du tout :)
Maintenant je vais bosser sur les GFX pour faire quelque chose sympa
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 12/02/2012 à 19h54
Fabf...

Ch'suis curieux là.....

Fais péter uen vidéo :p


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 12/02/2012 à 20h06
Je peux pas une vidéo
Un DSK ça t'irait ?
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 12/02/2012 à 20h21
allé :kiss


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 12/02/2012 à 20h34
Le voila tout chaud ;)

Comme je le disais je dois encore revoir les GFX car là ça pique les yeux

scroll.zip Edité par Fabf Le 12/02/2012 à 21h02
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 12/02/2012 à 21h17
Tu sais que j'aime bien toucher à tous les boutons :p

J'ai remplacé:
150 FOR B=1 TO 20:NEXT B
par
150 FOR B=1 TO-20:NEXT B

Le scrool prend de la vitesse :D

Du moment que c'est un MOINS, c'est plus rapide... Edité par igal Le 12/02/2012 à 21h18


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

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 12/02/2012 à 21h25
Tu annule la boucle en mettant un négatif comme ça
Donc ça tourne à pleine vitesse

Tu peux aussi modifier

140 FOR A=&H44 TO &H44+7

par

140 FOR A=&H44+7 TO &H44 step-1

;)
GDX Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 17/01/2011 à 08h52

Messages: 3004

Le 13/02/2012 à 05h04
En Basic, le moindre détail peut accélérer le programme. Voici ton programme à l'identique mais plus lisible et plus rapide :



Citation :
10 CLEAR 300,&HC57F

20 COLOR 15,1,1:SCREEN1:KEY OFF:WIDTH32

30 FOR A=&HC580 TO A+17:READ A$:POKE A,VAL("&h"+A$):NEXT

40 FOR A=&HC544 TO A+15:READ B:POKE A,B:NEXT

50 DEFUSR=&HC580:POKE&HC57E,&HC5

60 PRINT STRING$(192,240);STRING$(192,240);STRING$(192,240);STRING$(192,240);

70 FOR A=&H44 TO A+7

80 FOR B=1 TO 20:NEXT B

90 POKE&HC57F,A:B=USR(0):NEXT

100 GOTO 70

110 DATA 3a,7e,c5,67,3a,7f,c5,6f,01,16,00,11,80,07,76,C3,5C,00

120 DATA 24,36,66,129,129,66,36,24

130 DATA 24,36,66,129,129,66,36,24




Explications :



- Mieux vaut mettre les valeurs qui concernent les adresses et la partie langage machine en hexadécimal.

- J'ai mis 300 au CLEAR car l'insruction String$ prend 192 octects à elle seule.

- Ne pas oublier le WIDTH si le programme est en SCREEN 0 ou 1.

- Une petite boucle FOR ~ NEXT est plus rapide sur une même ligne.

- Faire un PRINT de 4 STRING$ est plus rapide qu'avec une boucle FOR ~ NEXT

- Je trouve les boucles FOR ~ NEXT plus lisible comme ça.

- Ça sert à rien de déclarer des variables supplémentaires pour le USR donc je réutilise B à la place de Y et je vire X.

- Dans la partie machine, j'ai mis un JP au lieu d'un CALL pour éviter un RET, ça fait gagner 17 cycles et un octet !

- Tu peux récuppérer ton programme BASIC avec un éditeur de text si tu sauvegardes ton programme avec SAVE"SCROLL.BAS",A. Edité par GDX Le 13/02/2012 à 05h40
   
Fabf Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 24/08/2010 à 20h55

Messages: 4833

Le 13/02/2012 à 20h05
T'as la forme toi à 5h00 du mat :lol

J'ai en effet pas optimisé le programme basic, c'était juste pour exploiter la routine.
Merci pour les conseils et bravo pour le JP :top

Je vais tester ce soir sur 2x2 blocs
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1487

Le 13/02/2012 à 20h16
Fabf :
Le voila tout chaud ;)

Comme je le disais je dois encore revoir les GFX car là ça pique les yeux


Joli ;)

Bravo pour cette première expérience ^^


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)
   
Répondre
Sujet verrouillé, vous ne pouvez pas poster de message