CROSSLIB - The universal retro-hardware abstraction layer

  • Nein, aber krasser Ansatz.


    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Kann ich mir jetzt gerade nicht recht vorstellen. Wie soll das (a) portabel sein, in Anbetracht der völlig unterschiedlichen Hardware-Fähigkeiten der Geräte (z.B. Grafikauflösung und Farben), und (b) performant?


    Und überhaupt, "abstraction layers" sind doch das krasse Gegenteil der damaligen Programmierphilosophie. Sakrileg, Häresie! Bytes und Taktzyklen sparen, das ist das Ziel! ;)

  • Und überhaupt, "abstraction layers" sind doch das krasse Gegenteil der damaligen Programmierphilosophie

    Richtig.


    Aber aus heutiger Sicht wäre so eine Lib eine wirklich tolle Sache.

    Man schreibt eine Software, und die läuft auf dem C64 genau so wie am Apple 2e.



    Allerdings kann ich mir kaum vorstellen dass das funktionieren kann.

    Es fängt schon damit an, dass C Compiler so extrem verschieden sind.

    Dann sind C Compiler für 8 Bitter sowieso fraglich, weil die Code Größe und auch der Performance Verlust zum Problem werden.


    Ganz zu schweigen dass die Geräte alle völlig unterschiedliche Möglichkeiten haben was Auflösung, Farben, Sprites etc betrifft.

    Vom Sound mal ganz zu schweigen ...



    Aber zumindest könnte man ein "Hello World" machen das dann auf allen Maschinen läuft ... :D

  • Es läuft wohl darauf hinaus, einen kleinsten gemeinsamen Nenner zu finden, der auf allen Maschinen funktioniert.


    Aber das Ergebnis wäre dann ehrlich gesagt das Gegenteil von dem, was ich mir unter einer "Demo" vorstelle -- nämlich zu zeigen, was man aus einer gegebenen Maschine alles herausholen kann mit entsprechendem Programmieraufwand, mascheinenspezifischen Tricks und Optimierungen.

  • In Anbetracht von heute möglichen Hardwareaufrüstungen wie etwa RAM in größerer Menge ist das evtl. gar nicht so schlecht.


    Sowas gab es ja schon immer mal wieder. Das klassischste an Ansatz dürfte BASICODE sein, was auch schon auf relativ unterschiedlichen Plattformen läuft. Die vielleicht interessanteste Variante für sowas ist TAOS (was heute Elate heißt). Und die sind beide aus der Zeit, als solche Geräte noch fast neu waren.

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • Servus!

    I hab' schon 'was damit gemacht ;)

    Nämlich 5 Spiele und 4 kleine Demos (https://github.com/Fabrizio-Caruso/CROSS-LIB/releases), die auf ungefahr 200 Systemen laufen.


    Entschulding fur mein Deutsch... es is lange her seit ich es das letze Mal geschprochen bzw geschrieben have.

    Fabrizio

  • Hast Du mal die Demos angeschaut?
    https://github.com/Fabrizio-Ca…LIB/tree/master/src/demos

    Das einfachste ist "tiles", die zeigt wie Grafik gemacht wird:
    https://github.com/Fabrizio-Ca…ee/master/src/demos/tiles

    Ich habe begonnen die APIs von Cross-Lib zu dokumentieren:
    https://github.com/Fabrizio-Ca…er/docs/CROSS_LIB_APIS.md

  • Programme die mit C + Cross-Lib gescrhieben werden, sind *universell*, d.h., sie sint schon "korrekt" fûr alle 200 systeme und müssen nicht für ein bestimtes Target adaptiert sein.

    Sie werden einfach mit einem der vielen unterstutzten Kompilatoren cross-kompiliert (oder direkt kompiliert mit z.B. gcc).

  • Es läuft wohl darauf hinaus, einen kleinsten gemeinsamen Nenner zu finden, der auf allen Maschinen funktioniert.


    Aber das Ergebnis wäre dann ehrlich gesagt das Gegenteil von dem, was ich mir unter einer "Demo" vorstelle -- nämlich zu zeigen, was man aus einer gegebenen Maschine alles herausholen kann mit entsprechendem Programmieraufwand, mascheinenspezifischen Tricks und Optimierungen.

    Stimmt (mehr oder weniger).
    Der kleinste gemeinsame Nenner wäre keine Grafik, keine Farben, keinen Ton, uzw...

    Die Abstraktionen, die, ich in Cross-Lib verwende, sind aber sehr "dühn"... nur Tiles für die Grafik.

    Was ich mit Cross-Lib mache ist sehr verschieden vom zeigein, was man aus einer einzigen Machine alles herausholen kann...

    Die Spiele, die man mit Cross-Lib schreiben kann, haben keine komplitzierte Grafik.
    Sie sind aber spielbar und laufen auf Computer, die (fast) keiner heuzutage unterstützt (z.B. Jupiter Ace, verschiedene KC Robotron Modele aus der DDR, Galaksija aus der Yugoslawien, COMX-35, etc.).

  • @PeterSieg, ich have gerade was neus Feature implementiert, das hilft dazu, ein neues Spiel zu beginnen:

    Man kann jetzt einfact ein Script verwenden:

    ./create_xl game <Spielname> -> Spiel-Template mit einem vereinfachten Beispiel von einem Spiel
    ./create_xl helloworld <Spielname> -> Spiel-Template mit nur einem Helloworld Beispiel


    ./create_xl demo <Demoname> -> Demo-Template mit einem Beispiel, das zeigt wie man die Cross-Libs APIs verwenden kann.

    Mit diesen Behfelen kriegt man auch das Makefile.<Spiel bzw Demo name> mit dem man das Spiel/Demo builden kann.
    Zum Beispiel:
    make vic20 -f Makefile.helloword -> kompiliert helloworld füers VC 20.

    Und um ein Projekt zu loeschen:
    ./delete_xl <game oder demo> <Spiel bzw Demo name>

  • ThoralfAsmussen Hat Dir Cross Snake gut gefallen? Hast Du mal Cross Horde ausprobiert?


    Ja - CrossSnake war eher eine Zufallsentdeckung hier http://plus4world.powweb.com/software/Cross_Snake


    Sehr nettes kleines Snake mit der besonderen Note, daß man nicht ständig an den Wänden zerschellt. Hat mir gut gefallen.



    CrossHorde werde ich dann mal probieren ... wenn es schon so direkt empfohlen wird. :)

    -- 1982 gab es keinen Raspberry Pi , aber Pi und Raspberries

  • PeterSieg Ich hab's noch weiter vereinfacht:

    ./create_xl helloworld
    make vic20 -f Makefile.helloworld -> helloworld fürs VC20

    ./create_xl mygame game
    make msx -f Makefile.mygame -> Spiel-Template fürs MSX 1

    ./create_xl mydemo demo
    make gcc -f Makefile.mydemo -> Beispiel mit den apis fürs Native-Console (PC)

    P.S.: Um Cross-Lib zu installieren und verwenden braucht man:
    1. ein POSIX System (Linux, Windows mit Cygwin, usw.)
    2. make
    3. Python 2.x oder 3.x
    4. Aktuelle (Cross-)Compilers (z.B. CC65 und/oder GCC)
    5. Emulator(en)

    Zum Beispiel unter Ubuntu 20.04:


    sudo apt-get update -y

    sudo apt install make

    sudo apt-install python


    sudo apt-install cc65 (mit Ubuntu 18.04 kriegt man eine nicht genügend aktuelle Version von CC65, die man aber von der offizielle Seite runterladen kann)


    git clone https://github.com/Fabrizio-Caruso/CROSS-LIB.git


    sudo apt-install vice (um Vice Emulator to installieren)