Heute so gecodet...

Es gibt 2.379 Antworten in diesem Thema, welches 480.637 mal aufgerufen wurde. Der letzte Beitrag (1. November 2025 um 13:53) ist von Unseen.

  • Die globalen Variablen in meinem Z80 Disassembler von einer statischen Klasse zu Properties geändert, bzw. bin noch dabei.

    Habe mich an diesem Bitte melde dich an, um diesen Link zu sehen. orientiert. Bisher scheint das gut zu funktionieren. :puhh:

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Eigentlich wird BCD nach binär umgewandelt und nicht in eine Hexadezimaldarstellung. Die Binärzahl könnte man dann dezimal oder hexadezimal ausgeben, aber grundsätzlich liegt sich mal als binärer wert vor.

    adc #$03

    Da muss man bisserl vorsichtig sein. Ich seh vorher keine Aktion, die das Carry-Flag irgendwie auf einen definierten Wert setzt. Daher besser vorher explizit ein CLC.

    Wenn adctab eigentlich ohnehin zur Assemblierungszeit feststeht, dann kann man doch gleich

    lda #<(adctab+3)

    sta tmp

    machen und muss das nicht zur Laufzeit berechnen. Dabei sollte man nur sicherstellen (durch bedingte Assemblierung), dass <adctab kleiner $FD ist, sonst hat man einen 8-Bit überlauf der tab_l-Adresse.

    Eventuell könnte man sich überlegen, das Ergebnis gleich in 16 Bit abzulegen (falls man es braucht), damit man dann einen BCD-Werte bis zu 999 vollständig umwandeln kann.

    Also etwa mit

    Code
      adc (tab_l,x)
      sta result
      bcc +
      inc result+1
    +

    weiter oben muss man freilich

    Code
       lda #$00
       sta result
       sta result+1

    machen.

  • Da muss man bisserl vorsichtig sein. Ich seh vorher keine Aktion, die das Carry-Flag irgendwie auf einen definierten Wert setzt. Daher besser vorher explizit ein CLC.

    Wenn adctab eigentlich ohnehin zur Assemblierungszeit feststeht, dann kann man doch gleich

    lda #<(adctab+3)

    sta tmp

    machen und muss das nicht zur Laufzeit berechnen. Dabei sollte man nur sicherstellen (durch bedingte Assemblierung), dass <adctab kleiner $FD ist, sonst hat man einen 8-Bit überlauf der tab_l-Adresse.

    Ja, richtig, lda #<(adctab+3) ist da eine bessere Lösung. Der Überlauf lässt sich auch leicht mit der Positionierung im Speicher verhindern, dann kann man die Behandlung für den Überlauf einsparen.

    Ich brauche nur 0-255, daher habe ich das Hi-Byte raus gelassen. Damit könnte man auch gleich bis 65535 addieren.

    Eigentlich wird BCD nach binär umgewandelt und nicht in eine Hexadezimaldarstellung. Die Binärzahl könnte man dann dezimal oder hexadezimal ausgeben, aber grundsätzlich liegt sich mal als binärer wert vor.

    Ich gehe immer von der Darstellung im Programm aus, damit ich mich später daran erinnere, wozu ich es verwenden wollte. Ich drösel das nicht jedes mal bis ins Atom auf. Ist nur ein Schnipsel Source-Code und kein Eintrag fürs Lehrbuch.

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Bin grad' dabei mein HNF-Projekt zu Ende zu bringen. Dort gibt es zwar nur wenig "Code" und das ist auch nur Python, dafür wird das Ergebnis sicher lustig... :D
    Bitte melde dich an, um diesen Link zu sehen.

  • Mal die Änderungen, die seit einem Jahr auf meiner Platte schimmeln als neue cc1541-Version released: 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.
    ────────────────────────────────────────────────────────────

  • Ich gehe immer von der Darstellung im Programm aus, damit ich mich später daran erinnere, wozu ich es verwenden wollte. Ich drösel das nicht jedes mal bis ins Atom auf. Ist nur ein Schnipsel Source-Code und kein Eintrag fürs Lehrbuch.

    Mag sein, dass ich hier falsch verstanden wurde.
    Von einer Hex-Darstellung war ja nichts zu sehen, sondern nur von Konversion in einen Binärwert. Die würde ja noch einen weiteren Schritt benötigen, der hier nicht vorkommt.
    Natürlich kann man zu einem Apfel auch Obstsalat sagen, damit ich weiß, dass der Apfel für einen Obstsalat gebracht wird. Nur das weiß man dann natürlich nur selber. Wenn man Programme nicht nur für sich selbst macht oder Teile davon mit anderen (zwecks Diskussion) teilt, ist eine Abweichung von einer gemeinschaftlichen Auffassung mühsam. Es hat eigentlich auch nichts mit dem Aufdröseln bis ins kleinste Atom zu tun oder mit einem Lehrbuchanspruch. Es macht die Sache einfach für andere schwer verständlich und irritierend. Es ist ja nur ein gut gemeinter Ratschlag, der keineswegs als persönlichen Angriff auf den eigenen Stil gewertet werden sollte.

  • Das ist eigentlich nur die übliche Formulierung. Findet man hier: Bitte melde dich an, um diesen Link zu sehen. und überall so. Wenn man sich schon Jahrzehnte damit beschäftigt hatte, braucht man keine Krampfberatung zu den Grundlagen. Das nervt nur und ist überflüssig.

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Das ist eigentlich nur die übliche Formulierung.

    Nein.

    Wenn man sich schon Jahrzehnte damit beschäftigt hatte,

    ...ist das immer noch nicht zu spät, um dazu zu lernen.

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • Für einen Informatiker mit Compiler ist das natürlich schwierig. :) Letztendlich ist das Resultat immer ein Binärwert im Assembler. Daher verstehen es 99 ASM-Coder und 1 Informatiker (gut 2) eben nicht.

    If we're evil or divine - we're the last in line. - Ronnie James Dio (1984) -
    Bitte melde dich an, um diesen Link zu sehen. | Bitte melde dich an, um diesen Link zu sehen. |

  • Endlich mal wieder etwas Zeit übrig gehabt!

    Wie bereits erwähnt: Inverted chars nehmen, Sprites in den background, gerne auch multicolot mit x-expanded. Da gibt es keine Probleme.

    Und um das zum Abschluss zu bringen... Claus rayden

    Was jetzt? Mich in Scroller Featueritis verlieren? Stable Raster? Vorschläge?

  • Ich hatte vor längerer Zeit mit Multithreading experimentiert. Das klappt aber nicht richtig bzw. die CPU wurde nicht wirklich belastet. Hab das ganze mal umgestrickt. Die Berechnungen laufen nun in einem externen Programm, welches mit den verschiedenen Parametern 16x aufgerufen wird. Nun liegt die Auslastung der CPU vom 16-Kern Threadripper 2950 bei 65-75%. Wenn gleich alles klappt, dann sollte ein Prozess bei der Berechnung das passende finden und das Ergebnis in eine Datei schreiben. Das Hauptprogramm prüft alle paar Sekunden ob diese Datei angelegt ist. Wenn ja, dann werden alle Berechnungsprozesse gekillt.

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Endlich mal wieder etwas Zeit übrig gehabt!

    Wie bereits erwähnt: Inverted chars nehmen, Sprites in den background, gerne auch multicolot mit x-expanded. Da gibt es keine Probleme.

    Und um das zum Abschluss zu bringen... Claus rayden

    Was jetzt? Mich in Scroller Featueritis verlieren? Stable Raster? Vorschläge?

    Ist halt die Frage, was Du erreichen willst. Anfangen, beeindruckende Demos zu schreiben? Dann kann es nicht schaden, weitere Demoeffekte auszuprobieren (Stable Raster etc., codebase64 ist eine gute Quelle). Oder ein Spiel mit Scrolling schreiben? Dann sind andere Dinge wichtiger: eine Tile-Engine ist nicht ohne, Sound-FX etc. auch nicht.

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

  • Ich hatte vor längerer Zeit mit Multithreading experimentiert. Das klappt aber nicht richtig bzw. die CPU wurde nicht wirklich belastet. Hab das ganze mal umgestrickt. Die Berechnungen laufen nun in einem externen Programm, welches mit den verschiedenen Parametern 16x aufgerufen wird. Nun liegt die Auslastung der CPU vom 16-Kern Threadripper 2950 bei 65-75%. Wenn gleich alles klappt, dann sollte ein Prozess bei der Berechnung das passende finden und das Ergebnis in eine Datei schreiben. Das Hauptprogramm prüft alle paar Sekunden ob diese Datei angelegt ist. Wenn ja, dann werden alle Berechnungsprozesse gekillt.

    Du hast jetzt 16 Threads, die jeweils auf 1 externes Programm warten? Was war das Problem mit 16 Threads die selbst rechnen?

  • Du hast jetzt 16 Threads, die jeweils auf 1 externes Programm warten? Was war das Problem mit 16 Threads die selbst rechnen?

    Nein. Ich haben ein GUI-Programm, welches ein externes Konsoleprogramm 16x als eigenen Prozess startet.

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Du hast jetzt 16 Threads, die jeweils auf 1 externes Programm warten? Was war das Problem mit 16 Threads die selbst rechnen?

    Nein. Ich haben ein GUI-Programm, welches ein externes Konsoleprogramm 16x als eigenen Prozess startet.

    Ach komm.... das geht doch schöner. Soll ich Dir bisserl helfen?

    Die BackgroundWorker Klasse kennst Du?

  • Ach komm.... das geht doch schöner. Soll ich Dir bisserl helfen?

    Nö, nicht nötig. Mir geht es nicht um Schönheit beim Coden, sondern das meine Experimente funktionieren.

    Die BackgroundWorker Klasse kennst Du?

    Ja. Auch Multithreading und ParalellFor. Hat bei mir alles nicht funktioniert. Wäre Cuda und Co. einfacher umzusetzen dann würde ich auch die GPU verwenden.

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • oobdoo Ich hab einfach mal bissl bei Euch mitgelesen. Ich lass einfach mal meinen Senf dazu da.

    Backgroundworker ist nicht schlecht, bei 16 Freds allerdings schwer handelbar.

    Von parallel.for halte ich inzwischen gar nicht mehr so viel, das nutzt nur was, wenn die Freds etwas rechnen und voraussichtlich relativ gleich fertig werden. Damit sind wir in der Tat schon wieder möglicherweise bei der GPGPU...

    Was ich noch ins Feld bringen möchte (weil ich nicht weiß, wie Du es umgesetzt hast), denn ich hatte das mal so gelöst: eine List(of Thread) machen, die 16 Threads starten und ab in die Liste. Und dann regelmäßig prüfen, ob alle fertig sind.

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

  • Damit sind wir in der Tat schon wieder möglicherweise bei der GPGPU...

    Ich verwende u.a. ein MD5. Dürfte schwer werden das auf einer GPU umzusetzen, was dann noch schneller als die eingebaute Version von Windows ist.

    denn ich hatte das mal so gelöst: eine List(of Thread) machen, die 16 Threads starten und ab in die Liste. Und dann regelmäßig prüfen, ob alle fertig sind.

    Ich bleibe erstmal bei meinen Prozessen. Das ist zwar ein Rumexperimentierprojekt, aber noch mehr Zeit ins Threading wollte ich nicht reinstecken.

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom:

  • Ich bleibe erstmal bei meinen Prozessen. Das ist zwar ein Rumexperimentierprojekt, aber noch mehr Zeit ins Threading wollte ich nicht reinstecken.

    Experimentieren ist immer gut :smile: Das war bei mir auch die einzige Methode, wie ich für mich damals die beste Lösung gefunden hatte. BTW, die TaskFactory ist auch nicht zu verachten. Aber kann man letztlich auch mit Threading vergleichen - rein vom Erstellen her.

    ...und dann hat man was gefunden, dann funken die race conditions dazwischen und es geht doch nicht :wink: Hach ja, ich hab damals geflucht wie blöde, aber das Experimentieren mit allen möglichen Arten von Multithreading war, im Nachhinein betrachtet, eigentlich schon ganz lustig. Schade, dass ich eher selten zeitkritische Dinge code, die davon profitieren.

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

  • die TaskFactory ist auch nicht zu verachten

    Davon lese ich zum ersten mal etwas.

    ...und dann hat man was gefunden, dann funken die race conditions dazwischen und es geht doch nicht

    Ich vermute Du meinst damit Zwischenergebnisse? Da bin ich gerade dran am basteln, damit ich die Berechnungszeit verkürzen kann.

    Bitte melde dich an, um diesen Anhang zu sehen. :verehr: .: Mit Bitte melde dich an, um dieses Bild zu sehen.wäre das nicht passiert! :. :prof:  Bitte melde dich an, um diesen Anhang zu sehen.

    :syshack: .: Meine 3D-Drucker Teile auf :. Bitte melde dich an, um diesen Link zu sehen. :strom: