Wer programmiert Basic von Euch ?

Es gibt 362 Antworten in diesem Thema, welches 39.502 mal aufgerufen wurde. Der letzte Beitrag (29. September 2023 um 22:13) ist von Goodwell.

  • Wenn ein Spiel auf nem c64 abstĂŒrzt, werden vermutlich keine Menschen sterben. Wenn das Steuerungsprogramm eines Atomkraftwerks versagt, oder die Software in einem ABS SteuergerĂ€t abstĂŒrzt, sieht das schon ganz anders aus. Gibt da Mengen an Beispiele, wie Luftfahrt, Raumfahrt, Waffensysteme uvm. Da will man halt schon 99,999% Gewissheit haben, dass die Software tut, was sie soll.

  • Kein Goto in modernen Programmen? Echt ? Heutige Spiele werden doch alle "strukturiert" in C++ gemacht ?

    Habe in viele kommerzielle Programme hineingesehen und es sind tausende Jump Opcodes in den Libraries vorhanden !

    Einfach mal den IDA PRO aufreissen und ein aktuelles Spiel debuggen.

    Na ich hoffe mal dass das jetzt nicht ernst gemeint ist...

    was die Jump opcodes ? Die VM vom Denuovo ? Stackmanipulationen ? Doch hab ich alles gesehen

    Vorher natĂŒrlich die Exe vorher unpacken und aus den Sicherheitslayern unwrappen... anderes Thema btw.

    Aber ich gebs zu: hab es wenig drastisch dargestellt und vielleicht ĂŒberzeichnet.

    Aber ihr habt es ja eh schon gesagt: jede Aufgabenstellung hat eigene Lösungen und Strategien

  • Naja dass ein in C++ (oder auch in irgendeiner beliebigen anderen Sprache) geschriebenes Programm am Ende immer noch von einer CPU ausgefuehrt wird, welche natuerlich JUMP opcodes verwendet, ist ja klar. Aber das heisst ja nicht, dass der Quellcode ebenfalls GOTOs verwendet - letztendlich wurden ja Programmiersprachen ueberhaupt deshalb erfunden, dass man bequemer und sauberer programmieren kann als wenn man alles direkt in Assembler machen muesste.

    Und natuerlich sind GOTOs unsauber und es gibt deutlich bessere Wege, zu programmieren - viele Sprachen besitzen ja noch nichtmal ein GOTO (C/C++ zwar schon, aber da wird das i.d.R. nur fuer Ausnahmen wie Error-Handling verwendet, also in Faellen, wo die Kacke eh schon am Dampfen ist quasi und wo man die aktuelle Routine einfach komplett abbricht).

    Aber dass BASIC natuerlich auch Spass machen kann und GOTO zum BASIC gehoert wie der Teufel zur Bibel :bgdev sollte natuerlich hier im Forum auch fuer jeden nachvollziehbar sein. Wenn ich BASIC programmiere, dann mache ich das ja auch, WEIL ich gerade Bock auf BASIC habe. Allerdings habe ich letztes Jahr auch ein etwas umfangreicheres Spiel in BASIC programmiert und da wurde mir auch schnell wieder bewusst, wo die Grenzen liegen und wo es unbequem wird (und soooo riesig war das Programm auch nicht).

    Fuer professionelle, heutige Software-Entwicklung finde ich es schon sinnvoll, strukturiert zu coden und da wuerde ich auf keinen Fall so coden wollen wie damals in BASIC. Aber als Gegending kann man ja zwischendrin auch gerne mal wieder sich an seinen C64 hocken und quick&dirty was in BASIC coden. Das Weihnachtsheft (inzwischen 5 Ausgaben, d.h. rund 100 Programme) zeigt ja auch, dass das hier einigen Spass macht.

    - 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.

  • Also wenn man am Raumcode einfach per Peek sich die Variablen vom hauptprogramm variablenspeicher in aktuelle Variablen holt , verarbeitet und zurĂŒck poked hat man eine Schnittstelle.

    Mit SYS kann ich Routinen im Hauptprogramm (nennen wir es mal "unten" weil es bei 0400 starten soll)

    vom Raumcode (nenn es oben , ab $8000) anspringen ..

    Also quasi zwei komplett getrennte Programme, die ĂŒber irgendeinen Puffer (oder direkt) sich austauschen? Das kann man bestimmt zusammenhacken, aber schön wird das nicht.

    Zitat

    Aber wie ist das mit der RUNTIME ? ist die dann 2x im RAM ? einmal fĂŒr den Raumcode und einmal fĂŒrs Hauptprg ?

    oder verstricke ich mich dann mit Zeropageadressen wo deine Runtime fixe Werte braucht die dann durcheinanderrutschen ?

    Ja, dann hĂ€ttest du zwei Runtimes. Allerdings nicht komplett identisch, weil ja immer nur der Teil der Runtime tatsĂ€chlich vorhanden ist, der vom jeweiligen Programm auch benutzt wird. Verstrickungen mit der ZP sehe ich aktuell nicht. Ich lege da temporĂ€r Dinge rein, aber nichts, was ĂŒber den Programmlauf bestand hĂ€tte...meine ich jedenfalls...

    Zitat

    Es mĂŒsste eine Commandline option geben welche den Programmstart fĂŒr "oben" auf $8000 setzten könnte .

    Gibt es das ?

    Ja, -progstart

    Zitat

    Ist halt mĂŒhsam herauszufinden wo im Hauptprogramm spĂ€ter welche variablen gespeichert sind

    auch die Adressen der Zeilennummern im Hautprogramm sollten irgendwo sein

    FĂŒr das aufrufende Programm ist das ganz einfach, weil du ĂŒber den Inline-Assembler direkt auf die Variablen zugreifen kannst. Schwieriger ist es zu erreichen, dass die dann im aufgerufenen Programm gesetzt werden. WĂŒrde ich nicht direkt machen, sondern ĂŒber einen Puffer irgendwo im Speicher. Dann hat man auch kein Problem damit, dass ein normaler Start eines compilierten Programmes erstmal die Variablen zurĂŒcksetzt.

    Zitat

    Gibt der Assembler / Linker eigentlich irgendwo diese Daten in einer Labelliste.txt aus ?

    Wenn du -generatesrc=true setzt, bekommst du eine .dbg-Datei, in der die Adressen stehen.

    Das wÀre allerdings alles schon ziemlich schrÀg...:D

    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.

  • Naja dass ein in C++ (oder auch in irgendeiner beliebigen anderen Sprache) geschriebenes Programm am Ende immer noch von einer CPU ausgefuehrt wird, welche natuerlich JUMP opcodes verwendet, ist ja klar. Aber das heisst ja nicht, dass der Quellcode ebenfalls GOTOs verwendet - letztendlich wurden ja Programmiersprachen ueberhaupt deshalb erfunden, dass man bequemer und sauberer programmieren kann als wenn man alles direkt in Assembler machen muesste.

    Alle(?) modernen Sprachen haben einen strukturierten Kontrollfluss, d.h. es wird nur zwischen Blöcken (in C-Ă€hnlichen Sprachen zumeist mit { } markiert) hin- und hergesprungen. Das ist auch fĂŒr die Optimierungen, die moderne Compiler machen, essenziell. Ohne das bricht vieles zusammen, weil man die Bitte melde dich an, um diesen Link zu sehen. (haben nichts mit der Sprache BASIC zu tun) nicht mehr sinnvoll finden kann. BASIC V2 hat keinen strukturierten Kontrollfluss...erstens weil GOTO und zweitens weil FOR-NEXT wie ein Block aussieht, aber ĂŒberhaupt keiner ist. In BASIC V2 gibt es nur einen "Block", der wirklich als fest angesehen werden kann und das ist das, was hinter dem THEN in derselben Zeile steht. Alles andere ist Kraut und RĂŒben. Wenn man einen optimierenden Compiler dafĂŒr bauen will, ist das ein Problem...;)

    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.

  • Wenn ein Spiel auf nem c64 abstĂŒrzt, werden vermutlich keine Menschen sterben. Wenn das Steuerungsprogramm eines Atomkraftwerks versagt, oder die Software in einem ABS SteuergerĂ€t abstĂŒrzt, sieht das schon ganz anders aus. Gibt da Mengen an Beispiele, wie Luftfahrt, Raumfahrt, Waffensysteme uvm. Da will man halt schon 99,999% Gewissheit haben, dass die Software tut, was sie soll.

    und ist das so ?

    Wie war das letzen Sommer als in Deutschland 30% der WindrÀder nach einem "Router Firmware Update" stillstanden :wink:

  • Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    nicht der orig. Artikel - find ich grad nicht - aber es zeigt die Richtung in die es geht....

    Normalerweise kehren wir solche Sachen unter dem Teppich (TM)

    Aber wenn es auffÀllt kommt mal eine kurze Mitteilung auch an die APA ....

    Vor einigen Tagen ist in Wiener Neustadt (47.106 Einwohnern) komplett der Strom ausgefallen und die Firma sucht nach der Ursache.

    Hat aber keine technisches Problem gefunden.

  • Naja dass ein in C++ (oder auch in irgendeiner beliebigen anderen Sprache) geschriebenes Programm am Ende immer noch von einer CPU ausgefuehrt wird, welche natuerlich JUMP opcodes verwendet, ist ja klar. Aber das heisst ja nicht, dass der Quellcode ebenfalls GOTOs verwendet - letztendlich wurden ja Programmiersprachen ueberhaupt deshalb erfunden, dass man bequemer und sauberer programmieren kann als wenn man alles direkt in Assembler machen muesste.

    Alle(?) modernen Sprachen haben einen strukturierten Kontrollfluss, d.h. es wird nur zwischen Blöcken (in C-Ă€hnlichen Sprachen zumeist mit { } markiert) hin- und hergesprungen. Das ist auch fĂŒr die Optimierungen, die moderne Compiler machen, essenziell. Ohne das bricht vieles zusammen, weil man die Bitte melde dich an, um diesen Link zu sehen. (haben nichts mit der Sprache BASIC zu tun) nicht mehr sinnvoll finden kann. BASIC V2 hat keinen strukturierten Kontrollfluss...erstens weil GOTO und zweitens weil FOR-NEXT wie ein Block aussieht, aber ĂŒberhaupt keiner ist. In BASIC V2 gibt es nur einen "Block", der wirklich als fest angesehen werden kann und das ist das, was hinter dem THEN in derselben Zeile steht. Alles andere ist Kraut und RĂŒben. Wenn man einen optimierenden Compiler dafĂŒr bauen will, ist das ein Problem...;)

    Ja, im Grunde ist das ja letztendlich auch der "Scope", innerhalb dem bestimmte Namen usw ihre Gueltigkeit haben. Und ein wesentlicher Punkt bei der strukturierten Programmierung ist halt auch, dass man nachvollziehen kann, welchen Zustand ein Programm hat oder haben kann, wenn ein bestimmter Block / eine bestimmte Funktion aufgerufen wird. Bei einem GOTO, das an eine beliebige Stelle springen kann, gibt es halt null Kontrolle darueber, in welchem Zustand sich das Programm gerade befindet.

    - 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.

  • Bitte melde dich an, um diesen Link zu sehen.
    Die FLI Bilder in meinem Prototyp verbrauchen so sauviel Speicher das ich keinen zusammenhÀngenden RAM frei hab um das Compilat rein zu bekommen.

    Deshalb wollte ich nachlade Code haben fĂŒr die RĂ€ume.

    Ich könnte kotzen !

    Ohne FLI gehts aber sieht halt dann wieder nach 1980 aus.... MCI is halt mĂŒhsam.

    Drazlace Interlace ist schön flimmert aber zu viel fĂŒr ein Adventure...

  • Man KANN aber natĂŒrlich in BASIC V2 strukturierten Kontrollfluss einhalten, siehe z.B. Bitte melde dich an, um diesen Link zu sehen. - dort sind GOTOs drin, aber alle lassen sich auf do...while etc. abbilden, und so lĂ€sst sich entsprechender Code auch automatisiert z.B. zu JavaScript umformen, wobei alle GOTOs ersetzt werden. Das Ergebnis in dem Beispiel: Bitte melde dich an, um diesen Link zu sehen.

    Unterprogramme mit lokalen Variablen und echten Parametern gibt's aber dadurch auch nicht - die sind der eigentliche Knackpunkt und Mangel bei BASIC V2.

    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • so nett könnte es sein, aber hier hat man keine Sprites mehr ĂŒbrig die man aber haben sollte fĂŒr Cursor und GegenstĂ€nde im Bild...

    Raster IRQ ist auch noch nicht eingerichtet (FĂŒr Text Splitscreen)

    Basic und diese Bilder zu verbinden wĂ€re echt top. Bilder hĂ€tte ich extern im REU. Eigentlich mĂŒsste das compilat komplett im REU Laufen damit der C64 nur fĂŒr Graphik und Sound frei wĂ€re

    und einigen Helper Libs fĂŒr den Spielverlauf...

  • Man KANN aber natĂŒrlich in BASIC V2 strukturierten Kontrollfluss einhalten...

    Ja, du als Mensch kannst das tun. Und wenn du eine bestimmte Struktur erwartest, kannst du die auch entsprechend umsetzen, klar. Aber automatisch fĂŒr alle möglichen Programme die Blöcke verlĂ€sslich finden und dabei nicht in einer Situation zu enden, wo sie nichts mehr bringen, weil sie zu klein sind...viel Spaß dabei!

    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 programmiert BASIC? Hm, ich hab das in den letzten Jahren genau EIN mal gemacht, fĂŒr das erste Weihnachts-Heftchen. Es sollte ein Spiel werden, ich wollte Musik, heraus kam dann also was mit Musik-Player in Maschinencode (aber immerhin der Rest wirklich in BASIC, inklusive der Daten fĂŒr die Musik). Hab dabei mal wieder festgestellt, das ist einfach nichts fĂŒr mich. Unpopular Opinion: In 6502 machine code (natĂŒrlich mit Hilfe eines gescheiten Assemblers) kann man strukturierter programmieren als in BASIC :biggrin:

    Kurze Anmerkung zur GOTO-Diskussion: Wer C (nicht C++!) komplett ohne 'goto' programmiert, hat die Sprache nicht verstanden. Goto ist genau dann Murks, wenn es andere, klarere Kontrollstrukturen durch "Spaghetticode" ersetzt. Aber gerade fĂŒr (wie schon erwĂ€hnt) Error-Handling ist goto in C oft die beste und lesbarste Option.

    Edit: Die besondere (konzeptionelle) SchwĂ€che von C64 BASIC V2 ist gerade, dass es an diesen klareren Kontrollstrukturen deutlich mangelt fĂŒr eine Hochsprache.

    Einmal editiert, zuletzt von Zirias/Excess (19. Januar 2023 um 13:44)

  • was fĂŒr ein Weihnachts heft ? 64er wieder zurĂŒck ?

    Das von ZeHa, erste Ausgabe 2018

    das hier Bitte melde dich an, um diesen Link zu sehen.

    bzw Bitte melde dich an, um diesen Link zu sehen.

    - 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.

  • Interessant, Habe den Text Splitscreen in den FLI View eingebaut und die sprites gehen trotzdem ĂŒber den Text obwohl inder gleichen Zeile

    wo ich den Hires (d011/d018) umschalte auf C64 Rom Zeichensatz , ĂŒber den Text.

    D.h der DMA Spritesequenzer malt also noch seinen buffer zuende bevor er merkt das ich die Sprites auf Zeile 180 eigentlich schon abgeschalten habe..

    Nicht zum aushalten .... also schon einze zeile vorher die Sprites abdrehen- war ja klar das das wieder mĂŒhsam sein muss....