Azure DevOps pour Commodore 64?



Je suis un grand fan d'Azure DevOps depuis ses débuts, quand il s'appelait encore Visual Studio Online. Je l'utilise à des fins professionnelles et personnelles,
et le recommander à mes clients consultants.

Cependant, peu importe à quel point je loue cette plate-forme, il est souvent difficile de convaincre les développeurs Node ou Java que Azure DevOps ira très bien avec leurs projets, pas pire que pour .NET. Quel que soit le nombre de manifestations et de présentations qui réfutent les préjugés, dans tout groupe, il y a des gens qui croient fermement que ADO ne leur convient pas, car il s'agit d'un «outil de Microsoft».

Mis à part le débat philosophique, je peux expliquer la majeure partie de la résistance par le manque de compréhension de la façon dont Azure DevOps a évolué par rapport à son prédécesseur Team Foundation Services (TFS), et est devenu la meilleure boîte à outils capable de soutenir des projets de toute taille "dans n'importe quelle langue et n'importe quel plate-forme. " La question est, comment puis-je le prouver de manière concluante une fois pour toutes?

J'ai joué un peu avec cette idée, puis elle m'est venue à l'esprit. La preuve doit être faite sans créer une autre démo CI / CD pour les microservices SpringBoot déployés pour Kubernetes sur AWS - elle doit être effectuée avec une approche plus excentrique.

Et maintenant quelque chose de complètement différent


Et si nous arrêtions de nous concentrer sur les langages et plates-formes modernes et avançions il y a 30 ans pour voir si des outils modernes et ADO peuvent être utilisés pour développer, construire, décomposer en modules et mettre en œuvre un programme écrit pour une plate-forme informatique 8 bits?

Comme dans le cas d'autres démos pour ADO que j'ai créées dans le passé, je voulais montrer un produit complètement fini - de la modification du code, de sa vérification, etc., jusqu'à l'environnement en direct dans lequel vous pouvez regarder les modifications.

En théorie, tout cela sonnait bien, mais la vraie question était - par où commencer? Évidemment, ce n'était pas une telle situation dans laquelle vous pouvez exécuter StackOverflow à la recherche d'exemples précédents. Cependant, après avoir discuté de l'idée avec des amis et des collègues (ils ont tous décidé que j'avais déménagé), j'ai commencé à élaborer mon idée.

J'ai décidé que le programme de démonstration devrait être écrit en code machine 8 bits pour Commodore 64 à l'aide de l'éditeur VS Code. La source sera traitée par le référentiel Git sur ADO, et le pipeline CI / CD sera responsable des builds, des modules et de l'implémentation dans Azure. J'ai déjà commencé à soupçonner que mes amis avaient raison, et mon toit était déjà parti, mais cette idée semblait toujours un défi intéressant.

Choix de l'éditeur


Tout le monde connaît le dicton sur le choix du bon outil pour un travail particulier. Cela s'applique aux travaux ménagers, à la réparation automobile et à l'écriture de code.

En tant que développeur .NET, je passe la plupart de mon temps dans Visual Studio 2017. Si je dois basculer vers un projet Java ou écrire des programmes Android natifs, je lance respectivement IntelliJ ou Android Studio. Quel éditeur dois-je utiliser pour le code machine C64?

Voulez-vous - croyez-le ou non - mais aujourd'hui, il existe plusieurs bons éditeurs adaptés à l'écriture de CBM. J'ai joué avec certains d'entre eux, mais en fait, je voulais utiliser Visual Studio Code. J'ai utilisé VS Code pour mes autres projets, et il m'a semblé très flexible, confortable, et la présence d'une intégration intégrée avec git était un bel ajout.

L'inconvénient de cette solution était que je devrais sacrifier la coloration syntaxique dans l'assembleur 6510, et je regarderais simplement le texte noir sur fond blanc. Cette situation ne correspond pas à ma déclaration sur le «bon outil».

Tout à coup, j'ai décidé d'aller sur Visual Studio Marketplace et de voir s'il existe déjà une extension pour VS Code qui convient pour résoudre mon problème. J'ai été agréablement surpris d'y trouver plusieurs extensions conçues pour fonctionner en assembleur. Malheureusement, aucun d'entre eux n'a été emprisonné pour le Cross Assembler ACME que j'ai sélectionné pour le projet.

Cela ne m'a pas arrêté et, ne voulant pas revivre les aspects monochromes du développement des années 80, je me suis enfoui dans la documentation sur la création d'extensions pour VS Code. Quelques jours plus tard, j'ai publié avec plaisir la première version de l'extension pour Visual Studio Marketplace.

Et cet exercice s'est avéré plus utile qu'il n'y paraissait au départ.

À un moment donné, je ne me suis pas concentré sur l'écriture de programmes en assembleur. Plusieurs fois, j'ai essayé de l'étudier, mais je me sentais généralement ennuyé ou irrité et je suis passé à autre chose. Après avoir créé le plugin, j'ai non seulement appris les mécanismes de création d'extensions pour VS Code, mais j'ai également acquis une bonne compréhension de la syntaxe obscure et des codes de fonctionnement.

Armé d'un éditeur approprié et de vieux livres de programmation des années 80, j'ai commencé à écrire du code. Très rapidement, j'ai eu un programme de travail qui importe un fichier musical au format SID et joue une version 8 bits de la chanson Beatles When I'm 64 (c'est une vieille blague des utilisateurs de Commodore, mais elle semble convenir parfaitement à ce projet).



Jusqu'à présent, j'ai compilé et testé le programme sur un ordinateur portable. Le code source a été validé dans le référentiel git, la prochaine étape a donc été la nécessité de créer une build pour l'intégration continue.

L'une des capacités impressionnantes d'ADO est sa capacité à gérer presque toutes les situations CI / CD. Prêt à l'emploi, le service propose de nombreuses tâches prédéfinies, vous permettant de créer rapidement des chaînes CI / CD pour la plupart des projets modernes en quelques clics.

Si vos besoins ne font pas partie du service de base, la Marketplace vous fournira généralement de nombreux outils adaptés. Si cela ne fonctionne pas, vous pouvez esquisser un script PowerShell qui fait le travail dont vous avez besoin.

Le problème évident du projet était que malgré le large éventail de fonctionnalités de service, le cross-assembleur et l'imagerie de disque pour Commodore 64 n'existaient tout simplement pas. Bien sûr, je pourrais créer une machine virtuelle spéciale dans Azure avec les outils dont j'avais besoin, ou suivre le chemin PowerShell, mais cela serait-il intéressant?

Je n'aime pas non plus les machines virtuelles dans le cloud, et pour cet exercice, je voulais utiliser des agents hébergés, donc je n'avais qu'un seul choix. Pour prouver à quoi tout l'exercice était destiné, j'ai décidé qu'il serait préférable de créer ma propre extension pour gérer toutes ces tâches.

Extension ACME Cross-Assembler


La première extension nécessaire à ma chaîne CI était de compiler mon code assembleur en code machine C64. Pour ce faire, j'ai dû installer le cross-assembler sur l'un des agents de build hébergés.

Assembler est un programme qui convertit le langage assembleur lisible par l'homme en code machine réel conçu pour un gestionnaire binaire spécifique. En règle générale, le code machine est généré pour le processeur utilisé dans la machine sur laquelle il s'exécute. L'assembleur croisé franchit l'étape suivante dans la conversion de code, vous permettant de générer du code machine pour un autre processeur.

Comme je l'ai mentionné, pour mon projet, j'ai choisi ACME Cross-Assembler, car il est recommandé pour le développement de Commodore. Il prend également en charge un large éventail d'autres projets 8 bits, tels que le système de divertissement Nintendo ou la famille Atari utilisant des processeurs 65xx.

Sur la base de la documentation et des exemples fournis par Microsoft et d'autres sources, il m'a fallu presque toute la journée pour écrire, vérifier et publier sur la Marketplace une version de travail de l'extension.

Une fois lancée, la tâche télécharge automatiquement la dernière version d'ACME Cross-Assembler et la lance avec des options qui vous permettent de créer le fichier final pour la plate-forme cible. L'un des avantages associés au choix d'ACME est que la plupart des paramètres de construction du programme sont intégrés dans le code source, ce qui minimise la quantité d'entrée qui doit être définie dans l'extension.

Quelqu'un a-t-il une disquette en prêt?


L'étape suivante de la chaîne consiste à transférer le programme dans un format multimédia compatible avec Commodore 64, c'est-à-dire à le placer sur une disquette. Les développeurs ne sont pas non plus confrontés à un tel problème dans la vie quotidienne. Heureusement, des applications distinctes existent pour cette tâche.

VICE est l'émulateur le plus populaire pour Commodore. Il possède non seulement de nombreux émulateurs pour chacun des différents modèles Commodore, mais également plusieurs outils utiles, y compris le gestionnaire de disque virtuel c1541. Les images de disque créées avec lui peuvent être utilisées avec l'émulateur, copiées sur un support physique (disquette 5 ¼ "basse densité), ou téléchargées sur microSD et utilisées avec l'émulateur de lecteur SD2IEC.

Contrairement à la tâche ACME, qui prend tous les paramètres de l'en-tête du fichier source, l'utilitaire de disque c1541 s'appuie sur la CLI, et l'utilisateur dispose de nombreuses options pour gérer le disque. Pour mon extension, j'ai décidé de me concentrer uniquement sur les propriétés nécessaires à ma tâche, mais même alors, j'ai dû faire face à un choix lié à la profondeur de ma réalisation.

Commodore a publié trois modèles de lecteurs différents, différents dans la façon dont ils gèrent les volumes de disque en fonction du formatage et du type de support. Le modèle de base, familier à la plupart des utilisateurs, ne pouvait fonctionner qu'avec des disques simple face d'une capacité de 170 Ko (oui, kilo-octets. Demandez à vos parents). Le dernier modèle, 1571, utilisé sur le Commodore 128, pouvait fonctionner avec des disques à double face, dont le volume était passé à 340 Ko. J'ai décidé d'ajouter de la flexibilité à l'extension, j'ai donc ajouté la prise en charge de divers formats de disque en tant que paramètre, qui peut être sélectionné dans l'interface via le menu déroulant.

Comme j'avais déjà un exemple de travail, la création de cette extension est allée beaucoup plus vite. J'ai appris quelque chose de nouveau qui m'a également permis d'améliorer le code de l'extension ACME.

Comme dans le cas du cross-assembleur, le logiciel requis est téléchargé à partir du référentiel de projet open source et installé dans l'agent de génération. La tâche crée une image disque au format souhaité, puis le fichier de la tâche de génération y est copié. Le fichier résultant est déplacé vers le répertoire Build Artifacts, où vous pouvez le télécharger.



Qu'est-ce qui s'avère - tant de travail, et par conséquent, vous devez télécharger le fichier? Cela devrait être du matériel de formation CI / CD. Si nous devons prouver notre position, nous devons déployer le programme sur la machine afin qu'il puisse être utilisé comme démonstration.

Floppinet désactivé


L'exécution de versions d'un véritable ordinateur Commodore 64 et d'un lecteur 1541 est une chose rare, sans compter qu'elle est grande et lourde. De plus, ils sont incapables d'afficher des images sur des moniteurs modernes sans adaptateurs spéciaux, ce qui limite considérablement l'efficacité de la démonstration.



Le Commodore SX-64 (le premier ordinateur couleur "portable" à être fabriqué en gros lots) avait un moniteur intégré, mais il avait à peu près la taille de ma valise cabine et pèse environ 10 kg. Imaginez à quel point il serait difficile de passer par le service de sécurité de l'aéroport avec un tel monstre?

Le C64 Mini récemment sorti est assez petit pour voyager avec, la possibilité de télécharger des programmes depuis USB et une sortie HDMI. Dans certains cas, ce serait une option. Mais il n'atteint toujours pas l'objectif souhaité.

Le vrai problème n'est pas la portabilité du fer, mais le manque d'automatisation. La nécessité de transférer le programme d'un ordinateur portable vers une voiture à l'aide d'un lecteur flash ne révèle pas entièrement les capacités d'ADO dans la présentation.

Option sans serveur


Comme je l'ai mentionné, VICE est l'émulateur le plus populaire pour Commodore. Il a été porté sur Windows, Linux, Mac OS X, MS-DOS et de nombreux autres systèmes d'exploitation. Cependant, pour le développement cloud, cette option nécessiterait de configurer la machine virtuelle en tant qu'hôte, et je voulais m'en sortir avec une solution qui ne nécessite pas de serveur.

Outre les versions mentionnées, VICE a une option pour JavaScript qui fonctionne bien dans la plupart des navigateurs. Bien que le développement frontal ne soit pas mon élément, j'ai pu créer une page responsive décente.



Pour organiser la chaîne de publication, je télécharge un fichier avec une image disque dans un répertoire du même référentiel. J'ai associé cela à l'appel de l'application Azure Function, qui renvoie une liste des images de disque disponibles. La sélection de l'un d'eux dans le menu déroulant le charge et le lance automatiquement dans un émulateur JavaScript.

Le système fonctionne non seulement avec mon programme, j'ai réussi à créer une chaîne pour déployer et exécuter le programme sur Commodore 64 BASIC.

10 PRINT "HELLO WORLD"
20 GOTO 10


Nous finissons


DevOps pour Commodore 64? C'est impensable!



Le sens de cet exercice n'est pas seulement la preuve que lorsqu'ils disent à propos d'Azure DevOps qu'il prend en charge "n'importe quelle langue et n'importe quelle plate-forme", ils ne signifient pas seulement tout ce qui concerne Microsoft (bien que la version BASIC pour Commodore ait été achetée sous licence auprès de Microsoft). Cela nous distrait de la concentration sur les aspects technologiques et pousse les gens à dépasser le cadre artificiel qu'ils se sont fixé.

Quelles que soient les excuses, des déclarations comme «cela ne fonctionnera pas ici» équivalent souvent aux déclarations «nous l'avons toujours fait de cette façon, pourquoi changer quelque chose». Les deux expressions démontrent une réticence à croître et à se développer, à s'adapter à un paysage technologique en constante évolution et à surmonter les défis posés par ces changements rapides et agressifs.

Les DevOps ne sont pas des outils. Au final, les outils ne sont qu'un moyen de parvenir à une fin, peu importe qui les publie.

Pour que DevOps réussisse pour l'organisation, il est nécessaire de changer la façon de penser et de développer notre culture d'entreprise. Nous devons accepter beaucoup de nouvelles idées, repenser ce que nous pensons savoir et nous éloigner de pensées comme «cela ne fonctionnera pas ici», car nous ne l'avons pas essayé auparavant.

La création d'une chaîne CI / CD pour un ordinateur de 30 ans n'a aucune valeur pour l'entreprise, sauf pour illustrer clairement ce point de vue.

Source: https://habr.com/ru/post/fr430414/


All Articles