60 votes

Dessiner sur la bordure de l'écran dans Commodore 64

Ok. J'espère qu'il n'a pas fermé parce que j'ai cette curiosité depuis 25 ans et j'aimerais comprendre le truc.

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

Néanmoins je me souviens clairement les intros de jeux où la frontière a été présenté avec des graphiques, comme il a été complètement accessible. J'ai essayé de comprendre comment il a travaillé mais n'a jamais pu le point. les légendes disent que c'est une utilisation intelligente des sprites, ce qui pourrait, dans certaines circonstances, être attirée sur la frontière, mais je ne sais pas si c'est une légende urbaine.

edit: viens de lire à partir d'un des liens proposés

Les Sprites ont été multiplexé à travers verticale lignes de raster (plus de 8 sprites, parfois jusqu'à 120 sprites). Jusqu'à ce que le Groupe de la Crête publié Krestage 3 dans Mai 2007, il y a la commune la perception que pas plus de 8 sprites pourrait sembler, à un raster en ligne, mais l'attribution de coordonnées Y fait réapparaître plus loin en bas de l'écran.

C'est le mal.... vous battre, la trame et la repositionner le sprite avant qu'il y arrive...

46voto

JohnD Points 648

Tout d'abord seulement les sprites peuvent être affichées dans la zone frontalière ou une répétition de 8 séquence de bits (8 pixels de large) qui est lu à partir du dernier octet de la banque d'images vidéo, généralement $3fff. Remarque vous ne pouvez voir ces sprites ou 8 bits de modèle lorsque vous tromper la VIC puce "ne pas afficher" les frontières. Voir ci-dessous.

Les frontières ont une priorité plus élevée que les sprites, donc, normalement, quand un sprite est établi dans une zone de frontière la frontière couvre le sprite. Avec un peu de VIC puce ruse vous pouvez tourner les frontières off.

Vous pouvez activer le haut et le bas des frontières hors assez facilement (je vais expliquer ci-dessous), et du côté des frontières avec très critique calendrier.

Tout d'abord un peu d'info sur la façon dont le VIC puce travaille sur un c64.

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

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

Une autre fonctionnalité intéressante de la VIC de la puce a été utilisée pour résoudre un problème lors de l'utilisation de matériel de défilement. De base le défilement vertical est obtenu par l'utilisation d'un matériel inscrire pour déplacer l'écran de 0-7 pixels à la verticale. Une fois que vous avez atteint la limite de (0 ou 7 selon le sens de défilement), vous déplacez chaque personnage (bloc de 8x8 pixels) à un bloc verticalement et dessiner les nouvelles données à afficher en haut (ou en bas, selon la direction). Cela fonctionne très bien, sauf que toutes les 8 pixels de défilement vous souhaitez voir les données "pop" sur l'écran. Pour remédier à cela, vous pouvez faire de la frontière de la zone de croissance de 8 pixels verticalement par compensation bit 3 dans le registre $d011. Ceci est appelé 24 ligne mode. Par défaut, l'écran a été fixé à 25 lignes de 8x8 pixels caractères. En 24 ligne mode, vous pouvez toujours dessiner les caractères de la ligne du bas, ils n'auraient qu'à être caché par la frontière.

Donc, l'astuce pour désactiver le haut et le bas frontières, c'est:

1) Définir un écran de 25 ligne mode

2) attendez que le raster pour atteindre une position verticale entre $f2 et $fa (le 8 pixels entre la bordure commence dans les deux 24 ligne mode et 25 ligne mode).

3) Régler l'écran à 24 ligne mode... en passant à la verticale de début de la frontière au-dessus de l'actuel raster position

4) Attendre jusqu'à après la verticale raster position ($fa)

5) Répéter chaque image

Étape 3) tours de la VIC de la puce dans la pensée qu'elle a déjà commencé à dessiner la frontière, de sorte qu'il ne démarre jamais de dessin. Voila, le haut et le bas les frontières sont ouvertes.

Concernant le côté des frontières, vous pouvez faire la même chose avec des registres différents, mais que le mouvement horizontal de la trame est beaucoup plus rapide, puis le mouvement vertical le timing doit être beaucoup plus serré. Et il y a un autre point à prendre en compte de la gigue. <-que je ne vais pas expliquer ici. Rechercher sur le web pour "Stable Raster C64" pour une profondeur explication de cette question.

9voto

hemflit Points 787

Notez que ce Krestage 3 n' (comme mentionné dans la question) est différent.

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

Un niveau plus élevé est de mess avec elle sur le bord droit de la feuille, dans chaque raster en ligne, tout comme il est expliqué dans JohnD la réponse ci-dessus. Cela vous permet d'avoir des sprites à gauche et à droite de la bordure.

Rien de tout cela vous permet d'avoir plus de 8 sprites dans une ligne. C'est juste Krest de la magie.

De loin la meilleure ressource que je sais de l') de la VIC puce est "MOS 6567/6569 contrôleur vidéo (VIC-II) et son application dans le Commodore 64"(1) par Christian Bauer et utile additif est "L'accès à la mémoire de la MOS 6569 VIC-II et MOS 8566 VIC-IIe Vidéo Contrôleur d'Interface"(2) par Marko Mäkelä. Caveat emptor: ce sont quelque peu technique, et vous trouverez peut-être les plus faciles à comprendre après que vous avez programmé quelques VIC effets soi-même.

Si les liens jamais mourir, google les articles par titre, ils sont sans cesse reproduit.

6voto

Senbei Points 51

Vous pouvez ouvrir les bordures supérieure et inférieure avec un programme BASIC simple:

    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

4voto

Mizipzor Points 10952

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

Le c64demo l'article explique que:

Les effets de la pensée impossible ont été réalisé dans les démos, principalement en raison de sans-papiers, effets secondaires relatives pour le MOS Technology VIC-II de la puce. Quelques exemples pour VIC-la ruse:

L'un de ces hacks était:

Sprite ascenseurs ont été placés dans le de la frontière. En incitant le matériel non pour dessiner la bordure autour de l'écran, les sprites pourrait être déplacé dans ce domaine et l'affiche.

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

2voto

Ken Points 331

IMPRIMER "C'ÉTAIT 53280, DUDE."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X