Mes oeuvres pour Outline 2020

Les 22 et 24 mai se déroule un vote en ligne de demopati 2020. L'événement était prévu pour mai de cette année, mais a été reporté à octobre pour toutes les raisons connues.
Je vais parler de mon travail


Je ne me souviens pas quand j'ai attiré l'attention sur le petit concours d'introduction de 128 octets, mais chaque année j'essaie de participer. La préparation du concours est effectuée à l'avance, pour l'année 2020, les plans étaient en cours pour le ZX Spectrum et Atari XE, mais plus tard, les plans ont changé. Je vais commencer avec Apple II:

Promenade HiRes




J'aime cet ordinateur, il est attrayant car il faudra beaucoup d'efforts pour résoudre des problèmes simples. Les tâches étaient les suivantes: reproduction sonore, opérations sur disque, graphiques, interprète SWEET-16.
Les graphiques pour Apple II sont deux modes - LoRes avec une résolution de 40x48, 16 couleurs et Hires avec une résolution de 280x192 6 couleurs.

L'étude de la structure de l'écran peut sembler étrange, ce format est probablement dû au fait que Wozniak, lors de la conception d'un ordinateur, a enregistré sur toutes les puces disponibles. Gérer le mode texte et LoRes était facile pour moi, mais le mode HiRes était une impasse. Toute opération avec l'écran nécessitera des sections de code qui ne permettront pas à l'intro de tenir dans la taille de 128 octets. J'ai donc décidé de tricher en utilisant les procédures disponibleset essayez-vous. L'idée était simple: tracer une ligne qui laissera une marque.

Quiconque a écrit quelque chose de similaire à un jeu de pong connaît l'algorithme. Pour l'intro, vous avez besoin des données X1, dx1, dxe / Y1, dy1, dye. X1, Y1 - les coordonnées actuelles, dx1, dy1 déterminent la direction du mouvement, dxe, colorant - définissent la limite des coordonnées. Avec cet ensemble de données, vous pouvez utiliser une procédure pour les coordonnées (X1, Y1), (X2, Y2) ou pour la première ligne blanche.

Reste à faire une trace. L'idée est venue d'elle-même: j'ai écrit un programme, je l'ai exécuté 16 fois avec le débogueur et j'ai pris les données prêtes - une paire (X3, Y3) et (X4, Y4) servira à tracer une ligne noire. Il s'avère que les points (X1, Y1), (X2, Y2) se déplacent le long d'une trajectoire donnée et que (X3, Y3), (X4, Y4) les suivent, mais avec un certain retard. Le travail final - a transféré les données nécessaires à l'adresse 0, de sorte que la taille du code est enregistrée en raison de l'adressage de la page zéro.

Les perfectionnistes se plaindront que la ligne ne touche pas le bon coin, mais j'obtiendrai l'excuse préparée. La résolution d'écran est de 280 points, donc le code a changé pour manipuler des données 16 bits et l'intro est passée de 128 octets à 256 octets.

Halfton




Ceci est un remake du travail précédent , j'ai décidé de changer l'entrée des attributs par texture. 47 octets sont passés à 128, le reste a été occupé par la génération et l'affichage de texture. Il y a un inconvénient - l'intro est lente, mais vous ne pouvez pas sauter au-delà de 128 octets.

Sparx




L'idée d'une intro est venue d'elle-même, j'ai décidé d'écrire du code et de voir ce qui se passe. L'introduction est simplifiée - un mode texte standard avec des paramètres supplémentaires est utilisé. Atari a un mode graphique GTIA, il s'appelle GRAPHICS 9. Soit dit en passant, en BASIC, vous pouvez utiliser le même mode. Il est activé en définissant le bit 6 dans l'emplacement de mémoire GRIOR (adresse 623). Dans ce mode, les octets de quartet haut et bas sont interprétés comme la valeur de la luminosité des couleurs (0-15).
Un exemple est le programme (Turbo BASIC).
image

Le résultat du travail
image

Et en mode texte, après avoir écrit POKE 623.64, l'écran ressemble à ceci
image

Pour le mode texte, les caractères qui ressemblent à rectangles de luminosité 0-15.

Pour Atari, il y a un codage de caractères ATASCII, l'ordre sur la table
image

Mais, en plus de l'encodage, il existe également un code de caractères internes:
image

tapez TurboBasic
POKE DPEEK(88),1
dans le coin supérieur gauche apparaît "!"

Cette numérotation est utilisée pour décrire la police - 8 octets pour l'espace, les 8 octets suivants pour "!". En BASIC, l'adresse de la police est stockée dans la cellule 756 (CHBAS), vous devez multiplier la valeur par 256. En outre, l'adresse 756 est la valeur fantôme de $ D409.

Des polices ont été formées pour le mode sélectionné: 8 valeurs $ 00, 7 valeurs $ 11..8 valeurs $ FF. Nous avons obtenu des caractères avec les codes 0-15 et avec une luminosité de 0-15.

L'algorithme d'action s'est avéré simple: copie ligne par ligne et diminution de la valeur de 1 en cas de rencontre d'un code différent de 0.

Smalevi4




Le travail est une blague. J'ai lu l'article Serepindipitous Circles dans BYTE Magazine, août 1977, vol.2 N8, et j'ai décidé d'essayer le code. Et encore une fois, une petite introduction de 48 octets s'est avérée. Je ne voulais pas montrer le travail terminé, j'ai donc changé le code et les options de dessin pour qu'une figure similaire soit dessinée avec un carré au centre. 128 octets au total.

Ufff. Si la présentation des principes de l'intro prenait autant de temps que le travail sur l'intro? Créer des effets est très amusant, et l'optimisation du code à la taille est également amusant. Essayez-vous, que se passe-t-il si cela fonctionne?

All Articles