ZerosquareLe 08/07/2019 à 21:29
Compter les cycles n'est pas vraiment faisable sur PC, parce que le hardware n'est pas fixe. Certains très anciens jeux faisaient ça à l'époque du premier IBM PC, mais du coup ils ne tournaient plus correctement sur les modèles suivants, ou les clones un peu différents.
Il n'y a pas non plus d'interruption VBlank sur les cartes VGA de base. Ou plus exactement il y en a une sur le papier, mais beaucoup de cartes ne l'implémentent pas, ou seulement si on change un jumper dans une position qui n'est pas celle par défaut.
Et il n'y a pas de registre non plus pour lire la position courante du faisceau. Tout ce qui est dispo, c'est un port I/O avec deux bits, qui changent d'état pendant le HBlank et le VBlank.
Du coup, la seule façon de faire de la synchro, c'est avec du polling (et en comptant les scanlines manuellement, pour la synchro horizontale).
Certains étaient malins et synchronisaient le timer (ouais, y'en a qu'un seul de dispo sur PC) avec la fréquence horizontale ou vertical, parce que lui avait une IRQ. À noter qu'il faut le resynchroniser périodiquement, parce que sinon ça dérive, vu que sur PC le timer n'utilise pas la même source d'horloge que la vidéo.
Donc c'est déjà casse-pieds de base, mais arriver à faire tourner ça sur un 286 avec des scrolls et du son synthétisé en parallèle est un exploit. Le hardware du PC était vraiment pas pensé pour faire ce genre de choses à la base, c'était vraiment une machine de bureau, pas une machine qui était en partie ou en totalité pensée pour les jeux comme la plupart des autres ordinateurs personnels.