Programmier-Challenge: Qix in BASIC V2

Es gibt 459 Antworten in diesem Thema, welches 43.636 mal aufgerufen wurde. Der letzte Beitrag (18. März 2024 um 20:16) ist von 1570.

  • Mit USR!

    Arndt

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Mit USR!

    Arndt

    Das wird schwierig ohne POKE. Die Startadresse muss man irgendwie in $311/$312 bekommen.

    Die Startadresse des Maschinenprogramms muss vor dem Aufruf von USR() im Vektor mit den Speicheradressen 785 und 786 (USR-Vektor an den hexadez. Adressen $311/$312) abgelegt werden, typischerweise mit Hilfe des BASIC-Befehls POKE.

  • ...aber mein Spiel ist ja noch gar nicht fertig! Da muss ich erst noch was machen. Levels mit zunehmendem Schwierigkeitsgrad, Hi-Score Tabelle, etc.

    Machst du dein Spiel denn noch fertig?

    Bin dran, war aber die letzten drei Tage schlapp wegen einer lästigen Erkältung.

  • Hier bitteschöön die releasefähige Version von QIXSCII, meinem QIX-Klon in BASIC V2 und in zeitlosem PETSCII-Stil :D. Highscore wird automatisch gespeichert.

    Bitte melde dich an, um diesen Anhang zu sehen.  Bitte melde dich an, um diesen Anhang zu sehen.

    Bitte melde dich an, um diesen Anhang zu sehen.

    Auf der Disk sind sowohl das mit Blitz! kompilierte Programm, als auch der Original BASIC-Code enthalten.

    Wer Lust hat, kann ja mal alle Compiler durchprobieren, und schauen, ob man mit einem anderen Produkt noch mehr Geschwindigkeit herausholen kann :P.

    Viel Spaß beim Kästchen füllen!

  • Wer Lust hat, kann ja mal alle Compiler durchprobieren, und schauen, ob man mit einem anderen Produkt noch mehr Geschwindigkeit herausholen kann :P .

    Gaaanz vorsichtig mit solchen Kommentaren, ich bin einer von diesen Compiler-Verrückten :D

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Hier noch eine neue Version mit Bugfix: Wenn die Qix-Cloud sich unterhalb des Markers befand und man ein "Dach" über dieser Qix-Cloud zeichnen wollte, dann konnte es sein, dass sich das Spiel aufhängte (=Endlos-Loop). Das ist jetzt korrigiert. :thumbsup:

    Bitte melde dich an, um diesen Anhang zu sehen.

  • Mir kam vorhin spontan der Gedanke, ob es in Zukunft KI-gestützte Compiler geben könnte, mit deren Hilfe jedes BASIC-Programm in ein optimiertes Assembler-Programm umgewandelt werden könnte, das einer von Hand geschriebenen Version in nichts nachsteht (oder es sogar übertrifft...)

    - neue Spiele für den C64 -
    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • Mir kam vorhin spontan der Gedanke, ob es in Zukunft KI-gestützte Compiler geben könnte, mit deren Hilfe jedes BASIC-Programm in ein optimiertes Assembler-Programm umgewandelt werden könnte, das einer von Hand geschriebenen Version in nichts nachsteht (oder es sogar übertrifft...)

    Aus Neugierde ein einfacher Praxistest in der Mittagspause: :)

    Snoopy:

    Kannst du mir das folgende BASIC-Programm für den Commodore C64 in Assemblercode für den C64 umwandeln?

    Code
    10 INPUT A
    20 INPUT B
    30 PRINT A+B

    ChatGPT:

    Natürlich kann ich dir helfen, das BASIC-Programm für den Commodore C64 in Assemblercode umzuwandeln. Hier ist der entsprechende Assemblercode:

    Dieser Assemblercode nimmt zwei Dezimalzahlen als Benutzereingabe entgegen, berechnet ihre Summe und zeigt das Ergebnis auf dem Bildschirm an. Das Programm endet mit einem Break (BRK), um zur BASIC-Eingabeaufforderung zurückzukehren.

    Bitte beachte, dass dies ein einfaches Beispiel ist, und du weitere Anpassungen vornehmen kannst, um das Programm zu erweitern oder zu verbessern. Der Speicherplatz, der hier verwendet wird (z.B. $FB), kann je nach Bedarf angepasst werden.

  • Code
    InputA  JSR $FFBD   ; Zeige "?" und warte auf Benutzereingabe
            LDA $C6     ; Lade den ASCII-Wert der eingegebenen Ziffer

    Nur das dieser Aufruf den Dateinamen setzt und nicht für INPUT steht. Und in $C6 steht die Anzahl Zeichen im Zeichenpuffer und kein ASCII-Wert...weiter habe ich nicht mehr geschaut.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Jo, das ist leider (noch) Quatsch. Aber ich koennte mir vorstellen, dass man in Zukunft durchaus Compiler KI-gestuetzt erstellen kann, natuerlich auch fuer andere Sprachen (und Plattformen), die z.B. auch jederzeit nachpruefen koennten, ob das resultierende Programm immer noch das selbe Verhalten hat wie der Quellcode.

    - neue Spiele für den C64 -
    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • Mir kam vorhin spontan der Gedanke, ob es in Zukunft KI-gestützte Compiler geben könnte, mit deren Hilfe jedes BASIC-Programm in ein optimiertes Assembler-Programm umgewandelt werden könnte, das einer von Hand geschriebenen Version in nichts nachsteht (oder es sogar übertrifft...)

    Ich habe damit mal herumexperimentiert. Nicht für ganze Programme (da kam nur Murks raus, auch wenn die sehr kurz waren) sondern für das Optimieren von erzeugtem Code. War aber im aktuellen Stand nicht zu gebrauchen. Entweder hat er Optmimierungen nicht gefunden, die man hätte machen können, oder er hat welche vorgeschlagen, die alles zerlegt haben. Aber das kommt bestimmt noch, wenn auch vielleicht nicht im 6502-Assembler-Umfeld. Da dürften die Quellen ausgeschöpft sein.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Wer Lust hat, kann ja mal alle Compiler durchprobieren...

    Kurz mal auf Lauffähigkeit getestet:

    • Petspeed: Compilat kracht mit einer Fehlermeldung, wenn man stirbt
    • Basic64: Compilat kracht mit einer Fehlermeldung, wenn eine Fläche gefüllt werden soll
    • Basic Boss: Man kann den Titelbildschirm nicht verlassen
    • MOSpeed: Konnte mit dem Laden der Highscores aus einer nicht vorhandenen Datei nicht umgehen. Das habe ich aber korrigiert (ein weiterer Gewinn dieses Wettbewerbs).

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Weiter getestet:

    • Austrocomp: Kann mit dem Laden aus der nicht vorhandenen Datei nicht umgehen und steigt nach Namenseingabe mit einer Fehlermeldung aus.
    • Hypracomp: Ist beim Compilieren ausgestiegen, habe vergessen, wieso...
    • DTL: Steigt (nach dem Entfernen der DIMs für normale Variablen, die mag er nicht...) beim Compilieren aus mit "30 U"...alles klar

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Wer Lust hat, kann ja mal alle Compiler durchprobieren...

    Kurz mal auf Lauffähigkeit getestet:

    • Petspeed: Compilat kracht mit einer Fehlermeldung, wenn man stirbt
    • Basic64: Compilat kracht mit einer Fehlermeldung, wenn eine Fläche gefüllt werden soll
    • Basic Boss: Man kann den Titelbildschirm nicht verlassen
    • MOSpeed: Konnte mit dem Laden der Highscores aus einer nicht vorhandenen Datei nicht umgehen. Das habe ich aber korrigiert (ein weiterer Gewinn dieses Wettbewerbs).

    Ui, das ist natürlich schade, wenn man da jeweils nachbessern muss. Obwohl, wenn ich für BASIC Compiler entwickelt hätte, dann hätte ich den Code vermutlich anders geschrieben. Ich habe ja viele Konstanten als Variablen definiert, weil im BASIC Interpreter schneller zugreifbar. Das ist für den Compiler aber eher kontraproduktiv, denk ich mal.

    Was ist denn deine Erfahrung, welcher Compiler so das beste Grundpaket ausmacht? Wie zufrieden bist du mit deinem eigenen (MOSpeed)?

  • Gibt's denn eine Übersicht der (momentan) fertigen Basic-Quixe?

    Vielleicht kann jeder, der einen PRG-Beitrag oder ein Update seines Beitrags hochlädt, eine solche Übersicht übernehmen (mit "Quellenlink" zur Thread#), wodurch die Übersicht immer aktuell wäre?

  • Was ist denn deine Erfahrung, welcher Compiler so das beste Grundpaket ausmacht? Wie zufrieden bist du mit deinem eigenen (MOSpeed)?

    Den finde ich scheiße...:D Nee, den finde ich natürlich am besten, aber da bin ich ja auch parteiisch. Der würde aber z.B. aus deinen Variablen wieder Konstanten machen, also dem wäre das egal.

    Wenn man unbedingt auf dem C64 arbeiten will, ist der natürlich nur 2. Wahl.

    In meinen Tests kam bisher immer raus, dass Blitz! und MOSpeed am kompatibelsten sind (im Sinne von: Was können sie überhaupt kompilieren und was läuft danach noch richtig...). Und wenn MOSpeed das mal nicht ist (so wie hier beim INPUT# auf einer nicht vorhandenen Datei), dann kann ich das ja kurz korrigieren.

    Die Programme bei Blitz! sind meistens (nicht immer...) kürzer als bei MOSpeed (da sind aber auch die Arrays mit in der Datei drin), dafür ist er in den meisten Fällen langsamer. Beim Füllen in Kidelyneen ist Blitz! z.B. 6mal langsamer als MOSpeed, aber das ist auch eine Ausnahme. In Schnitt würde ich sagen, man kann mit beiden in den meisten Fällen glücklich werden. Petspeed mag ich auch irgendwie, aber der produziert schon oft auch groben Unfug...

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.