Question

Ok. J'espère que cela ne soit pas fermé parce que j'ai cette curiosité depuis 25 ans et j'aimerais comprendre l'affaire.

Dans le commodore 64 la frontière n'a pas été adressable par le 6569 VIC. Tout ce que vous pouvez faire était de dessiner des pixels dans la zone centrale, celle où le curseur déplacé. La frontière était toujours uniforme, bien que vous pouvez changer sa couleur avec Poke 53280, la couleur si je me souviens bien.

Mais je me souviens clairement des jeux intros où la frontière a été présenté avec des graphiques, comme il a été entièrement adressable. J'ai essayé de comprendre comment cela a fonctionné, mais jamais arrivé au point. les légendes disent qu'il était une utilisation intelligente de sprites, ce qui pourrait, dans certaines circonstances, tirer à la frontière, mais je ne sais pas si c'est une légende urbaine.

modifier : il suffit de lire ce de l'un des liens fournis

  

sprites ont été multiplexées dans   des lignes de trame verticales (plus de 8 sprites,   parfois jusqu'à 120 sprites). Jusqu'à ce que   le Crest Group a publié Krestage 3   Mai 2007, était la commune   perception que plus de 8 sprites   pourrait apparaître à une ligne de trame, mais   l'affectation de nouvelles coordonnées Y ont fait   réapparaître plus bas sur l'écran.

Ce qui est mal .... vous battre la trame et repositionner l'image-objet avant qu'il ne soit là ...

Était-ce utile?

La solution

Tout d'abord que les sprites peuvent être affichés dans la zone frontalière ou un motif de 8 bits répétition (8 pixels de large) qui est lu à partir du dernier octet de la banque vidéo, habituellement 3FFF $. Notez que vous ne pouvez voir ces sprites ou 8 configuration binaire lorsque vous duper la puce VIC en « non » affichant les frontières. Voir ci-dessous.

Les frontières ont une priorité plus élevée que sprites, donc normalement lorsqu'un sprite est dessiné dans une zone frontalière de la frontière couvre l'image-objet. Avec un peu de supercherie à puce VIC vous pouvez tourner les frontières au large.

Vous pouvez tourner les bordures haut et le bas assez facilement (je vais vous expliquer ci-dessous), et le côté frontières avec un timing de très critique.

Tout d'abord un peu d'informations sur la façon dont fonctionne la puce VIC sur un C64.

La puce VIC tire l'écran du haut à gauche vers en haut à droite, puis vers le bas une ligne, et de gauche à droite jusqu'à ce que le écran entier est tiré. Il effectue cette redessiner 50 fois par seconde (pour les unités PAL) ou 60 fois par seconde pour les unités (NTSC).

Il y a un VIC 8 bits registre qui contient la position verticale de la trame à un moment donné. D012 de $. En fait, il y a plus de 255 positions possibles, de sorte que le 9 bit est stocké dans le bit 7 (bit le plus élevé) ou inscrivez-D011 de $. Ainsi, à tout moment, vous pouvez lire ces registres et trouver la position verticale de la trame. Il n'y a pas de registre disponible pour lire la position x de la trame.

Une autre fonctionnalité intéressante de la puce VIC a été utilisé pour résoudre un problème lors de l'utilisation du matériel de défilement. le défilement vertical de base a été obtenue en utilisant un registre matériel pour déplacer l'écran 0-7 pixels verticalement. Une fois que vous avez atteint la limite (0 ou 7 selon la direction du défilement) vous déplacer chaque bloc de caractères (8x8 pixels) d'un bloc verticalement et tracer les nouvelles données à afficher en haut (ou la direction en fonction du fond). Cela fonctionne très bien, sauf que tous les 8 pixels de défilement vous verriez des données « pop » sur l'écran. Pour y remédier, vous pourriez faire la zone frontalière croître de 8 pixels verticalement en effaçant le bit 3 dans le registre D011 de $. Ceci est appelé 24 mode ligne. Par défaut, l'écran a été réglé sur 25 lignes de caractères de 8x8 pixels. En 24 mode ligne, vous pouvez toujours dessiner des personnages à la rangée du bas, ils seraient simplement cachés par la frontière.

L'astuce pour éteindre les frontières supérieure et inférieure est à:

1) Mettre l'écran de mode 25 rangée

2) attendre la trame pour atteindre une position verticale entre $ f2 et fa $ (les 8 pixels de la frontière entre l'endroit où commence dans les deux 24 mode de rangée et de 25 mode de ligne).

3) Régler l'écran pour 24 le mode de ligne ... déplacer le début de la frontière verticale au-dessus de la position de la trame courante

4) attendre la fin de position de trame verticale ($ fa)

5) Répéter chaque trame

Étape 3) tours la puce de VIC en pensant qu'il a déjà commencé à dessiner la frontière, de sorte qu'il ne commence jamais dessiner. Voilà, les bordures supérieure et inférieure sont ouvertes.

En ce qui concerne les frontières secondaires que vous pouvez faire la même chose avec des registres différents, mais comme le mouvement horizontal de la trame est beaucoup plus rapide, le mouvement vertical le calendrier doit être beaucoup plus serré. Et il y a une autre question à prendre en compte appelé gigue. <-Qui je ne vais pas expliquer ici. Rechercher sur le Web pour « Stable Raster C64 » Pour une explication approfondie de cette question.

Autres conseils

Notez que ce Krestage 3 a fait (comme mentionné dans la question) est différente.

Un niveau de l'astuce consiste à jouer avec la frontière lorsque le fond du « papier » (rectangle travail zone, la chose à l'intérieur de la frontière) vient d'être tirée. Cela vous permet d'avoir sprites dans la bordure supérieure et inférieure.

Un niveau supérieur est de jouer avec elle au bord droit du papier, dans chaque ligne de trame, tout comme expliqué dans la réponse de JohnD ci-dessus. Cela vous permet d'avoir sprites à la frontière gauche et à droite.

Rien de tout cela vous permet d'avoir plus de 8 sprites dans une ligne. C'est tout simplement magique Krest.

De loin la meilleure (je connais) pour la puce VIC est " le contrôleur vidéo MOS 6567/6569 (VIC-II) et son application dans le Commodore 64 " par Christian Bauer et un additif utile est "l'accès mémoire de la MOS 6569 VIC-II et MOS 8566 Controller Interface vidéo VIC-IIe" par Marko Mäkelä.
Caveat lector: ceux-ci sont un peu techniques, et vous pouvez les trouver plus facile à comprendre une fois que vous avez programmé un certain VIC vous effets.

Si les liens meurent jamais, juste google les articles par titre, ils sont sans cesse reproduits.

Vous pouvez ouvrir les frontières supérieure et inférieure avec un simple programme BASIC:

    1 poke56334,0:poke53266,212:poke53265,27:poke16383,0
    2 h=53265:i=53273:h1=19:h2=27:i1=1
    3 pokei,i1:waiti,i1:pokeh,h1:pokeh,h2:goto3

Im va prendre un coup de poignard dans le noir ici (moi-même fait havent). J'ai trouvé sur wikipedia.

Le c64demo section explique que:

  

Les effets croyaient impossibles   réalisé dans les démos, principalement en raison de   papiers effets secondaires se rapportant   à la MOS Technology puce VIC-II .   Quelques exemples pour VIC-supercherie:

L'un des hacks mentionnés était:

  

changeurs de Sprite ont été placés dans la   frontière. En trompant le matériel non   pour dessiner la bordure autour de l'écran,   sprites peuvent être déplacés dans cette zone   et affiché.

Bien sûr, la partie intéressante de la question est de savoir comment son fait. Je suggère à la recherche dans certains base de données démo qui inclut le code source à la recherche d'une démo qui utilise la pirater.

IMPRIMER "IL ETAIT 53280, DUDE."

D'après ce que je comprends, cela n'est possible pour les sprites.

Sprites sont autorisés à être dans la zone frontalière, et la frontière est dessiné overtop. Grâce à une ruse, peut être retiré de la frontière.

Graphics en bordure: Soit sprites OU en utilisant l'effet 3FFF $ (qui est en fait pas du tout sprites). Pour entrer dans le détail en a besoin de beaucoup plus d'espace et de temps que je ici.

Vous pouvez également obtenir sprites à la frontière en base: BASIC Sprites en bordure

IIRC, il y avait aussi une certaine façon de confondre la puce vidéo donc, qu'il dessine la ligne 26 du texte.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top