Azure DevOps für Commodore 64?



Ich bin seit den frühesten Tagen, als es noch Visual Studio Online hieß, ein großer Fan von Azure DevOps. Ich benutze es für berufliche und persönliche Zwecke,
und empfehle es meinen Beratungskunden.

Unabhängig davon, wie sehr ich diese Plattform lobe, ist es oft schwierig, Node- oder Java-Entwickler davon zu überzeugen, dass Azure DevOps mit ihren Projekten gut zurechtkommt, nicht schlechter als für .NET. Unabhängig von der Anzahl der Demonstrationen und Präsentationen, die Vorurteile widerlegen, gibt es in jeder Gruppe Menschen, die fest davon überzeugt sind, dass ADO nicht für sie geeignet ist, da es sich um ein "Tool von Microsoft" handelt.

Abgesehen von der philosophischen Debatte kann ich den größten Teil des Widerstands durch das mangelnde Verständnis der Entwicklung von Azure DevOps gegenüber dem Vorgänger Team Foundation Services (TFS) erklären und ist zur branchenführenden Toolbox geworden, die Projekte jeder Größe "in jeder Sprache und in jeder Sprache unterstützen kann Plattform. " Die Frage ist, wie kann ich dies ein für alle Mal endgültig beweisen?

Ich habe ein bisschen mit dieser Idee herumgespielt, und dann wurde mir klar. Der Proof muss durchgeführt werden, ohne eine weitere CI / CD-Demo für SpringBoot-Microservices zu erstellen, die für Kubernetes unter AWS bereitgestellt werden. Dies muss mit einem exzentrischeren Ansatz erfolgen.

Und jetzt etwas ganz anderes


Was ist, wenn wir uns nicht mehr auf moderne Sprachen und Plattformen konzentrieren und vor 30 Jahren vorankommen, um zu sehen, ob moderne Tools und ADO verwendet werden können, um ein für eine 8-Bit-Computerplattform geschriebenes Programm zu entwickeln, zu erstellen, in Module zu zerlegen und zu implementieren?

Wie bei anderen Demos für ADO, die ich in der Vergangenheit erstellt habe, wollte ich ein vollständig fertiges Produkt zeigen - von der Bearbeitung des Codes über die Überprüfung usw. bis hin zur Live-Umgebung, in der Sie die Änderungen beobachten können.

Theoretisch klang das alles gut, aber die eigentliche Frage war - wo soll ich anfangen? Dies war offensichtlich keine solche Situation, in der Sie StackOverflow auf der Suche nach vorherigen Beispielen ausführen können. Nachdem ich die Idee jedoch mit Freunden und Kollegen besprochen hatte (alle entschieden, dass ich umgezogen war), begann ich, meine Idee auszuarbeiten.

Ich entschied, dass das Demo-Programm mit dem VS-Code-Editor in 8-Bit-Maschinencode für Commodore 64 geschrieben werden sollte. Die Quelle wird vom Git-Repository auf ADO verarbeitet, und die CI / CD-Pipeline ist für die Builds, Module und die Implementierung in Azure verantwortlich. Ich begann bereits zu vermuten, dass meine Freunde Recht hatten und mein Dach bereits verschwunden war, aber dennoch schien diese Idee eine interessante Herausforderung zu sein.

Wahl des Herausgebers


Jeder kennt das Sprichwort über die Auswahl des richtigen Werkzeugs für einen bestimmten Job. Dies gilt für Hausarbeit, Autoreparatur und Code-Schreiben.

Als .NET-Entwickler verbringe ich die meiste Zeit in Visual Studio 2017. Wenn ich zu einem Java-Projekt wechseln oder native Android-Programme schreiben muss, starte ich IntelliJ bzw. Android Studio. Welchen Editor soll ich für C64-Maschinencode verwenden?

Wollen Sie - ob Sie es glauben oder nicht -, aber heute gibt es mehrere gute Editoren, die zum Schreiben von CBM geeignet sind. Ich habe mit einigen von ihnen herumgespielt, aber eigentlich wollte ich Visual Studio Code verwenden. Ich habe VS Code für meine anderen Projekte verwendet, und es schien mir sehr flexibel, komfortabel und das Vorhandensein einer integrierten Integration in git war eine schöne Ergänzung.

Der Nachteil dieser Lösung war, dass ich die Syntaxhervorhebung in Assembler 6510 opfern musste und nur auf den schwarzen Text auf weißem Hintergrund starrte. Diese Situation entspricht nicht meiner Aussage über das „richtige Werkzeug“.

Plötzlich entschied ich mich, zum Visual Studio Marketplace zu gehen und zu prüfen, ob es bereits eine Erweiterung für VS Code gibt, die zur Lösung meines Problems geeignet ist. Ich war angenehm überrascht, dass dort mehrere Erweiterungen für Assembler entwickelt wurden. Leider war keiner von ihnen für den ACME Cross Assembler inhaftiert, den ich für das Projekt ausgewählt habe.

Dies hat mich nicht aufgehalten, und da ich die monochromen Aspekte der Entwicklung der 80er Jahre nicht noch einmal erleben wollte, habe ich mich in der Dokumentation zum Erstellen von Erweiterungen für VS Code vergraben. Einige Tage später veröffentlichte ich gerne die erste Version der Erweiterung für den Visual Studio Marketplace.

Und diese Übung erwies sich als nützlicher, als es zunächst schien.

Zu einer Zeit habe ich mich nicht darauf konzentriert, Programme in Assembler zu schreiben. Mehrmals habe ich versucht, es zu studieren, aber ich fühlte mich normalerweise gelangweilt oder irritiert und ging zu etwas anderem über. Nachdem ich das Plugin erstellt hatte, lernte ich nicht nur die Mechanismen zum Erstellen von Erweiterungen für VS Code kennen, sondern erlangte auch ein gutes Verständnis der obskuren Syntax und der Operationscodes.

Mit einem geeigneten Editor und einigen alten Programmierbüchern aus den 80ern begann ich, Code zu schreiben. Sehr schnell bekam ich ein Arbeitsprogramm, das eine Musikdatei im SID-Format importierte und eine 8-Bit-Version des Beatles When I'm 64-Songs abspielte (dies ist ein alter Witz von Commodore-Benutzern, aber es scheint für dieses Projekt genau richtig zu sein).



Bis jetzt habe ich das Programm auf einem Laptop kompiliert und getestet. Der Quellcode wurde in das Git-Repository übernommen, sodass im nächsten Schritt ein Build für die kontinuierliche Integration erstellt werden musste.

Eine der beeindruckenden Fähigkeiten von ADO ist die Fähigkeit, mit nahezu jeder CI / CD-Situation umzugehen. Der Service bietet sofort viele vordefinierte Aufgaben, sodass Sie mit nur wenigen Klicks schnell CI / CD-Ketten für die meisten modernen Projekte erstellen können.

Wenn Ihre Anforderungen nicht Teil des Basisdienstes sind, bietet Ihnen der Marktplatz normalerweise viele verschiedene geeignete Tools. Wenn dies nicht funktioniert, können Sie ein PowerShell-Skript skizzieren, das die von Ihnen benötigte Arbeit erledigt.

Das offensichtliche Problem des Projekts war, dass es trotz der Vielzahl von Servicefunktionen kein Cross-Assembler- und Disk-Imaging für Commodore 64 gab. Natürlich könnte ich in Azure eine spezielle virtuelle Maschine mit den benötigten Tools erstellen oder dem PowerShell-Pfad folgen, aber wäre das interessant?

Ich mag auch keine virtuellen Maschinen in der Cloud, und für diese Übung wollte ich Hosted Agents verwenden, daher hatte ich nur eine Wahl. Um zu beweisen, wofür die gesamte Übung gedacht war, entschied ich, dass es am besten ist, eine eigene Erweiterung zu erstellen, um all diese Aufgaben zu erledigen.

ACME Cross-Assembler-Erweiterung


Die erste Erweiterung, die für meine CI-Kette benötigt wurde, bestand darin, meinen Assembler-Code in C64-Maschinencode zu kompilieren. Dazu musste ich Cross-Assembler auf einem der gehosteten Build-Agenten installieren.

Assembler ist ein Programm, das von Menschen lesbare Assembler-Sprache in echten Maschinencode konvertiert, der für einen bestimmten binären Handler entwickelt wurde. In der Regel wird Maschinencode für den Prozessor generiert, der auf der Maschine verwendet wird, auf der er ausgeführt wird. Cross Assembler führt den nächsten Schritt in der Codekonvertierung aus, sodass Sie Maschinencode für einen anderen Prozessor generieren können.

Wie bereits erwähnt, habe ich mich für mein Projekt für ACME Cross-Assembler entschieden, da es für die Entwicklung von Commodore empfohlen wird. Es unterstützt auch eine Vielzahl anderer 8-Bit-Projekte wie das Nintendo Entertainment System oder die Atari-Familie mit 65xx-Prozessoren.

Basierend auf der Dokumentation und den Beispielen von Microsoft und anderen Quellen habe ich den größten Teil des Tages gebraucht, um eine funktionierende Version der Erweiterung zu schreiben, zu überprüfen und auf dem Marktplatz zu veröffentlichen.

Beim Start lädt die Task automatisch die neueste Version von ACME Cross-Assembler herunter und startet sie mit Optionen, mit denen Sie die endgültige Datei für die Zielplattform erstellen können. Einer der Vorteile bei der Auswahl von ACME besteht darin, dass die meisten Parameter zum Erstellen des Programms in den Quellcode integriert sind, wodurch die Menge an Eingaben minimiert wurde, die in der Erweiterung definiert werden mussten.

Hat jemand eine ausgeliehene Diskette?


Der nächste Schritt in der Kette besteht darin, das Programm in ein mit Commodore 64 kompatibles Medienformat zu übertragen, dh es auf eine Diskette zu legen. Entwickler sind auch im Alltag nicht mit einem solchen Problem konfrontiert. Glücklicherweise gibt es für diese Aufgabe separate Anwendungen.

VICE ist der beliebteste Emulator für Commodore. Es verfügt nicht nur über viele Emulatoren für jedes der verschiedenen Commodore-Modelle, sondern auch über mehrere nützliche Tools, einschließlich des Managers für virtuelle Festplatten c1541. Mit ihm erstellte Disk-Images können mit dem Emulator verwendet, auf ein physisches Medium (5 "Diskette mit niedriger Dichte) kopiert oder auf microSD heruntergeladen und mit dem SD2IEC-Laufwerksemulator verwendet werden.

Im Gegensatz zur ACME-Task, bei der alle Einstellungen aus dem Header der Quelldatei übernommen werden, stützt sich das Festplatten-Dienstprogramm c1541 auf die CLI, und der Benutzer hat viele Optionen zum Verwalten der Festplatte. Für meine Erweiterung habe ich mich entschieden, mich nur auf die für meine Aufgabe erforderlichen Eigenschaften zu konzentrieren, aber selbst dann stand ich vor der Wahl, wie gründlich ich sie machen musste.

Commodore hat drei verschiedene Laufwerksmodelle veröffentlicht, die sich in der Art und Weise unterscheiden, wie sie mit Datenträgern je nach Formatierung und Medientyp umgehen. Das den meisten Benutzern vertraute Basismodell kann nur mit einseitigen Laufwerken mit einer Kapazität von 170 KB (ja, Kilobyte. Fragen Sie Ihre Eltern) verwendet werden. Das spätere Modell 1571, das beim Commodore 128 verwendet wird, kann mit doppelseitigen Laufwerken arbeiten, deren Volumen auf 340 KB erhöht wurde. Ich habe beschlossen, die Erweiterung flexibler zu gestalten, und habe daher die Unterstützung für verschiedene Festplattenformate als Einstellung hinzugefügt, die über das Dropdown-Menü in der Benutzeroberfläche ausgewählt werden kann.

Da ich bereits ein funktionierendes Beispiel hatte, ging das Erstellen dieser Erweiterung viel schneller. Ich habe etwas Neues gelernt, mit dem ich auch den Code für die ACME-Erweiterung verbessern konnte.

Wie beim Cross-Assembler wird die erforderliche Software aus dem Open Source-Projekt-Repository heruntergeladen und im Build Agent installiert. Die Aufgabe erstellt ein Disk-Image im gewünschten Format, und dann wird die Datei aus der Erstellungsaufgabe darauf kopiert. Die resultierende Datei wird in das Verzeichnis Build Artifacts verschoben, wo Sie sie herunterladen können.



Was stellt sich heraus - so viel Arbeit, und als Ergebnis müssen Sie die Datei herunterladen? Dies sollte CI / CD-Schulungsmaterial sein. Wenn wir unsere Position beweisen müssen, müssen wir das Programm auf dem Computer bereitstellen, damit es als Demonstration verwendet werden kann.

Floppinet deaktiviert


Das Ausführen von Versionen eines echten Commodore 64-Computers und eines 1541-Laufwerks ist eine seltene Sache, ganz zu schweigen davon, dass sie groß und schwer sind. Darüber hinaus können sie ohne spezielle Adapter keine Bilder auf modernen Monitoren anzeigen, was die Effektivität der Demonstration erheblich einschränkt.



Der Commodore SX-64 (der erste "tragbare" Farbcomputer, der in großen Mengen hergestellt wurde) hatte einen eingebauten Monitor, war aber ungefähr so ​​groß wie mein Handgepäckkoffer und wiegt ungefähr 10 kg. Stellen Sie sich vor, wie schwer es wäre, mit einem solchen Monster den Sicherheitsdienst des Flughafens zu durchlaufen?

Der kürzlich veröffentlichte C64 Mini ist klein genug für Reisen, bietet die Möglichkeit, Programme von USB und einem HDMI-Ausgang herunterzuladen. In einigen Fällen wäre dies eine Option. Trotzdem erreicht er das gewünschte Ziel nicht.

Das eigentliche Problem ist nicht die Tragbarkeit des Bügeleisens, sondern die mangelnde Automatisierung. Die Notwendigkeit, das Programm mithilfe eines Flash-Laufwerks von einem Laptop auf ein Auto zu übertragen, zeigt die Funktionen von ADO in der Präsentation nicht vollständig.

Option ohne Server


Wie bereits erwähnt, ist VICE der beliebteste Emulator für Commodore. Es wurde auf Windows, Linux, Mac OS X, MS-DOS und viele andere Betriebssysteme portiert. Für die Cloud-Entwicklung würde diese Option jedoch die Konfiguration der VM als Host erfordern, und ich wollte mit einer Lösung auskommen, für die kein Server erforderlich ist.

Neben den genannten Versionen bietet VICE eine Option für JavaScript, die in den meisten Browsern einwandfrei funktioniert. Obwohl die Front-End-Entwicklung nicht mein Element ist, konnte ich eine anständige reaktionsfähige Seite verpfuschen.



Um die Release-Kette zu organisieren, lade ich eine Datei mit einem Disk-Image in ein Verzeichnis im selben Repository hoch. Ich habe dies mit dem Aufruf der Azure Function App verknüpft, die eine Liste der verfügbaren Datenträgerabbilder zurückgibt. Wenn Sie eines davon aus dem Dropdown-Menü auswählen, wird es automatisch geladen und in einem JavaScript-Emulator gestartet.

Das System funktioniert nicht nur mit meinem Programm, es ist mir auch gelungen, eine Kette zum Bereitstellen und Ausführen des Programms auf Commodore 64 BASIC zu erstellen.

10 PRINT "HELLO WORLD"
20 GOTO 10


Wir beenden


DevOps für Commodore 64? Das ist undenkbar!



Die Bedeutung dieser Übung ist nicht nur der Beweis dafür, dass Azure DevOps, wenn sie sagen, dass es "jede Sprache und jede Plattform" unterstützt, nicht nur alles im Zusammenhang mit Microsoft bedeutet (obwohl die BASIC-Version für Commodore unter Lizenz von gekauft wurde Microsoft). Es lenkt uns davon ab, uns auf technologische Aspekte zu konzentrieren, und lässt die Menschen über den künstlichen Rahmen hinausgehen, den sie für sich selbst festgelegt haben.

Unabhängig von den Ausreden sind Aussagen wie „das wird hier nicht funktionieren“ oft gleichbedeutend mit den Aussagen „wir haben es immer so gemacht, warum etwas ändern“. Beide Sätze zeigen, dass sie nicht bereit sind, zu wachsen und sich zu entwickeln, sich an eine sich ständig ändernde technologische Landschaft anzupassen und die Herausforderungen zu bewältigen, die sich aus diesen schnellen und aggressiven Veränderungen ergeben.

DevOps sind keine Werkzeuge. Tools am Ende sind nur ein Mittel zum Zweck, unabhängig davon, wer sie veröffentlicht.

Damit DevOps für das Unternehmen erfolgreich ist, muss die Denkweise geändert und unsere Unternehmenskultur weiterentwickelt werden. Wir müssen viele neue Ideen akzeptieren, überdenken, was wir zu wissen glauben, und uns von Gedanken wie „das wird hier nicht funktionieren“ entfernen, weil wir es noch nie versucht haben.

Das Erstellen einer CI / CD-Kette für einen 30 Jahre alten Computer ist für das Unternehmen von keinem Wert, außer um diesen Standpunkt klar zu veranschaulichen.

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


All Articles