VM geschrieben von einer unsicheren Hand der Geisteswissenschaften in der Arduino-Programmierumgebung unter Verwendung von Quickcode und Fahrrädern. Außerdem gibt es dafür einen Compiler aus einer C-ähnlichen Sprache, der mit denselben Methoden in JavaScript geschrieben wurde. Ja Sie können bereits in Kommentare stürzen, Steine werfen. Nun, für diejenigen, die noch interessiert sind, lade ich Sie ein, weiterzulesen.

Im Allgemeinen wurde meine Arbeit hier bereits ein wenig von der angesehenen
Tormozedison abgedeckt. Zu dieser Zeit befand sich jedoch eher ein kugelförmiger Prototyp im luftleeren Raum. Und jetzt habe ich ein RomanS-Gerät, das er mir freundlicherweise für kostenlose Experimente zur Verfügung gestellt hat. Dieses Gerät heißt ESPboy. Es unterscheidet sich von anderen Handwerken durch seine Kompaktheit und den Erweiterungssteckplatz mit dem MCP23017-Chip.
Hier können Sie mehr über ihn erfahren.
Wenn jemand interessiert ist, wie kam mir eine so seltsame Idee als virtuelle Maschine auf einem Mikrocontroller in den Sinn, dann können Sie sie unter dem Spoiler lesen.
HintergrundEinmal in der Schule, wurde ich von einem Spielmacher aus Yoyogames mitgerissen, und wie viele, die darauf genietet waren, verstehe ich nicht, was. Diese schief geschriebenen und schlecht gezeichneten Demos konnten sich immer noch Freunden rühmen, aber im Internet ertranken sie unter ähnlichen. Mir wurde klar, wie schwer es war, selbst ein einfaches Spiel zu schreiben, ganz zu schweigen von einem ernsthaften, in dem man die Kühe ausrauben konnte. Aber der Wunsch, Spiele zu schreiben, ging nicht verloren. Als ich ein Handy bekam, entdeckte ich Midlet Pascal und hatte mehrere Jahre Spaß damit. Immerhin wurde mir klar, dass das Schreiben eines Spiels für ein schwaches Gerät einfacher ist als für seinen mächtigeren großen Bruder. Zumindest konnte man immer nicht von krummen Händen sprechen, sondern von den eingeschränkten Möglichkeiten der Plattform. Die Button-Spieler machten den Sensoren jedoch Platz. Eine weitere Chance, die Welt zu erobern, wurde verpasst. Trotzdem wurde mir irgendwann klar, dass ich meine Träume mit einem Mikrocontroller wiederbeleben konnte.
Ich begann damit, ein Spiel unter arduino uno zu schreiben, wohin würdest du ohne es gehen. Dann war sie meine einzige und ich war sehr besorgt über ihre Leistung. Ich habe versucht, so wenig wie möglich zu blinken. Aber der Weg des Rechens geht in kleinen Schritten. Bei jeder kleinen Änderung des Codes blinkte er immer wieder. Und ich habe beschlossen, eine gestapelte virtuelle Maschine zu schreiben. Immerhin sind zwei Kilobyte RAM für Code- und Datenbytes an Bord. Aber wie langsam es war, aber aus irgendeinem Grund fehlte ständig das Gedächtnis. Wahrscheinlich ist der springende Punkt, dass alle meine Motorräder mit Vierkanträdern waren und langsam fuhren. Dann habe ich beschlossen, einen Chip-8-Emulator auf Arduino Mega zu schreiben, der gerade aus China gekommen ist. Natürlich wollte ich dann einen Gameboy-Emulator für sie schreiben, die erste Playstation und einen Supercomputer einfacher. Infolgedessen verstand ich die Hauptsache. Die virtuelle Chip-8-Maschine war sehr einfach, zu einfach. So sehr, dass Sie beim Schreiben Ihrer Spiele zur Multiplikation oder Division eine separate langsame Unterroutine schreiben mussten. Sie müssen also Ihre VM schreiben, um einen schwerwiegenden Fehler zu beseitigen. Zu diesem Zeitpunkt kamen mehrere weitere esp8266 mit einem Speicherplatz von 160 MHz an.
Wenn es Ihnen so vorkommt, als wäre eine virtuelle Maschine eine Verschwendung von Ressourcen, habe ich auch meinen Chip-8-Emulator dafür umgeschrieben. Es stellte sich heraus, dass es sich um eine virtuelle Maschine in einer virtuellen Maschine auf einem Mikrocontroller handelte. Sie können wahrscheinlich noch weiter gehen und eine Turing-Maschine auf Chip-8 schreiben.
Technische Daten der ESP Little Game Engine
Eine virtuelle Maschine enthält 16 Register mit jeweils 16 Bit, ein Nullregister ist ein Stapelzeiger. Jeder Befehl ist Doppelbyte, einige Befehle enthalten zwei Datenbytes. Adressierbarer Speicher 64 KB. Beim ESP8266 stehen 20 KB zur Verfügung. Das Programm kann von SPIFFS und UART heruntergeladen werden. Falls gewünscht, können Sie einen Download von einer Speicherkarte oder über WLAN hinzufügen. Zusätzlich zu den üblichen arithmetischen Anweisungen und Anweisungen zum Verschieben von Daten gibt es separate Anweisungen zum Arbeiten mit Sprites, Bildschirm und Sound. Bildschirmgröße 128 x 128 Pixel. Bei 16 Farben pro Punkt belegt der Bildschirm 8 KB Speicher, die gleiche Puffermenge zum Zeichnen von Sprites und Partikeln. Obwohl die von mir verwendete TFT_eSPI-Bibliothek den Bildschirm mehr als 60 Mal pro Sekunde aktualisieren kann, musste ich mich auf 20 Bilder pro Sekunde beschränken. Andernfalls war nicht genügend Prozessorzeit für die virtuelle Maschine vorhanden. Sie können Kacheln und 32 Sprites mit einer Größe von bis zu 128 x 128 Pixel mit der Möglichkeit der Drehung und Spiegelung zeichnen. Um Speicherplatz zu sparen, können Sie Einzelbitbilder oder RLE-Komprimierung verwenden. Es gibt eine vereinfachte Physik: Erkennung von Kollisionen von Sprites mit Sprites und Kacheln, Kollisionsauflösung, Schwerkraft. Der Bildschirm wird nur zeilenweise aktualisiert, wenn eine Zeile die Pixel geändert hat. Die VM-Geschwindigkeit variiert je nach Anzahl der im Frame gezeichneten Linien zwischen 100.000 und 900.000 Vorgängen pro Sekunde. Sie können verschiedene Farbbildschirme verwenden, das Bild wird sanft auf die gewünschten Proportionen gedehnt.
Einige der von mir geschriebenen Spiele können hier angesehen werden .Zur gleichen Zeit wie VM für ESP8266 habe ich einen JavaScript-Emulator für den Browser geschrieben. Um den Bytecode nicht manuell zu bearbeiten, wurde ein einfacher Assembler hinzugefügt, basierend auf meinen Erfahrungen mit dem Assembler für den MOS6502. Dann habe ich beschlossen, eine höhere Sprache hinzuzufügen. Trotzdem bestand meine Hauptaufgabe darin, schnell einfache Spiele zu schreiben und keinen langen Debug-Assembler-Code. Es schien mir, dass das Schreiben Ihres Compilers einfacher wäre als das Hinzufügen von LLVM. Und ich habe es in JavaScript geschrieben, weil ich es nicht so schlecht kenne wie andere Sprachen. Im Moment ist er weit davon entfernt, C-Standards zu unterstützen, und beim Kompilieren kann es leicht zu einem unverständlichen Fehler an einem unverständlichen Ort kommen. Aber es ist schnell, weil es weniger als 2000 Zeilen dauert.
Und nun zur Frage, warum ich das alles hier geschrieben habe. Bereits jetzt können Sie Spiele schreiben und ausführen. Perfektion ist jedoch noch weit entfernt. Wenn mir jemand helfen möchte, das ESP LGE fertigzustellen oder mein eigenes Spiel zu schreiben, bin ich sehr glücklich. Wenn Sie meine Idee für interessant hielten und mehr wissen möchten, beantworte ich gerne Ihre Fragen. Ich warne Sie, der Code für Arduino ist ziemlich schwer zu lesen. Zum Teil, weil ich Autodidakt bin. Teilweise aufgrund der Tatsache, dass ich versucht habe, die Anzahl der Funktionsaufrufe zu reduzieren, um die Arbeitsgeschwindigkeit zu erhöhen. Infolgedessen enthalten viele Funktionen große Codeschritte. Lassen Sie schwangere Frauen und Kinder nicht auf den Bildschirm. Allmählich werde ich versuchen, dies zu beheben und die Lesbarkeit zu verbessern.
Und für diejenigen, die gelesen haben, ein Beispiel für ein Spiel. Es dauert weniger als hundert Zeilen und weniger als 1 KB in kompilierter Form.
int stickCount; char key,previouseKey,takenSticks; void redraw(){ int i;
Sie können es sofort
testen . Folgen Sie dem Link, klicken Sie auf Kompilieren und dann auf Ausführen. Wenn Sie mehr über die Möglichkeiten der IDE erfahren möchten, können Sie das
Tutorial lesen. Vielen Dank für Ihre Aufmerksamkeit.