1 Punkte von GN⁺ 2024-11-23 | 1 Kommentare | Auf WhatsApp teilen
  • ChipWits, eines der frühen Spiele für den Macintosh von 1984, feiert sein 40. Jubiläum und hat den ursprünglichen FORTH-Quellcode für Mac und Commodore 64 als Open Source veröffentlicht
  • Ziel der Veröffentlichung ist es, das Vermächtnis des Spiels zu bewahren und zu zeigen, wie Cross-Plattform-Entwicklung auf 8-Bit-Mikrocomputern im Jahr 1984 funktionierte
  • Die Daten wurden von 40 Jahre alten Disketten wiederhergestellt, die Doug Sharp aufbewahrt hatte; einige Sektoren waren defekt, aber die meisten Disketten ließen sich problemlos lesen
  • Der vollständige Quellcode der Mac-Version umfasst etwa 3.000 Zeilen FORTH, während der modernisierte Port bereits 35.000 Zeilen C# erreicht – ein Hinweis auf die Kompaktheit und die Einschränkungen des damaligen Codes
  • Das Projekt hat die originalen Disk-Images und den extrahierten Code auf GitHub veröffentlicht und möchte gemeinsam mit der Community die neuesten Quellen identifizieren, Build-Anleitungen erstellen und Sprites extrahieren

Ursprünglicher ChipWits-Code veröffentlicht

  • Zum 40. Jubiläum von ChipWits wurde der ursprüngliche FORTH-Quellcode für Mac und Commodore 64 als Open Source veröffentlicht
  • Der wiederhergestellte Originalcode und die Disk-Images sind unter chipwits/chipwits-forth zusammengestellt
  • Ziel der Veröffentlichung ist die Bewahrung des Vermächtnisses von ChipWits und das Teilen von Erfahrungen mit Cross-Plattform-Entwicklung für 8-Bit-Mikrocomputer im Jahr 1984
  • Personen, die mit den Originalsystemen vertraut sind, können sich an der Durchsicht und Aufbereitung des Quellcodes beteiligen; das Projekt bittet über den ChipWits Discord Server um Zusammenarbeit

Warum 1984 FORTH gewählt wurde

  • ChipWits war eines der frühen Spiele, die 1984 für den Macintosh erschienen
  • Die Mitentwickler Doug Sharp und Mike Johnston hatten Lernspiele zwischen 8-Bit-Mikrocomputern portiert und entwarfen mit ChipWits ihr erstes eigenes Spiel
  • Das Spiel ist ein Roboter-Programmierspiel, beeinflusst von damaligen Programmierspielen wie Rocky’s Boots und Logo
  • Die Mac-Entwicklungsumgebung war 1984 eingeschränkt; der wichtigste Entwicklungsweg bestand darin, eine Apple Lisa zu kaufen
    • Der ursprüngliche Preis der Apple Lisa lag bei 9.995 US-Dollar, was heute 30.373 US-Dollar entspricht
    • Für ein Indie-Game-Studio war das schwer zu stemmen, daher entwickelten Doug und Mike mit MacForth Plus, das direkt auf dem Mac lief
  • Da es damals FORTH-Varianten für mehrere 8-Bit-Mikrocomputer gab, eignete sich die Sprache gut mit Blick auf spätere Portierungen
  • Die Entwicklung begann im April 1984; bis zur ersten Version und Veröffentlichung vergingen etwa 7 Monate, sodass das Spiel rechtzeitig zur Weihnachtssaison fertig wurde

Portierungen auf Commodore 64 und Apple II

  • Epyx sollte Publisher von ChipWits werden, und der Commodore 64 war der größte Markt
  • Epyx hatte keine Mac-Spiele, während Brainworks auf den damals von Apple starken Bildungsmarkt zielte; deshalb veröffentlichte Epyx nur die Commodore-64-Version
  • Der C64-Port wurde 1985 fertiggestellt und in Super Forth 64 geschrieben
  • Die Portierung auf den Commodore 64 war anspruchsvoll, weil das grundlegende UI-Design des Mac beibehalten werden musste
    • Statt einer Maus musste ein Pull-down-Menüsystem entwickelt werden, das mit einem Joystick bedient wurde
    • Farbgrafiken und Sound über den SID-Chip wurden hinzugefügt
    • Statt der 400 KB einer Mac-Diskette musste alles auf eine 165-KB-Diskette passen
    • Statt der 128 KB RAM des Mac standen 64 KB RAM und ein langsamerer Prozessor zur Verfügung
  • Nach dem Erfolg der Commodore-64-Version wurde auch eine Apple-II-Version erstellt, ebenfalls in einer FORTH-Variante

Resonanz nach der Veröffentlichung und Ausführen des Originals

  • ChipWits erhielt nach der Veröffentlichung mehrere Rezensionen und Auszeichnungen
  • Der MacUser Editor’s Choice 1986 Award bezeichnete ChipWits als „den unterhaltsamsten Einstieg in Programmierkonzepte“ und lobte die ikonbasierte Sprache sowie das pädagogische Design
  • Macazine sagte voraus, dass ChipWits bei Macintosh-Nutzern und Kindern Kultstatus erlangen würde
  • MacWorld urteilte: Wer Programmieren mag, werde ChipWits mögen
  • Creative Computing veröffentlichte eine Rezension mit einer Szene, in der jemand um 4:30 Uhr morgens einen Cartoon-Roboter beschimpft
  • 2008 wählte Maclife.com ChipWits zu einem der Top 10 Apple II / Mac Games aller Zeiten
  • Die Originalversionen werden über die Open-Source-Projekte Emularity und Apple2js für die Ausführung in Browser-Emulatoren vorbereitet

Wiederherstellung 40 Jahre alter Disketten

  • Während der Arbeit an der neuen Version von ChipWits fand Doug Sharp die Originaldisketten, die er aufbewahrt hatte
  • Die 3,5-Zoll-Disketten und 5,25-Zoll-Floppys waren 40 Jahre lang in einem Privathaushalt gelagert worden, doch die meisten Disketten ließen sich ohne defekte Sektoren lesen
  • Für die Wiederherstellung der Commodore-64-Disketten wurde ein bei eBay gekauftes 1541 Commodore 64 Disk Drive verwendet
    • Die Daten wurden über einen USB-Adapter XoomFloppy auf einem modernen PC gelesen
  • Die 3,5-Zoll-Mac-Disketten konnten wegen der proprietären Sektoranordnung des Mac nicht auf dem Standardweg mit modernen Laufwerken gelesen werden
    • Der Mac nutzte ein eigenes Sektorlayout, um die Diskettenkapazität auf 800 KB zu erhöhen
    • Ein PowerMac G3 WallStreet verfügte über ein 3,5-Zoll-Laufwerk und einen Netzwerk-Stack und diente daher als Brückensystem; da in neueren MacOS-Versionen die Unterstützung für 400 KB deaktiviert war, konnte er jedoch nur 800-KB-Disketten lesen
    • Später wurde auf Vorschlag eines Fans der Custom-Hardware-Controller GreaseWeazle zur Steuerung von USB-Diskettenlaufwerken eingesetzt, und dieser Ansatz funktionierte
  • Alle Disketten wurden blockweise als Images ausgelesen und im GitHub-Repository organisiert
    • Als Dateinamen wurden die Diskettenlabels verwendet
    • Wenn defekte Sektoren erkannt wurden, wurde dem Dateinamen bad vorangestellt
    • Damit sie auf modernen Computern leichter lesbar sind, wurden die Blöcke per Python-Skript extrahiert und als UTF-8-ASCII-Dateien neu formatiert
    • PETSCII, die proprietäre Zeichencodierung des Commodore 64, wurde nach ASCII konvertiert

Entwicklungsweise im FORTH-Quellcode

  • Die vollständigen ursprünglichen Disk-Images und der Code sind unter chipwits/chipwits-forth verfügbar
  • Der gesamte Quellcode von ChipWits für den Mac umfasst etwa 3.000 Zeilen FORTH
  • Der modernisierte Port umfasst bereits 35.000 Zeilen C#, wodurch die Kompaktheit des ursprünglichen FORTH-Codes deutlich wird
  • Der separate Artikel Forth Code for Electrocrabs in 1984 ChipWits Deciphered analysiert einen „Screen“ FORTH-Code, der Electrocrabs steuert
  • FORTH ist eine stackbasierte Sprache und ähnelt der Reverse Polish Notation
    • Statt 1 + 1 schreibt man 1 1 +
    • Statt if random(3) == 1 wird die Form 3 irnd 1 = if verwendet

Spieleimplementierung von 1984 anhand von Codebeispielen

  • Der Code für die Roboterbewegung in der Mac-Version trennt keine Rendering-Schleife pro Frame ab, wie es in moderner Spieleentwicklung üblich ist
    • Spiellogik und Grafik-Rendering sind im imperativen Code miteinander vermischt
    • Animationen werden umgesetzt, indem Pixel direkt innerhalb von Schleifen gerendert werden
    • Ob sich der Roboter auf ein leeres Bodenkachel bewegt, gegen eine Wand stößt oder eine Bombe berührt, wird mit wenigen Code-Wörtern behandelt
    • Die Definition ?boom entscheidet sogar, ob das Spiel beim Kontakt mit einer Bombe endet
    • Abhängig von der Roboterposition wird dem Punktestand 0 hinzugefügt, um die Punkteanzeige, die durch das Vorbeifahren des Roboters möglicherweise gelöscht wurde, zwangsweise neu zu zeichnen
  • Die Sprite-Definitionen der Commodore-64-Version zeigen, wie Code und Asset-Daten miteinander vermischt wurden
    • FORTH-Quellcode wurde nicht als Datei gespeichert, sondern in nummerierten Screens, die in der benötigten Reihenfolge geladen wurden
    • Monochrome C64-Sprites sind 24×21 Pixel groß, und auf einem Bildschirm konnten nur 8 Sprites genutzt werden
    • Wählt man 4-Farben-Sprites, sinkt die Auflösung auf 12×21, und die Pixel werden doppelt so breit
    • Die ChipWit-Figur wird durch Überlagern mehrerer Sprites gerendert, ähnlich wie Cel-Animation in alten Zeichentrickfilmen
    • Diese Entscheidung verbraucht viele der verfügbaren Sprites für ChipWit, ermöglicht aber ein schärferes Bild und Animation einzelner Teile
  • Die Punktetabelle für Items in der Mac-Version ist so komprimiert, dass sie auf einen Screen passt
    • Eine Notation wie ( 110584 dws) ist der Datumsstempel des Screens; 110584 steht für den 5. November 1984, dws für Douglass Walter Sharp
    • Dieser Screen scheint einer der zuletzt vor dem finalen Release geänderten Screens zu sein; der letzte geänderte Screen datiert auf den 8. November
    • d, wurde so definiert, dass Werte mit 10 multipliziert und gespeichert werden, sodass 150 Punkte als 15 d ausgedrückt werden konnten
    • Diese Methode half dabei, die Tabellenformatierung beizubehalten und alles auf einen Screen zu bekommen, und dürfte es während des Score-Balancings vor dem Release erleichtert haben, alle Punktwerte anzupassen

Reboot und Community-Arbeit

  • Das Team arbeitet unabhängig von der Veröffentlichung der ursprünglichen FORTH-Version auch an einem modernisierten ChipWits
  • Die Reboot-Version soll den Spaß und die informatische Strenge des Originals bewahren und zugleich viele Aspekte verbessern, von der Lernkurve bis zu kompetitiven globalen Leaderboards
  • Wer ChipWits auf Steam zur Wunschliste hinzufügt, kann eine Benachrichtigung zum Release der finalen Version erhalten
  • Die unmittelbaren Ziele der aktuellen GitHub-Issues rund um den ursprünglichen FORTH-Code sind:
    • prüfen, ob der gesamte relevante Quellcode aus den Raw-Disk-Images extrahiert wurde
    • Ausrichtungsprobleme in einigen Quelldateien beheben
      • einige sind 40 Zeichen breit, andere 64 Zeichen
    • herausfinden, welche Diskette den neuesten Quellcode enthält
    • dokumentieren, wie aus den Quellen für Mac und C64 gebaut wird
    • Raw-Sprites und Bilder von den Disketten extrahieren und in .png-Dateien umwandeln
  • Das Endziel ist eine von der Community gepflegte FORTH-Version von ChipWits für moderne PCs

1 Kommentare

 
GN⁺ 2024-11-23
Meinungen auf Hacker News
  • Es gibt einen Beitrag, der erklärt, warum ChipWits 1984 in FORTH entwickelt wurde
    https://chipwits.com/2023/04/08/forth-programming-language-g...

    • ChipWits war 1984 eines der ersten Spiele, die ich auf meinem ersten Computer gespielt habe, einem Apple Macintosh, als ich 6 Jahre alt war
      Danke, dass ihr eines meiner Lieblingsspiele gemacht habt; ich habe mir auch die neue Demo geholt und es auf meine Steam-Wunschliste gesetzt
  • Forth ist eine Sprache, die ich schon seit Jahren lernen wollte
    Auf alten Computern hatte man die Wahl: Assembler, wenn man schnelle Programme wollte, oder BASIC, wenn es auch langsam sein durfte. Faszinierend an Forth ist, dass es ziemlich High-Level wirkt und trotzdem als Sprache mit „mittlerer Geschwindigkeit“ übrig geblieben ist

    • Forth war lange Zeit neben C eine Standardsprache für Hardwareentwicklung und Treiber und wird auch heute noch an vielen Stellen eingesetzt
      Es ist eine stackbasierte Sprache
      https://www.forth.com/starting-forth/
    • Man kann Single-Board-Computer kaufen, die Forth nativ ausführen
      Einfach ein USB-Kabel an den Computer anschließen und ein Terminalprogramm öffnen, dann kann man sofort loslegen; das ist ideal, um vollständig in die Sprache einzutauchen
      Produkte aus Australien können allerdings mehrere Monate bis zur Lieferung brauchen, daher ist es besser, zuerst nach einem näher gelegenen Anbieter zu suchen
      Eine weitere gute Methode ist, es wie 1984 zu lernen: Auf einem modernen Computer einen Emulator für Commodore 64, Apple ][ oder Ähnliches starten und darin eine Forth-Entwicklungsumgebung laufen lassen
      Die damalige Dokumentation richtete sich an komplette Anfänger, ist daher sehr leicht nachzuvollziehen, und im Internet gibt es viele kostenlose gescannte PDFs
    • Ich halte es für eine gute Methode, einen Toy-Forth-Interpreter selbst zu bauen, um die Sprache zu lernen
      Es war einfach und hat Spaß gemacht, aber bis zu einem gewissen Punkt ist es fast absurd leicht, sodass es manchen zu grundlegend vorkommen kann oder die Versuchung groß wird, über eine reine Toy-Implementierung hinauszugehen
    • Forth ist sehr schnell und kann sogar schneller sein als naiv geschriebener Assembler, ist aber keineswegs eine High-Level-Sprache
      Man muss den Stack selbst verwalten, was ziemlich mühsam ist; sein eigenes FORTH zu bauen, macht aber Spaß. Es muss nicht unbedingt in Assembler sein – ich habe früher auch einmal in C++ eine Forth-ähnliche Skriptsprache gebaut
    • Alte 8-Bit-Heimcomputer wurden mit Teenagern und Kindern im Blick entwickelt, möglicherweise auch unter dem Einfluss von Alan Kay
      BASIC passte gut, weil es für „Beginner's All-purpose Symbolic Instruction Code“ steht
      Für den Amstrad CPC 6128 gab es auf einer separaten Diskette auch eine Implementierung von Logo, einem Lisp-Dialekt für Bildungszwecke, und als Kind haben mich diese verketteten Listen wirklich umgehauen
      Damals war „Open Source“ noch kein verbreitetes Konzept, und Compiler sowie Interpreter für verschiedene Sprachen waren professionelle kommerzielle Werkzeuge
      [1] https://en.wikipedia.org/wiki/Amstrad_CPC#Other_languages
      [2] https://en.wikipedia.org/wiki/An_Open_Letter_to_Hobbyists
  • Sieht ziemlich cool aus
    In dem Zusammenhang gibt es auch http://tumbleforth.hardcoded.net/, und ich finde, das sieht ziemlich gut aus. Falls jemand das bis zum Ende durchgemacht hat, würde mich interessieren, wie die Erfahrung war.

    • Ich habe in einer Woche, in der bei der Arbeit wenig los war, etwa die Hälfte geschafft, und es hat mich an meinen Hardware-Kurs an der Uni erinnert.
      Es hat mich dazu gebracht, Computing anders zu denken.
      Ich bin noch jung und unerfahren, aber rückblickend wirkt es so, als seien früher wegen Hardware-Beschränkungen bestimmte Abstraktionen gewählt worden, und als hätten sich in den heutigen „Evolutionszweigen“ der Programmiersprachen viele schlecht gealterte Abstraktionen angesammelt, sodass es viele Schichten von Gerümpel gibt, die die Last tragen. Wie bei anderen Engineering-Projekten auch.
      Collapse OS ist heute vielleicht nicht praktisch nutzbar, aber es gibt ein befreiendes Gefühl, aus mehreren Abstraktionsschichten auszubrechen. Es fühlt sich an wie eine Möglichkeit, Computing im Stil der 1960er zu genießen, ohne eine furchtbare Developer Experience.
      Mein aktuelles Luftschloss-Projekt ist, solchen Dingen zu folgen, Dusk OS in einer virtuellen Maschine zu bauen, es später auf eine physische Maschine zu übertragen, dann in C einen Scheme-Interpreter für Dusk OS zu schreiben und ihn anschließend nach Belieben zu erweitern.
      Bis dahin sind noch ein paar Flüsse zu überqueren. Ich habe in ein paar Stunden einen Scheme-Interpreter in Python implementiert und noch ein paar Stunden investiert, um Scanner/Tokenizer zu verbessern. Jetzt lese ich Crafting Interpreters, um zu sehen, wie man einen Scheme-Interpreter in C implementieren müsste. Nachdem ich den C-Interpreter gebaut habe, will ich mir diesen Guide noch einmal ansehen und mich frontal in DuskOS stürzen.
    • Ich habe gerade erst angefangen reinzuschauen, danke fürs Teilen.
      Mir gefällt schon jetzt der Tonfall des Autors.
      Zum Beispiel:

      Much terser than the C version right?
      This little assembler crash course gives us a better understanding of what is compiled by the C compiler, but not how it compiles it. We don't know how it's ran either. To know that, we'd have to dig through software that weighs millions of lines of code. Maybe you'd have the patience to do it, I don't, so let's continue tumbling down the rabbit hole. We'll go bare metal and then build an operating system of our own, with a C compiler of our own. It's simpler this way.
      What’s a linker? Aw, forget about it, it’s another piece of overcomplicated software that has convinced the world that it’s essential. We won’t need one in what’s coming.

    • Virgil Dupras, der Autor der Tumble-Forth-Serie, baut auch DuskOS, ein Betriebssystem, das komplett in einem Custom-Forth geschrieben ist.
      Sein stetiger und enormer Output ist beeindruckend. Ich stimme der Collapse-Philosophie nicht vollständig zu, aber die DuskOS-Mailingliste hat genau das richtige Maß an Traffic, um still mitzulesen.
      Nachdem ich Virgils Arbeit gesehen hatte, habe ich ein wenig mit Forth herumprobiert, und letztes Jahr habe ich Zeit damit verbracht, SmithForth[1] von Hand zu disassemblieren.
      Es ist erstaunlich, wie wenig Assembly nötig ist, um die Sprache zu bootstrappen. Ich verstehe völlig, dass Forth in Embedded-Umgebungen eine REPL bereitstellen kann, und es sieht viel interessanter aus als der übliche Entwicklungszyklus, von dem man oft hört.
      [0]:https://duskos.org/
      [1]:https://dacvs.neocities.org/SF/
    • Anfangs war das eine Reaktion aus Begeisterung darüber, endlich etwas Reales auf Forth-Basis zu sehen.
      Danach habe ich die Wikipedia-Seite und den Blogpost zu ChipWits gelesen, und das Originalspiel sieht wirklich großartig aus. Auch das Logo im Wikipedia-Handbuch ist sehr schön.
      Ich habe neulich eine Liste alter/neuer Spiele mit Puzzle- und Programmier-Elementen erstellt und werde es dort aufnehmen. Vielleicht probiere ich es direkt aus, nachdem ich das Ketman-Assembly-„Spiel“ beendet habe. Wobei man das eigentlich kaum ein Spiel nennen kann.
      Ich hoffe, das neue ChipWits wird sehr erfolgreich.
  • Valpars ValForth war eine der frühen crossplattformfähigen FORTH-Implementierungen im Atari-ST-Ökosystem und hatte auch clevere Erweiterungen für Spiele.
    https://www.atarimagazines.com/rom/issue1/jumping_forth.php
    Wie im Artikel erwähnt, gab es auch auf 8-Bit-Systemen Elcomps FORTH sowie Bücher wie https://www.atarimania.com/documents/FORTH-on-the-Atari-Lear.... Leo Brodies „Starting FORTH“ ist auch heute noch eine hervorragende Einführung.
    Wir haben alle BASIC gelernt, aber solche alternativen Sprachen haben gezeigt, dass es tatsächlich ganz andere Metaphern dafür gibt, Geräte zu programmieren.
    Für ein Kind der 80er war das eine enorme Erweiterung des Horizonts.

  • Forth wirkt wie eine dieser Sprachen, die – ähnlich wie Perl – nach dem Schreiben schwer zu lesen sind
    Schreiben und Erstellen sind einfach, aber wenn man nach etwa einem Jahr zum Code zurückkehrt, dürfte man nicht mehr wissen, was er tut
    Trotzdem ist es wirklich schnell und effizient

    • Ich halte es für völlig ungerechtfertigt, dass Perl diesen Ruf hat
      Ich habe gerade zufällig ein ziemlich großes Perl-Programm geöffnet, das ich seit über drei Jahren nicht mehr angefasst hatte, und den Source überflogen; ich hatte keinerlei Problem zu verstehen, was es tut
      Ich glaube nicht, dass Perl-Code schwerer erneut zu lesen ist als die meisten anderen Programmiersprachen. Die Schwierigkeit hängt vor allem davon ab, wie gut der Entwickler die Sprache beherrscht und wie lange es her ist, dass er zuletzt Code in dieser Sprache geschrieben hat
      Wenn die Sprachkenntnisse stark eingerostet sind oder man von Anfang an nicht besonders versiert war, wird es in jeder Sprache schwierig, alten Code wieder anzusehen
      Natürlich ist es noch schwieriger, wenn es nicht der eigene Code ist, und wie gut der Code geschrieben ist, spielt ebenfalls eine große Rolle. In jeder Sprache gibt es viel Müll-Code, und wenn er von Anfang an Müll war, wird er mit der Zeit nicht besser
    • Ich persönlich empfinde es genau umgekehrt
      Ich finde, Forth ist schwer zu schreiben, aber leicht zu lesen
  • Habe ich als Kind auf dem Commodore 64 viel gespielt
    Es war ein einzigartiges, interessantes und spaßiges Spiel

    • Auch im neuen Spiel haben wir das Gameplay des Originals fast unverändert beibehalten
      Ich will Hacker News nicht zuspammen, aber wenn du das Original gespielt hast, würde ich wirklich gern deine Reaktion auf den Reboot hören: https://chipwits.com
  • Als Kind wollte ich dieses Spiel unbedingt haben
    Da merkt man, wie alt man geworden ist

  • Ich frage mich, womit das moderne ChipWits geschrieben wurde

    • Dem Artikel zufolge in C#, und die Codebasis soll mindestens zehnmal so groß sein
      Ich habe dieses Spiel wirklich geliebt. Ich hatte auch ein Forth-Paket für den C64, aber ich habe nie den Zusammenhang hergestellt, dass dieses Spiel damit entwickelt wurde
    • Unity und C#
  • Ich habe Human Resource Machine gekauft und es größtenteils mit Spaß gespielt – bis es zu schwierig wurde
    Es wirkt wie dasselbe Konzept wie ChipWits, also stackbasierte Programmierung als Spiel umgesetzt
    Mich würde interessieren, wie jemand, der beide gespielt hat, sie vergleicht