Starten von DOOM auf dem HP Prime G2 Calculator



Die Installation von DOOM auf einem beliebigen Gerät ist so, als würde man das Banner des Gewinners auf einer gefallenen Festung hissen. Mir wurde die Frage gestellt: "Nun, hast du mit dem Untergang angefangen?" Mindestens 35 Mal, als sie herausfanden, dass ich mit diesem Taschenrechner herumspiele. Ich habe beschlossen, das Publikum nicht zu enttäuschen und den Start von DOOM zu erreichen. Auf dem Weg wurde es ein guter Test für die Geräteleistung und enthüllte unangenehme Fehler. So lass uns gehen!



Projektnachrichten



Für diejenigen, die sich fragen, wie ich DOOM zum Laufen gebracht habe, können sie dieses Kapitel überspringen und zum nächsten übergehen. Es zeigt einfach den aktuellen Status des Projekts an.



Wie Sie sich in den vorherigen Teilen ( Teil 1 und Teil 2 ) erinnern , war ich damit beschäftigt, Linux auf einen Taschenrechner zu setzen und U-Boot, Kernel und Rootfs neu zu erstellen. Seitdem habe ich mich sehr intensiv mit dem Taschenrechner beschäftigt und sogar gründlich herausgefunden, was in U-Boot, Kernel und Gerätebaum gemacht wurde. Man muss verstehen, dass dies mein Hobby ist, in meiner Freizeit von meiner Hauptarbeit und meiner Familie, also geht nicht alles schnell und manchmal ist es etwas unlogisch, einfach weil es heute eine Stimmung gibt, dies zu tun und nicht anders.



Die Hauptnachrichten fanden dank des Benutzers statt Alx2000y, der mich zu einem Chat in einem Einkaufswagen einlud, in dem Leute ihre Firmware für Xiaomi Gateway auf einem ähnlichen Prozessor sahen. Es gibt sogar einen Artikel über Habré zu diesem Thema . Die Leute haben in diesem Thema bereits große Fortschritte gemacht und die Funktionalität des Geräts unglaublich erweitert. Und hat mir sehr geholfen, das Nand-Problem zu besiegen. Wie Sie sich erinnern, habe ich ganz am Anfang mein Nand-Image aus Dummheit gewischt. Infolgedessen habe ich eine ziemlich große Anzahl von "virtuellen" fehlerhaften Sektoren erhalten. Das Unangenehmste ist, dass die fehlerhaften Sektoren am Anfang standen und nicht zuließen, dass U-Boot dort geschrieben wurde. Unten finden Sie eine Liste fehlerhafter Sektoren, von denen die meisten virtuell sind.



=> nand bad
Device 0 bad blocks:
  00000000
  00020000
  00040000
  00060000
  012c0000
  04e20000
  05280000
  094c0000
  17b20000
  1ff80000
  1ffa0000
  1ffc0000
  1ffe0000
=> 
      
      





Lenar aus dem obigen Chat hat mir sehr geholfen, das Problem wurde mit nur zwei Befehlen in U-Boot gelöst:



nand erase.chip
nand scrub.chip
Really scrub this NAND flash? <y/N>
y
      
      





Danach überprüfen wir die Anzahl der fehlerhaften Sektoren, und siehe da, es gibt deutlich weniger davon!



=> nand bad

Device 0 bad blocks:
  1ff80000
  1ffa0000
  1ffc0000
  1ffe0000
      
      





Infolgedessen kann ich jetzt U-Boot in Sektor Null laden und booten. Momentan kann der Rechner durch einfaches Anlegen von Strom geladen werden und wird vollständig mit Linux geladen, mit einem funktionierenden Display und der Möglichkeit, Programme über UART auszuführen. Es funktioniert sogar korrekt für DOOM. "Aber es gibt eine Nuance" (C). Anscheinend überschneidet sich der Tastaturtreiber irgendwie mit dem Ubifs-Treiber. Wenn Sie eine Taste auf der Tastatur drücken, hängt der Taschenrechner sofort. Eine Kernel-Panik flog sogar einmal zu mir, aber ich dachte nicht daran, sie zu retten, um zumindest den Ort dieser Kreuzung zu finden. Im Moment funktioniert also sicher alles in den initramfs. In meinem Telegrammkanal wurde ein Video veröffentlicht, das die Arbeit des Ladens und Startens von DOOM und des Einfrierens zeigt .



Von anderen guten Nachrichten habe ich versucht, Ubuntu auf nand zu setzen, und es funktioniert auch richtig. Pakete können natürlich nicht installiert werden, aber im Allgemeinen können Sie sie bearbeiten und verwenden, was ebenfalls praktisch ist. Aber ohne eine funktionierende Tastatur haben diese Spiele immer noch keine praktische Bedeutung.



Im letzten Teil habe ich mich beschwert, dass U-Boot ein anderes Verhalten hat, wenn es auf nand und aus dem RAM ausgeführt wird. Ich verbrachte zwei Tage damit, in den U-Boot-Quellcodes herumzustöbern, um herauszufinden, was los war. Und alles erwies sich als banal (sogar beschämt). Das Dienstprogramm uuu übergibt beim Starten von u-boot aus dem Speicher dort seine Umgebungsvariablen. Genauer gesagt ruft es mfgtool_args auf, und als Ergebnis sieht die Zeile der Boot-Umgebungsvariablen folgendermaßen aus:



bootargs=rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber= mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs) clk_ignore_unused
      
      





Wenn Sie von nand booten, sind Ubifs mit solchen Parametern im vierten Abschnitt natürlich nicht sichtbar. Daher habe ich nach dem Laden von U-Boot in den RAM die folgenden Umgebungsvariablen zwangsweise darauf gesetzt:



setenv bootargs  console=ttymxc0,115200 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs)
      
      





Und alles funktioniert super.



Lassen Sie mich erklären, warum dies erforderlich ist: Wenn Sie den Bootloader in den Nullsektor flashen, verschwindet die Fähigkeit, über mfgtool (Dienstprogramm uuu) zu arbeiten. In dieser Phase, die aus Entwicklung und Debugging besteht, ist es das Hauptwerkzeug. Daher ist es einfacher, das Dienstprogramm uuu laufen zu lassen und u-boot jedes Mal manuell zu laden.



DOOM starten



Fahren Sie mit dem unterhaltsamen Teil fort - DOOM auf dem Taschenrechner ausführen. Wie Sie sich vorstellen können, war es nicht umsonst, dass ich am Anfang über alle Probleme geschrieben habe. Sie können DOOM ausführen, wenn es auf einen NAND-Flash geladen wird. Dort können Sie Karten aller Art, alle möglichen Versionen von DOOM und im Allgemeinen alles, was Sie wollen, ablegen. Wenn wir jedoch im RAM arbeiten, sind wir durch die Größe des Rootfs-Images auf etwa 15 MB begrenzt (die Praxis hat gezeigt, dass 16 noch rollen). In diesem Zusammenhang musste ich die Version von DOOM auswählen, die richtige Baugruppe erstellen und lernen, wie man damit arbeitet.



Es stellte sich heraus, dass alle guten Dinge vor langer Zeit für uns erfunden wurden und DOOM direkt in Buildroot zusammengebaut werden kann, ohne die Couch zu verlassen. Ich fand dies heraus, als ich alle möglichen Varianten von DOOM für eingebettete Systeme googelte und versuchte, sie zu erstellen. Wie sich herausstellte, reicht es aus, um zu rennen:



make menuconfig
      
      





Und wählen Sie DOOM. Dies geschieht in " Target packages ---> Games --->



"





Wir haben zwei Versionen von DOOM zur Verfügung: Chocolate-Doom und Prboom . Nach einigen Experimenten wurde mir klar, dass Chocolate Doom nicht in Initramfs passen will. Es sei denn, Sie entfernen WAD-Dateien vollständig. Ich habe versucht, beschnittene Wad-Dateien zu finden, die zum Schokoladen-Untergang passen würden. Aber sie weigerte sich, mit ihnen zu arbeiten. Infolgedessen habe ich versucht, die Schokoladenversion auf nand (zusammen mit prboom) zu installieren, und habe es dort versucht. Ich habe Parameter usw. ausgewählt. Das Experiment ergab die folgende Startmethode:



export SDL_NOMOUSE=1 
chocolate-doom -geometry 320x240 -bpp 24 -nomouse
      
      





Das Ergebnis hat mich sehr enttäuscht: Diese Version von Doom streckt den Bildschirm falsch (oder im Gegenteil richtig) und hinterlässt breite Streifen an den Rändern des Bildschirms, die mir wirklich nicht gefallen haben.





Die Schokoladenversion von DOOM. Unten ist ein schwarzer Streifen sichtbar.



Beim Start sagt mir mein Schokoladen-Doom, was die Größenänderung von Fenstern bewirkt:



I_InitGraphics: 320x240 mode not supported on this machine.
I_InitGraphics: Auto-adjusted to 320x200x32bpp.
      
      





Deshalb habe ich mich für prboom entschieden. Ich habe das Image zusammen mit den freigegebenen WAD-Dateien und dem Prboom selbst erstellt und alle unnötigen Dinge entfernt. Trotzdem konnte ich es sehr lange nicht zum Laufen bringen. Ich las alle möglichen Handbücher und suchte nach einer Konfiguration, damit alles richtig funktioniert. Das Bild wird angezeigt, reagiert auf Schaltflächen, aber der Bildschirm wird ungeschickt gedehnt und zeigt Farbkurven an. Bis ich in einem Forum die idealen Startparameter gefunden habe.



Für unseren Taschenrechner lautet der Start des Prbooms im Allgemeinen wie folgt: Schalten Sie die Maus aus und starten Sie den Prboom mit den folgenden Parametern:



export SDL_NOMOUSE=1 
/usr/games/prboom -width 320 -height 240 -nosound -vidmode 32bit
      
      





Der Schlüsselparameter hier : "-vidmode 32bit"



.





Ich habe lange nach geeigneten Parametern gesucht und erst damit hat alles angefangen. Der Einfachheit halber habe ich alles in das d.sh-Skript geschrieben. Endlich funktioniert alles, man kann sogar spielen!





Speziell für Sie habe ich eine aktualisierte Assembly von flash_utility mit DOOM vorbereitet , die Sie auf Ihrem Rechner ausführen können, auch ohne es zu flashen, und Ihren Freunden zeigen, dass DOOM in meinem Rechner funktioniert. Es reicht aus, den Rechner zu zerlegen, die im ersten Teil beschriebenen Kontakte zu schließen und auszuführen



sudo uuu doom.uu
      
      





Am Ende aller Schritte erhalten Sie einen Taschenrechner mit Linux und DOOM. Um DOOM zu starten, müssen Sie sich anmelden und auf dem Rechner ausführen:



./d.sh
      
      





Zusammenfassen



DOOM funktioniert! Kann ich es spielen Nun, lokal von einem Computer herunterladen - das können Sie. Es sieht cool und schön aus, aber in der Tat nicht wirklich das, was Sie bekommen möchten. Es ist wirklich cool, wenn Sie in der U-Bahn sind, einen Taschenrechner nehmen und ihn aus Ihren breiten Beinen ziehen, ihn einschalten (der Energiesparmodus funktioniert derzeit nicht) und DOOM starten. Es ist wirklich cool, in der U-Bahn auf einem Taschenrechner in DOOM, Duke Nukem 3D, Quake I, II, III usw. zu spielen. Aber die Tatsache bleibt - DOOM läuft auf dieser Hardware. Aber es gibt noch viel zu tun.



Im Allgemeinen gibt es nicht genug, zumindest eine kleine Community um diesen Rechner (zumindest mehr als ich), so dass es Problemtester gibt, es gibt jemanden, mit dem man sprechen und teilen kann, um Ratschläge zu hören. Der ursprüngliche Autor hat sich deutlich auf dieses Projekt abgekühlt, obwohl er einen titanischen Job gemacht hat. Ich verstehe ihn gut und kann ihm nicht vorwerfen, dass er nicht einmal mit Ratschlägen zu diesem Projekt helfen möchte. Nun, er gab kleine Empfehlungen, aber er war eindeutig nicht mehr bei ihm. Wenn Sie also Ideen haben, einen Taschenrechner, den Wunsch zu helfen, zumindest mit Ratschlägen, hier oder in den Warenkorb zu schreiben, werde ich mich freuen!



PS Warum mache ich das?



Sehr oft fragen sie mich "wofür"? Ich verstehe intellektuell, dass es dumm ist, diese Frage zu beantworten, aber ich werde sie trotzdem beantworten.



Warum malt ein Künstler ein Bild oder ein Autor schreibt ein Buch? Seien wir ehrlich, 90% der Bücher, Gemälde und anderen Werke sehen möglicherweise überhaupt nicht das Licht, und von denen, die dies tun, wird ein Bruchteil eines Prozent bekannt und gewinnt eine breite Palette von Lesern. Einfach ausgedrückt, die meisten Schöpfer machen „nutzlose“ Arbeit. Darüber hinaus finden viele Werke nicht einmal ihre Leser, aber warum sollten sie es nicht tun? Was treibt diese Leute an? Alles ist ziemlich alltäglich. Sie werden von einem einfachen Gefühl angetrieben:





Einfach gesagt, du machst es, weil es cool ist und es rast. Und seltsamerweise wird es in Zukunft große Vorteile bringen, wenn auch nicht so offensichtlich, wie es scheint.



Dateien zum Herunterladen










All Articles