MSX Village forum

La Place des Développeurs Projet Carwar

aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2714

Le 09/03/2011 à 09h49

Reprise du message précédent

Je post pas ma nouvelle version car ça change rien visuellement, mais j'ai réussi à compresser mes données (voiture & pilote) et à gagner 2 Ko sur ma cartouche ! Ça va me permettre de rajouter quelques tiles et surtout, de finir le code (qui, mine de rien, prend pas mal de place !). :)


On est toujours ignorant avant de savoir.
Github    
gradius Membre non connecté

Maire-adjoint

Rang

Avatar

Inscrit le : 06/10/2009 à 18h27

Messages: 613

Le 10/03/2011 à 13h37
Tout ces efforts me rappellent quelque chose...




Courage Aoineko, on est dans les tribunes pour t'encourager ! :lol


MSX Turbo-R FS A1GT - 1 Mo de RAM - Disque dur SCSI Syquest cartouches de 270 Mo - Lecteur CD. Musique, musique, musique et encore musique !
   
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2714

Le 14/03/2011 à 13h57
Petite question : Le DIX et DIY du registre R45 peuvent t'il servir pour faire de la symétrie horizontale/verticale ? En gros, est-ce que ça change juste la position d'affichage, ou bien le sens dans lequel l'image est copié ? :hum


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 15/03/2011 à 09h52
Je suppose (parce que ta question n'est pas très précise) que cette question est posée dans le contexte d'une copie type HMMM ou LMMM ... Et si c'est bien le cas, la réponse est non. DIX et DIY spécifient seulement le sens de la copie à partir du pixel d'origine, et donc son positionnement sur l'écran.


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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2714

Le 15/03/2011 à 12h40
La question était de savoir si on pouvait utiliser cette fonctionnalité pour créer des images miroirs. Dommage qu'on ne puisse pas. :moue

Du coup, je trouve pas de solution pour accélérer l'affichage de mes tiles... :gne

(Je vais p'être juste préparer les tiles les plus courants en VRAM)


On est toujours ignorant avant de savoir.
Github    
igal Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : compte ++

Inscrit le : 29/07/2010 à 17h19

Messages: 5492

Le 15/03/2011 à 13h08
Salut Aoineko!

Je me suis toujours posé la question à savoir si les images peuvent être affichées en mode "Mirroir"!
Cela permettrai de varier des décors en donnant doublant la quantité de décors visibles!
Est ce bien la question que tu te pose? ou alors j'ai mal compris?

En regardant de près on voit pourtant de nombreux exemples de décors symétriques dans les jeux Konami :gne
Cela me laisse penser qu'une autre solution doit certainement exister!


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

Le 15/03/2011 à 14h39
Si tu copies tes tiles à partir de la RAM (ou de la ROM), il y a une solution.

Il suffit de traiter les données avant de les envoyer vers la VRAM.



En supposant que tout est initialisé correctement, lorsque tu envoies tes données sur le port d'écriture du VDP :



- OTIR va envoyer les données dans l'ordre

- OTDR va les envoyer en sens inverse, générant l'effet miroir que tu recherches



Cependant, il faut alors gérer la copie des tiles ligne à ligne, puisque chaque ligne nécessitera une réinitialisation de l'adresse de la source en mémoire, et de l'adresse de la destination en VRAM.



igal :
En regardant de près on voit pourtant de nombreux exemples de décors symétriques dans les jeux Konami :gne

Cela me laisse penser qu'une autre solution doit certainement exister!




Pas forcément ... Les éléments de décor symétriques sont une manière facile de gagner du temps dans le design graphique des jeux, mais cela ne veut pas dire pour autant qu'il y a une gestion hardware/software spécifique pour les gérer. Il peut simplement y avoir 2 tiles dans la bibliothèque graphique du jeu, une pour l'originale et une pour l'inverse.


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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2714

Le 15/03/2011 à 14h50
Rien n'empêche de faire le miroir à la main (c'est ce que je fais). Par contre, point de vue performance, s'il y avait un moyen hardware, ça serait bien mieux !


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 15/03/2011 à 16h30
Il n'y a pas de solution hardware.
Il y a des solutions software (notamment celle que j'explique plus haut), mais c'est alors un compromis entre gain de place et gain de temps.


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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2714

Le 15/03/2011 à 16h58
Ok, merci. Je vais laisser comme ça, tant pis pour la vitesse d'affichage des circuits. ^^

(Je vais p'être quand même essayer de faire un cache avec les tiles les plus utilisés)


On est toujours ignorant avant de savoir.
Github    
aoineko Membre non connecté

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2714

Le 28/03/2011 à 21h15
Avec les événements au Japon, ou j'ai ma belle famille et beaucoup d'amis, j'avais plus trop le cœur à programmer, mais la, ça commence à revenir.

Une question pour les pros du hardware MSX : comment fait t'on pour exécuter du code à intervalle régulier ? Pour faire un chronomètre et pour la musique. :hum


On est toujours ignorant avant de savoir.
Github    
Franck Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 22h54

Messages: 3295

Le 28/03/2011 à 23h04
Tous mes encouragements à ta belle famille Aoineko.
J'espère que ce peuple admirable saura rapidement surmonter ces évènements qui auraient déclenché une panique monstre en France.

On attend tes futurs codages avec impatience :)
   
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 29/03/2011 à 12h13
aoineko :
Une question pour les pros du hardware MSX : comment fait t'on pour exécuter du code à intervalle régulier ? Pour faire un chronomètre et pour la musique. :hum




Ah ! ... Sujet très intéressant.



L'éxécution d'un code à intervalle régulier est possible à travers la gestion des interruptions. Le Z80 a la faculté, comme beaucoup d'autres microprocesseurs 8 bits de son époque, d'interrompre l'éxécution de son code lorsqu'il reçoit un signal extérieur en provenance d'un périphérique. Il y a plusieurs cas de figure, mais ce qui nous intéresse, c'est que le VDP envoie une requête d'interruption à chaque VBLANK (fin d'affichage de l'écran, juste après le dernier pixel). En pratique, cette interruption est donc générée 50 fois par seconde (dans le cas des MSX en PAL) ou 60 fois par seconde (dans le cas des MSX en NTSC).



Lorsque la requête d'interruption arrive sur le bus du Z80, le Z80 suspend l'éxécution du code en cours et effectue un saut à l'adresse $0038. Lorsque la ROM est présente, cette adresse pointe vers une routine qui gère toute une série de tâches nécessaires au BASIC. Mais avant de faire toute ces tâches, la toute première chose que cette routine fait, après avoir empilé tous les registres, c'est d'appeler par un CALL le hook en $FD9F.



Ce hook, en temps normal, ne contient qu'un 'RET', ce qui renvoie la routine à son point de départ.



Pour profiter de cet appel à intervalle fixe, il suffit donc de positionner en $FD9F une instruction JP $xxxx pour que la routine (terminée par un 'RET') en $xxxx soit exécutée tous les 50e de seconde (ou tous les 60e de seconde). Ou, si la ROM n'est pas présente, d'écrire la routine nécessaire en $0038, sans oublier d'empiler et de dépiler tous les registres.


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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2714

Le 29/03/2011 à 13h30
Y aussi des interruptions liés à l'horloge, non ?
J'ai cru comprendre qu'on pouvait définir plusieurs timers engendrant des interruptions à intervalle paramétrable.


On est toujours ignorant avant de savoir.
Github    
Metalion Membre non connecté

Conseiller Municipal

Rang

Avatar

Inscrit le : 23/12/2009 à 15h32

Messages: 1488

Le 29/03/2011 à 13h48
aoineko :
Y aussi des interruptions liés à l'horloge, non ?

J'ai cru comprendre qu'on pouvait définir plusieurs timers engendrant des interruptions à intervalle paramétrable.


Non, pas en assembleur.

Du moins, pas directement.



Parce que, ceci dit, il est possible de faire ce que tu décris en assembleur, mais indirectement. Il suffit d'initialiser autant de compteurs que de timers que l'on veut suivre, puis de les incrémenter à chaque interruption (donc tous les 50e ou 60e de seconde), et de tester leurs valeurs pour déclencher les actions prévues.



Code :
timer1    ds    1    
timer2    ds    1
timer3    ds    1

...

; Gestion de l'interruption VBLANK
        ld    hl,timer1
        inc   (hl)
        ld    a,valeur1
        cp    (hl)
        call  z,action1
        inc   hl
        inc   (hl)
        ld    a,valeur2
        cp    (hl)
        call  z,action2
        ...     


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

Conseiller Municipal

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 02/01/2011 à 21h17

Messages: 2714

Le 29/03/2011 à 13h57
Y a donc aucune interruption lié au temps autre que le VBLANK ? Je dois confondre avec les premiers PC alors. ^^


On est toujours ignorant avant de savoir.
Github    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie