Bon, maintenant, un p'tit topo sur le
PGM , avec sa résolution particulière de 448x224 (mais toujours au format 4/3 !).
Que nous dit MAME ?
Code : Tout sélectionner
523 /* video hardware */
524 MCFG_SCREEN_ADD("screen", RASTER)
525 MCFG_SCREEN_REFRESH_RATE(60) // killing blade won't boot (just displays 'error') if this is lower than 59.9 or higher than 60.1 .. are actual PGM boards different to the Cave one?
526 MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
527 MCFG_SCREEN_SIZE(64*8, 64*8)
528 MCFG_SCREEN_VISIBLE_AREA(0*8, 56*8-1, 0*8, 28*8-1)
Alors voilà, y a UN jeu qui ne boot pas si on met autre chose que 60 Hz, et ça suffit pour ruiner les timings de
tous les autres, qui fonctionnent pourtant à une autre vitesse...
En effet, quand on reprend quelques builds antérieurs (
0.140, fin 2010) :
Code : Tout sélectionner
1540 /* video hardware */
1541 MCFG_SCREEN_ADD("screen", RASTER)
1542 MCFG_SCREEN_REFRESH_RATE(59.17) // verified on pcb
1543 MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
1544 MCFG_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
1545 MCFG_SCREEN_SIZE(64*8, 64*8)
59.17 Hz, mesuré et confirmé par d'autres possesseurs de ce système.
Mais bon, les deux fréquences sont bonnes, c'est juste que y a un seul jeu qui a besoin de 60 tout rond. Et dans tous les cas, aucune indication sur les paramètres vidéo, sur comment on atteint l'une ou l'autre fréquence... Sinon, une fenêtre standard
surdimensionnée pour les deux versions du code source :
MCFG_SCREEN_SIZE(64*8, 64*8) , soit 512 x 512
Je vous déconseille bien évidement de générer une modeline de 512x512...
Alors voilà, va falloir inspecter la PCB. Quels sont les oscillateurs qui pourraient fournir un bon pixel clock (après division) pour une telle résolution ?
Sachant qu'à l'horizontal, on a besoin de prévoir entre 20 et 30% d'info de synchro, soit une fenêtre de 537 à 582 pixels au total. Sachant qu'il faut qu'on soit entre 15 et 16 kHz, ça nous donne à la louche entre 8 et 9 MHz de pixel clock. Et faut trouver une combinaison qui permette de passer du taux standard (environ 59.17 Hz ) à exactement 60 Hz (
même si la PCB prévoit un peu de marge, qui correspond aux écarts de fréquence des oscillateurs). Ca peut se faire en modifiant le nombre de lignes totales ou le nombre de pixels à l'horizontal (nombre de cycles).
La carte propose deux oscillateurs :
- 33.8688 MHz
(valeur standard utilisée dans les lecteurs CD)
- 50 MHz
On pourrait opter pour celui à 50, bien rond et facile, mais ça nous donnerait 8.333333333
(etc.) MHz après division (par 6).
A côté, celui à 33.8688 donne exactement
8.4672 MHz après division par 4.
Le flair epsylonien est de rigueur ici (

), c'est cette valeur qui sera retenue.
Mais bon, avec ça, faut se démerder à tomber sur ~16.667 ms de durée de frame (1/60).
A la louche, on peut avoir un nombre total de pixels de : 8.4672 x 16666.6667 = 141120.00028224, soit 141120 pixels.
Maintenant, vous vous souvenez du CPS-III, de sa fenêtre taillée pour la zone de 5% d'overscan du NTSC ?
Et bien les systèmes étant de la même période, on peut supposer qu'il en va de même pour le PGM. Alors, je vous fais grâce des tâtonnements, pour vous livrer directos les chiffres :
pour un taux de 60 Hz exactement, la fenêtre totale du jeu est de
560 x 252 (ce qui nous donne bien 141120).
Chaque ligne se compose de
2240 cycles.
La fréquence horizontale est de : 8.4672 / 560 =
15120 Hz , un nombre fort commode qui va bien pour afficher 252 lignes à 60 Hz : car 15120 / 256 = 60 tout rond.
Les timings pour le jeu Killing blade :
Code : Tout sélectionner
Modeline "448x224" 8.4672 448 468 508 560 224 231 234 252 -hsync -vsync

(
note: le screenshot est pourri mais j'ai que ça sous la main 
)
On correspond bien à la zone de 5% d'overscan, même si une petite partie du haut de l'image (au dessus du timer) est un peu rognée (on retrouve le même principe pour l'affichage des jeux Neo Geo, et de pas mal de systèmes).
Ici, il y a 40 pixels pour la Hsync (4.72 µs), mais il est probable que le vrai hardware donne 40.25 pixels (161 cycles), pour atteindre les 4.75 µs des moniteurs arcade.
Maintenant, qu'en est-il des autres jeux mesurés à
59.17 Hz ?
Et bien la fenêtre totale change légèrement, tout en conservant le même pixel clock : on passe à 559x256, ce qui nous donne environ
59.168157 Hz (
~16900.98 µs).
On est proche du taux mesuré, et un peu en dessous, ce qui est bon signe (les oscillateurs ayant tendance à augmenter en fréquence avec la chaleur et l'usure du temps, donc les mesures sont toujours un peu plus élevées que ce qui est prévu niveau hardware).
Les timings :
Code : Tout sélectionner
Modeline "448x224" 8.4672 448 467 507 559 224 233 236 256 -hsync -vsync
Note : ce mode profite d'une période de Vblank un peu plus longue (256 lignes contre 252), ce qui est appréciable en terme de cycles CPU.
Bien sûr, je ne suis pas absolument sûr à 100% de ces chiffres, mais ça colle à la réalité du standard NTSC (qui affecte aussi la mise au point des écrans arcade), et ça s'appuie sur un pixel clock plausible.
Maintenant, faut que le driver pgm.c soit mis à jour, et ces infos sont quand même nettement plus précises que ce qui est donné pour l'instant (
c'est à dire pas grand chose).
Ceci dit, les cartes graphiques, dans le meilleur des cas, ne peuvent accepter une précision qui dépasse 0.001 MHz, donc il n'est pas possible de prendre le 8.4672 tel quel (
ça fait 4 chiffres après la virgule). Pour viser un 60 Hz avec un pixel clock gérable, il faut monter un peu en fréquence, à 15600 Hz. Ainsi, on obtient : 15600 x 560 = 8.736 MHz. Et on affiche 260 lignes pour obtenir 60 Hz tout rond.
Code : Tout sélectionner
Modeline "448x224" 8.736 448 468 508 560 224 235 238 260 -hsync -vsync
Pour obtenir du 59.17 Hz environ :
Code : Tout sélectionner
Modeline "448x224" 8.615 448 468 508 560 224 235 238 260 -hsync -vsync
On conserve la même fenêtre mais on fait varier le pixel clock, contrairement à ce qui se passe sur le vrai hardware, où un seul pixel clock est possible.
A venir : les jeux Cave de 1ère génération.