Programmierung unter BC 0010 im Jahr 2019

Warum?


Wenn Sie ein Liebhaber von Retro-Computern sind, können Sie die Motivationsrede sicher überspringen und mit dem nächsten Abschnitt fortfahren.

Den ganzen August 2018 haben ich und mein 13-jähriger Sohn Ivanq eine Demo von Good Apple geschrieben . Beim Chaos Constructions Festival belegte unsere Arbeit den zweiten Platz, für den wir einen Geldpreis von 35.000 Rubel erhielten, den wir ehrlich zu gleichen Teilen teilten. Für ein Kind ist dies ein gutes Einkommen, obwohl es durch die Erstellung von Websites den gleichen Betrag in kürzerer Zeit verdient hat. Natürlich könnte ich meine Zeit mit größerem wirtschaftlichen Nutzen verbringen ... Aber nicht August! Wir müssen uns einmal von der Arbeit ausruhen. Das Programmieren zu Ihrem eigenen Vergnügen ist ein Luxus, den Sie sich nur im Urlaub leisten können.

Gute Apple-Demo von SandS

Materielle Belohnung dient natürlich nicht als Motivation, sondern verstärkt positive Emotionen. Überraschenderweise sammelte die Demo für einen vergessenen sowjetischen Computer Tausende von Ansichten auf Youtube und landete in einer Wiedergabeliste mit fast hunderttausend Ansichten. Noch überraschender ist jedoch, dass 2018 ein Geldpreis für sie vergeben wird! Vielleicht führt die Unwahrscheinlichkeit des Geschehens zu einem solchen emotionalen Aufschwung.

Es gibt jedoch etwas Wichtigeres.

Bei der Erstellung von „Good Apple“ mussten wir mit echter Hardware arbeiten, da wir die Funktionen des Computers nutzten, die Emulatoren nicht korrekt reproduzieren. Zunächst wollte ich mit IDE-Festplatten und ihren modernen Ersatzgeräten in Form von Compact Flash eine ebenso stabile Arbeit erzielen.

Bei diesem Projekt sammelte mein 13-jähriger Sohn unschätzbare Erfahrungen in der industriellen Entwicklung. Eisen defekt. Gute Hardware, die sich nicht wie in der Dokumentation beschrieben verhält. Dokumentation, die mit Fehlern erstellt wurde. Fehlende Dokumentation zu einer Reihe von Themen. Schreiben Sie Ihre eigenen Tests, um Probleme mit Eisen zu identifizieren. Ausgehende Fristen. Testen auf verschiedenen Maschinen und Konfigurationen. Schreiben Sie Ihren eigenen Cross-Assembler (als klar wurde, dass vorhandene Lösungen den Entwicklungsprozess behindern). Und schließlich nach einer kurzen Feier des Erfolgs - der obligatorischen Veröffentlichung der endgültigen Version, die eine Reihe von Fehlern korrigiert.

Auf den ersten Blick scheint es, dass eine ähnliche Erfahrung mit einem modernen Arduino gemacht werden könnte. Tatsächlich mussten wir uns in den Dschungel der Schaltkreise stürzen. Wir haben die Anzahl der Maßnahmen berechnet, für die die Anweisungen ausgeführt werden. In verschiedenen Speichertypen ist diese Zeit unterschiedlich. Der Speichercontroller und der Prozessor arbeiten mit unterschiedlichen Frequenzen, sodass dieselben Befehle zu unterschiedlichen Zeiten ausgeführt werden können, selbst in demselben Speichertyp. Die Dauer der Ausführung des Unterprogramms ist nicht gleich der Summe der Dauer der Anweisungen dieses Unterprogramms. Wir mussten unsere eigenen Tools zum Testen und Optimieren von Code auf realer Hardware schreiben.

Dienstprogramm zum Messen der Ausführungsgeschwindigkeit eines Codefragments

Es endete damit, dass mein Sohn die BK 0011-Schaltung studierte (zu welchen Signalflanken kommen, wenn RPLY ausgelöst wird usw. - ich verstehe nichts mehr darüber). Also kam er auf die Idee, seinen eigenen Emulator BK zu erstellen, der mit der richtigen Hardware kompatibel ist, und schrieb sogar den Kernel ... Dies ist jedoch eine andere Geschichte.

Insgesamt in einem Monat - vom Assembler-Studium bis zur Erstellung eigener Entwicklungstools, von harten Tests bis zur fertigen Multimedia-Arbeit. All dies wäre ohne die Hauptsache unmöglich: Planung. Vielleicht die wertvollste Lektion gelernt. Sie übernehmen eine unmögliche Aufgabe. Sie verstehen, dass Sie auf unüberwindliche Schwierigkeiten stoßen werden. Planen Das tust du. Das Ergebnis überrascht alle so sehr, dass selbst Kenner Betrug beschuldigen („Sie haben den Prozessor übertaktet!“).

Warum nicht das ZX Spectrum?


Odnazhdy Demo von Teamsigem Team

Ich fange wieder mit einem seltsamen an: Finanzen. Gemessen an den Ankündigungen auf Avito kostet der BC 0010 im Durchschnitt ein Vielfaches mehr als der ZX Spectrum. Es ist klar, dass für eine seltene Instanz des nativen Spektrums in einwandfreiem Zustand eine runde Summe verlangt wird. Der voll beladene BC 0011m wird jedoch immer noch teurer. Wenn überhaupt in der Lage zu finden. Die Preise sprechen für sich: Der Sammelwert von BC 0010 ist höher. Und BK 0011m - und noch mehr. Einen solchen Computer zu Hause zu haben, ist sehr schön.

Das zweite Argument ist 16-Bit. In BC 0010 gibt es nichts 8-Bit. Der Prozessor weiß nicht einmal, wie man 8-Bit-Zahlen hinzufügt, er hat keinen ADDB-Befehl. 16-Bit in allem. Der Grund dafür ist die DEC PDP-11-Architektur. Viele nennen das PDP-11-Prozessorbefehlssystem das erfolgreichste und bequemste, das jemals erstellt wurde. Natürlich gibt es diejenigen, die mit dieser Aussage streiten wollen. Aber hier ist eine Tatsache: Beim Yandex Demodulation Festival waren drei Seminare Prozessorarchitekturen gewidmet, und zwei davon befassten sich mit PDP-11. Dies ist in der Tat eine Legende, ein Meilenstein in der Geschichte der Computertechnologie, der die Köpfe der Enthusiasten immer noch begeistert. BK 0010 ermöglicht es, diese Legende zu berühren. Und nicht nur zu berühren, sondern bis ins kleinste Detail zu verstehen, die Schönheit und Anmut des DEC-Assemblers zu spüren: absolut gleiche Register, acht Adressierungsmethoden, lineares Gedächtnis - Schönheit!

Das dritte Argument: Viele Demos wurden für das ZX Spectrum geschrieben. Für BC 0010 - weniger als fünfzig , kleine 256-Byte- und 4-Kilobyte-Zählungen. Der Platz in der Demoszene ist fast frei, dort kann sich auch ein Anfänger zeigen!

Und die letzte Überlegung, rein subjektiv. Ich beobachte seit 1994 die russische Demoszene. Party spektrumistov scheint mir leider giftiger und feindlicher. Natürlich gibt es wundervolle freundliche Leute! Ich habe großen Respekt vor ihnen und ihrer Arbeit. Aber im Allgemeinen - wahrscheinlich aufgrund ihres Massencharakters - war die Spectrum-Szene voller Konflikte, Klärung von Beziehungen und sogar Intrigen wie Namenswahl (wenn sie bei Wettbewerben nur für „ihre eigenen“ stimmen). Auf der kleinen BC-Shnoy-Bühne stellen sie keine Fragen wie „Wer ist cooler?“ Und freuen sich über jeden neuen Teilnehmer. Ich wiederhole: Dies ist mein rein persönlicher Eindruck, den Sie ignorieren können.

Echtes Eisen


20 Jahre vergingen, bis ich wieder Programme für BC schrieb. In den 20 Jahren hat sich viel verändert. Für mich persönlich kam es zu einer großen Veränderung im Kopf: „Think Different“. Dieser Slogan steht im Abspann unserer Demo „Good Apple“.

Früher haben wir 5 Minuten lang Spiele von einem Kassettenrekorder geladen. Dann kamen die Antriebsregler. Dahinter befinden sich die Festplatten. Dann neu gefundene Repliken von Controllern mit Compact Flash an Bord. Jetzt ist es üblich, Flash-Laufwerke in der Retro-Szene zu emulieren ... Aber warten Sie, 2019 haben wir eine hochwertige tragbare Soundquelle - das iPhone. Nehmen wir also das Standard-DIN-5-Audiokabel - Mini-Buchse (Sie müssen nicht einmal neu löten) und laden Sie den BK mit hoher Geschwindigkeit vom iPhone.

Ich ging die ROM-Ablaufverfolgung durch und zeigte, wie ich den Startalgorithmus vom Kassettenrekorder leicht überlisten und den BC-Lesevorgang viermal schneller machen konnte.

Der nächste Schritt bestand darin, einen Micro-Bootloader zu schreiben, der Daten in einem speziell entwickelten Turbo-Format liest. Sowohl der Loader als auch die Daten wurden nacheinander in einer einzigen WAV-Datei abgelegt (der Konverter wurde von Lenar Zakirov geschrieben ). BK 0010 liest und startet automatisch den Mikroloader, der wiederum den Rest der Daten aus der Datei liest. Die Frequenzen im Turbo-Format erreichen 22 kHz, daher sind die Anforderungen an die Qualität der Schallquelle hoch. iPhone kommt zurecht. Ein guter Musikplayer umso mehr. Computer-Soundkarte auch.

Dann war der Cross Assembler an der Reihe. Es wurden Optionen zum Speichern des Programms in WAV hinzugefügt (sowohl im Standard- als auch im Turbo-Format). Darüber hinaus kann Cross-Assembler WAV sofort über eine Soundkarte abspielen. Stellen Sie sich vor, wie beschleunigt die Entwicklung ist! Sie müssen sich nach jeder Kompilierung nicht mehr darum kümmern, ein Disk-Image auf eine CF-Karte zu schreiben. Nehmen Sie einfach Änderungen am Code vor, klicken Sie auf "Erstellen", der Sound fließt auf der CD und nach einigen Sekunden läuft das Programm bereits auf echter Hardware. Um Ton in einem Standardformat zu empfangen, drücken Sie einfach die Tasten L (Laden) und Enter am BC 0011 (laden Sie das erste gefundene Programm). Um Ton im Turbo-Format zu übertragen, müssen Sie zuerst den Micro-Bootloader ausführen (für mich startet er automatisch von der Festplatte, wenn der BC eingeschaltet wird; Sie können sich jederzeit durch Drücken der STOP-Taste beim System anmelden).

Herunterladen von Lernen von einem Computer auf BC 0011m

Es ist am einfachsten, den BK im Monochrom-Modus über den üblichen Composite-AV-Eingang an das Fernsehgerät anzuschließen. Das Kabel muss an einem Ende mit einer „Tulpe“ und am anderen mit DIN-5 verlötet werden. Ein monochromes Signal kommt vom 4. Pin von DIN-5 des BK-Steckers mit der Bezeichnung „TV“. Der Boden ist traditionell mit dem 2. Stift von DIN-5 verbunden.

Persönlich bin ich ein Fan von monochromen CRT-Displays - sie bieten mit ihrem Blendengitter eine auf Farbmonitoren unerreichbare Bildschärfe. Aber die meisten Spiele und alle Demos sind vorzuziehen, in Farbe zu sehen. Verwenden Sie dazu den BK-Ausgang „TVC“ und stellen Sie über RGB SCART eine Verbindung zum Fernsehgerät her. Kontakte 3, 4, 5 nach DIN-5 - jeweils rot, blau, grün. Pin 1 - Sync. Pin 2 ist geschliffen. Bei Anschluss an einen LCD-Fernseher ist es sinnvoll, +5 Volt an den 16. Pin des SCART anzulegen (über einen 200-Ohm-Widerstand oder so). Normalerweise werden 5 Volt vom benachbarten „TV“ -Anschluss (Pin 1) abgenommen.

Sie können einen SCART-HDMI-Konverter verwenden. Ich werde Sie sofort warnen, dass BC ein Bild mit einer Frequenz von nicht 48 Bildern pro Sekunde, sondern 48,83 anzeigt. Anstatt auf den LCD-Monitoren reibungslos zu scrollen, ist ein periodisches Zucken erkennbar. Ich habe dieses Problem gelöst, indem ich den 12-Megahertz-Quarzkristallresonator bei 12,288 MHz ausgetauscht habe. Zuckungen waren jedoch nur in einigen Demos zu bemerken. Die meisten BC-Programme verwenden keine Bildraten-Synchronisation.

Warum nicht mit dem Emulator zufrieden sein, für den möglicherweise überhaupt ein echter Computer benötigt wird? Ich habe vier Dinge gefunden, die schlecht emuliert sind:

  1. Verhalten des Lautsprechers bei hohen Frequenzen.
  2. Synchronisation von Bild und Paletten mit dem Strahl.
  3. Genaue Ausführungszeit von Befehlen (wichtig für Musik über Covox).
  4. Arbeiten Sie mit IDE-Festplatten mit hoher Geschwindigkeit.

Wenn Sie nichts davon vorhaben, reicht der Emulator für Sie aus.

Emulation


Unter MacOS verwende ich den BK2010- Emulator. Es ist nicht sehr genau, aber für die meisten Aufgaben geeignet.

Der fortschrittlichste GID- Emulator läuft derzeit unter Windows. Es läuft auch unter CrossOver für MacOS und Wine für Linux. Der Emulator hat einen guten Debugger, einen Speicherseiten-Viewer und dergleichen.

Um Disk-Images in Compact Flash zu schreiben, verwende ich das Multi-Plattform-Dienstprogramm Etcher . Aber öfter übertrage ich Daten über den Audiokanal.

Entwicklungswerkzeuge


Kompilieren aus erhabenem Text mit PDPy11 Cross Assembler

Die Jungs von der Excess Team- Demogruppe veranlassten den Cross-Assembler Alexei Morozov. Zuerst haben wir es benutzt, aber bald schrieb Ivanq seine eigene - Multi-Plattform - in Python. Es arbeitet langsamer, ist aber viel funktionsreicher. Dies umfasst die Unterstützung von Projekten mit mehreren Dateien und komplexen arithmetischen Ausdrücken, Doppelwortdatentypen, die Integration in Sublime Text und die erweiterte Unterstützung für Kompilierungsfehler, das Speichern des Ergebnisses in einem Sounddateiformat, die Kompilierung nicht nur für BC, sondern auch für UKSC und vieles mehr. Sie können dies alles in der offiziellen Dokumentation lesen.

Der Cross Assembler heißt PDPy11 .

Einige Veteranen beschweren sich, dass PDPy11 keine Makros des klassischen DEC-Makro-Assemblers (Macro-11) enthält. Macro Assembler ist in gewissem Sinne eine andere Sprache. Es ist wahrscheinlich gut zum Schreiben von Systemprogrammen, aber ernsthafte Spiele und Demos für BC wurden, soweit ich weiß, in gewöhnlichen klassischen Assemblern geschrieben. Ironischerweise: Für den Quellcode von BK-Programmen ist es üblich, die Dateierweiterung .mac (von „Makro“) auch in Assemblern zu verwenden, die keine Makros unterstützen. In jedem Fall reichen die Funktionen von PDPy11 aus, um Programme jeder Komplexität zu schreiben.

Der Debugger ist in den GID- Emulator integriert. Sie können jederzeit die Adressen von Haltepunkten festlegen, die Programmausführung unterbrechen oder fortsetzen, den Inhalt von Registern und Speicher anzeigen, das Programm Schritt für Schritt ausführen, den Inhalt des Speichers ändern usw.

Um Grafiken in das BC-Format zu konvertieren, haben wir einen Online-Konverter geschrieben . Auflösung BK - 256 x 256 Pixel im Farbmodus oder 512 x 256 Pixel in Schwarzweiß. Größere Bilder sollten am besten nicht in den Konverter eingegeben werden.

Die Dokumentation


Ein großartiges Tutorial zur Assembler-Programmierung wurde von Yuri Zaltsman geschrieben. Die Unterschiede zwischen BC 0011m und BC 0010 werden hier geschrieben. Es gab auch das Modell BK 0011 (ohne das „m“), das jedoch schnell aus der Produktion genommen wurde und als erfolglos erkannt wurde.

Trotz der Tatsache, dass der BC 0011m über große Funktionen verfügt (Farbpaletten, zusätzliche Speicherseiten), empfehle ich zunächst die Programmierung für den BC 0010 - dieses Modell ist einfacher und verständlicher. Jedes für BC 0010 korrekt geschriebene Programm läuft auch auf BC 0011m.

Das Prozessorgerät und der Befehlssatz sind auf Wikipedia gut beschrieben.

Für die Mutigsten - Programmierung in Codes .

Hallo Welt!


Der Bereich des Bildschirmspeichers in BC 0010 beginnt mit der Adresse 40000 (obere linke Ecke) und endet mit der Adresse 77777 (untere rechte Ecke des Bildschirms). Wie Sie sich vorstellen können, verwendet die PDP-11-Architektur ein 8-Dezimalzahlensystem. Mit dem Cross-Assembler PDPy11 können Sie natürlich auch Zahlen in binären, dezimalen und hexadezimalen Systemen schreiben - machen Sie, was Sie wollen.

Um einen Punkt auf dem Bildschirm zu platzieren , müssen Sie eine Zahl in den Bereich des Bildschirmspeichers schreiben. Argumente im DEC-Assembler werden von links nach rechts geschrieben: Quelle, dann Empfänger. Beispiel:

MOV #100000,@#60040 ;      

Das # -Zeichen bedeutet, dass das Argument nur eine Zahl (keine Adresse) ist. Das @ # -Zeichen bedeutet, dass das Argument eine absolute Adresse ist (dh es ändert sich nicht, wenn das Programm an einen anderen Speicherort verschoben wird).
Die Bildschirmreinigung sieht folgendermaßen aus:

    MOV #40000,R1 ;     MOV #20000,R0 ;   1: CLR (R1)+ ;    ,   R1   SOB R0,1 ;   

Die indirekte Adressierung (R1) verwendet das Register R1 als Adresszeiger. Der Speicher im BC wird byteweise adressiert, aber der CLR-Befehl löscht sofort zwei benachbarte Bytes: die ersten 40000 und 40001 im nächsten Schritt des Zyklus 40002 und 40003 und so weiter. Die Notation (R1) + bedeutet, dass Sie das Argument nach Verwendung des Arguments erhöhen müssen. In diesem Fall um 2, da der Befehl 2 Bytes verarbeitet. Der Schleifenzähler kann ein beliebiges Register sein. SOB subtrahiert eine Einheit vom Register und geht zu Label 1. Lokale Labels werden durch Zahlen und einen Doppelpunkt angezeigt, deren Gültigkeitsbereich zwischen zwei globalen Labels liegt. Globale Beschriftungen müssen mit einem Buchstaben beginnen und auch mit einem Doppelpunkt enden.

Die CLR-Anweisung kann durch Anhängen des Buchstabens "B" dazu gebracht werden, mit Bytes zu arbeiten. Dann erhöht CLRB (R1) + das Register R1 nicht um 2, sondern um 1.

    MOV #40000,R1   MOV R1,R0 ;        1: CLRB (R1)+   SOB R0,1 

Sie können das Gleiche kürzer machen. Wir löschen den Bildschirm von unten nach oben mit der Index-Adressierungsmethode:

    MOV #40000,R0 1: CLRB 37777(R0) ;    (37777+R0)   SOB R0,1 

Wenn eine hohe Geschwindigkeit benötigt wird, ist es besser, den Speicher nicht in Bytes, sondern sofort mit Worten zu löschen. Es wird doppelt so schnell sein. Sie können jedoch darüber hinaus beschleunigen: Aus irgendeinem Grund ist der CLR-Befehl langsamer als der MOV. Deshalb:

    CLR R2 ;     R2   MOV #40000,R1 ;     MOV #20000,R0 ;   1: MOV R2,(R1)+ ;    ,   R1   SOB R0,1 ;   

Wenn Sie nun eine der vier Möglichkeiten zum Löschen des Bildschirms auswählen, können Sie bereits Punkte festlegen. Im Farbmodus entspricht jeder Punkt zwei Bits. In Monochrom ein Bit. BC hat keinen Programmschalter für Bildschirmmodi. An welchen Ausgang ich den Monitor angeschlossen habe, habe ich ein solches Bild erhalten.
Zur Verdeutlichung schreiben wir die Farben der Punkte in das Binärzahlensystem:

    MOVB #0b00001100,@#50010   MOVB #0b00110000,@#50112   MOVB #0b11000000,@#50313 

Die Farben in jedem Bitpaar werden wie folgt codiert: Wenn nur ein gerades Bit gesetzt ist - ein grüner Punkt, nur ein ungerades Bit - blau, werden beide Bits gesetzt - rot, beide Bits werden zurückgesetzt - schwarz. Nun, ein monochromer Monitor zeigt jedes Bit als separaten Punkt an.
Der MOVB-Befehl schreibt 4 Punkte gleichzeitig in den Bildschirmspeicher, und der MOV-Befehl schreibt 8 Punkte. Wenn Sie benachbarte Punkte nicht beeinflussen möchten, verwenden Sie die Befehle BIC (Bit Clear) und BIS (Bit Set), zum Beispiel:

    BICB #0b00001100,@#50112 ;     BISB #0b00000100,@#50112 ;    

Ein interessanter Punkt: Im Text schreiben wir die niedrigstwertigen Bits rechts von den höchstwertigen. Und auf dem Bildschirm im Gegenteil: Die Punkte, die den niedrigstwertigen Bits entsprechen, erscheinen links.
Das ist in der Tat alles über das Bildschirmspeichergerät BK 0010.

Aber was ist mit der Textausgabe ?

       MOV #Text,R1 ;         EMT 20 ;             HALT ;   Text: .ASCII “Hello, World!”      .BYTE 0 ;      

Zeige die Quelle!


Road2CAFe 256 Bytes Intro vom Excess-Team

Am einfachsten beginnen Sie mit dem Quellcode der fertigen Demos:

In Your Space - Demo für Covox, Quellen im Archiv.
Guter Apple - Quellen auf GitLab (ein komplexes Multi-File-Projekt).
EIS ist ein Emulator erweiterter arithmetischer Anweisungen mit Quellcodes.
Quellen für drei 256-Byte-Demos.
In der 28. Ausgabe des Downgrade- Magazins ein großer Artikel über die Entwicklung von Tracker-Musikalgorithmen auf BC 0010 mit Programmfragmenten und detaillierten Erklärungen. Eine nostalgische Geschichte einer frühen Demoszene.

Wann soll ich anfangen?


Jetzt sofort. Nach 4 Wochen in Kasan findet die Demopati CAFe 2019 statt . Das Festivalprogramm hat einen Wettbewerb BK 0010 - 512 Bytes . Diese Größe passt 85 bis 256 Anweisungen - ideal für Anfänger. Zwei Wochen reichen aus, um sich mit den Tools zu befassen und die erste einfache Demo zu schreiben. Danach bleiben noch anderthalb Wochen, um eine zweite, ernstere Arbeit zu schreiben.

Mach weiter, du kannst! Telegramm-Chat , zx-pk- Forum - sie helfen Ihnen überall. Sende Arbeit zum Wettbewerb und komm noch besser selbst. Szene lebt !

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


All Articles