Schleife für Bildschirmfüllen 128x

Es gibt 20 Antworten in diesem Thema, welches 1.975 mal aufgerufen wurde. Der letzte Beitrag (26. Februar 2024 um 16:14) ist von JeeK.

  • Hallo,

    ich habe mir vorhin

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

    angeschaut . Und mir folgendes gebaut. Ich wollte nur mal testen wie ich den Bildschirm in 240er Blöcken füllen kann.

    So sieht es jetzt aus.

    Ich wollte das ganze 10-128 mal in einer Schleife laufen lassen und dabei den Accumulator immer +1 nehmen. Sodass, ich bei LDA +1 (oder wenn LDABitte melde dich an, um diesen Link zu sehen. ist dann)

    Wie erhöhe ich den Accumulator ?

    Habe schon versucht eine übergeordnete Schleife mit Y zu bauen und INY zu benutzen...aber der BNE Befehl benutzt Y.

    Habe schon einiges gemacht in Assembler. Aber ich stehe total auf dem Schlauch. Hatte gerade nach Jahren wieder Lust auf Coden...und schon steckt man wieder fest.

    Ich wollte nur mal sehen, wie schnell der Bildschirm gefüllt wird mit den Zeichen A-Z. Und später auch mit Sonderzeichen usw.

    Wollte da mal rumspielen.


    Ich hoffe, mir kann jemand kurz dabei Helfen.

    Lg Martin

  • Wie erhöhe ich den Accumulator ?

    INC / INX / INY mit STA / STX / STY ??? ;)

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Beispiel:

    Bitte melde dich an, um diesen Link zu sehen.

  • Hi Parser. Die kenne ich alle. Mir fällt nun aber leider nichts ein.

    Außer A irgendwo (speicheradresse 49152 oder Zerro) abspeichern. Dann nach loop1 X irgendwo (z.B. 49153 oder Zerro) speichern. Dann A mit LDY laden, dann INY und dann Y speichern mit STY 49152 und

    wieder LDY aus 49153 holen ?

    Kommt mir sehr umständlich vor. Da wird es doch was einfacheres geben ? Aber ich stehe auf dem Schlauch.

    Ich habe Angst, dass ich Assembler wieder für Jahre liegen lasse aus Frust.

    Lg

    ok. Nachtrag mit INC könnte ich direkt in 49152 arbeiten. mmh interessant

  • Habe mal dies versucht. Nun müsste ich mit JMP an den Anfang springen. Und am Ende frage ich einfach 49152 ab und wenn der Inhalt über 100 ist wird abgebrochen.

    Derzeit sieht es so aus. Ohne Wiederholung.

  • Moin. Habe mein Versuch nun gelöst.

    Was besseres ist mir nicht eingefallen.

    Lg Martin

    Danke Parser. Habe mir den Link angeschaut.

  • Ich wollte nur mal testen wie ich den Bildschirm in 240er Blöcken füllen kann.

    Du meinst wohl 250er-Blöcke?


    Ich wollte nur mal sehen, wie schnell der Bildschirm gefüllt wird mit den Zeichen A-Z.

    Vorschlag:

    Viel sehen wirst du allerdings nicht. :) Wenn man den kleinen auskommentierten wait-Block mitcompiliert, wird es IMO etwas interessanter.

    Bitte melde dich an, um diesen Link zu sehen. - Ratespiel • Bitte melde dich an, um diesen Link zu sehen. - BASIC-Erweiterung • Bitte melde dich an, um diesen Link zu sehen. - Sprite-Editor • Bitte melde dich an, um diesen Link zu sehen. - Zeichensatz-Editor Bitte melde dich an, um diesen Link zu sehen. - 2048 Blöcke

  • Wie erhöhe ich den Accumulator ?

    Im Gegensatz zu X (INX) oder Y (INY) musst Du das ein bischen anders machen:

    CLC

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

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

  • Ja, LDY Bitte melde dich an, um diesen Link zu sehen. statt LDA, das kannst du mit INY erhöhen. Dann für die Nutzung in STA(),x per TYA in den Akkumulator kopieren.

    Oder selbst modifzierender Code, das ist am flexibelsten, aber auch am wenigsten elegant:

    (geht auch ohne Selbstmodifizierung, ist dann halt noch mal ein Abstraktionsschritt dazwischen - hab's deswegen erst mal Selbstmodifizierend gelassen)

  • Code
      clc
      adc #1

    oder

    Code
    iny
    tya

    Das CLC muss man übrigens nur ganz zu Beginn machen.

    Ist jetzt wirklich gewünscht den Schirm jeweils ein 1/4 mit einem anderen Zeichen zu füllen oder soll nun immer der gesamte Schirm mit einem Zeichen gefüllt werden?

    Das Beispiel von goloMAK, das den gesamten Schirm füllt, könnte man auch ohne die Speicherstelle $02 zu verwenden

    Moin. Habe mein Versuch nun gelöst.

    In dieser Variante kann man sich auch die Zuhilfenahme von Speicherstelle 49152 sparen, indem man das direkt mit Y führt.
    Die Schleife kann man in eine dekrementierende umwandeln, da spart man sich die Abfrage auf den Endwert. Da mit einem Wert >127 gearbeitet wird, verwenden wir einen Indexwert in X mit 1 ... Endwert (um 1 erhöht) und verwenden als Kompensation dafür STA basis-1,X um dann bequem nach dem DEX mit BNE die Schleife zu bilden. X läuft dann von 240 bis 1 (vorher 239 bis 0).

    Einmal editiert, zuletzt von JeeK (24. Februar 2024 um 13:07) aus folgendem Grund: Korrektur 2. Beispiel (241 -> 240).

  • Ich danke euch für eure Mühe.

    Bitte melde dich an, um diesen Link zu sehen.

    Ich bekomme das leider nicht zum Laufen in C64 Studio es gibt 19 Fehlermeldungen. Habe aber den Ansatz verstanden. Arbeite mich da noch rein.

    Muss erstmal kapieren wie man in C64 Studio so Tables macht. Habe dazu gestern nichts mehr gefunden.

    Bitte melde dich an, um diesen Link zu sehen.

    Am Ende ist nur ein Zeichen zuviel und es läuft unendlich . Das bekomme ich raus. Welche Adressen kann man denn in der Zro-Page nutzen 02 war es glaube ich und Datasettenpuffer. Gibt es da noch eine Liste ?

    Lg Martin

  • Oder zwischendurch bei Bedarf ein JSR auf

    tay

    iny

    tya

    rts

    Gruß & Kuss zum Wochenschluss,
    Holy Moses/Role

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um dieses Medienelement zu sehen.

  • Am Ende ist nur ein Zeichen zuviel und es läuft unendlich . Das bekomme ich raus. Welche Adressen kann man denn in der Zro-Page nutzen 02 war es glaube ich und Datasettenpuffer. Gibt es da noch eine Liste ?

    Stimmt, hab's im Listing korrigiert. Das muss LDX Bitte melde dich an, um diesen Link zu sehen. heißen.

    Terminiert nicht? Den Code abgetippt oder kopiert? Wenn das CPY Bitte melde dich an, um diesen Link zu sehen. am Ende nicht stimmt, wird es nicht enden ...

    02 ist nicht in Verwendung.

    $FC, $FD, $FE, $FF sind auch auf jeden Fall unbelegt.

    Sonst hängt es ab, welche ROM-Routinen man gedenkt zu verwenden, da diese gewisse ZP-Stellen verändern und dann die eigenen Werte überschrieben werden.

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

  • Habe mir nun mal die Zeropage auf den Bildschirm gelegt per IRQ.

    Und etwas mit der Adressierung rumgespielt. C64 Studio holt sich nach Rebuild

    die Adressen dann aus (in meinem Beispiel IRQ). Funktioniert das so auch bei Bitte melde dich an, um diesen Link zu sehen. tables ?

    Habe verschiedene Tasten gedrückt mit mit Cursor rumgelaufen. Recht interessant sich das anzuschauen.

    NACHTRAG: Habe CPX rausgeworfen

  • Das CLC muss man übrigens nur ganz zu Beginn machen.

    Sollte man vor dem ADC eigentlich immer machen.

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

  • Das CLC muss man übrigens nur ganz zu Beginn machen.

    Sollte man vor dem ADC eigentlich immer machen.

    Wenn man Platz und Zeit zu verschenken hat - warum nicht?

    Bitte melde dich an, um diesen Link zu sehen. - Ratespiel • Bitte melde dich an, um diesen Link zu sehen. - BASIC-Erweiterung • Bitte melde dich an, um diesen Link zu sehen. - Sprite-Editor • Bitte melde dich an, um diesen Link zu sehen. - Zeichensatz-Editor Bitte melde dich an, um diesen Link zu sehen. - 2048 Blöcke

  • Wenn man Platz und Zeit zu verschenken hat - warum nicht?

    Wenn man ganz sicher aussschließen kann, dass das Carry gesetzt wird, kann man es ja mal versuchen. Ein

    INX

    BNE

    setzt aber das Carry, wenn x=0 wird. Im Zweifel wird halt 2 statt 1 addiert...

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

  • Mein 2. TESTPROGRAMM für das ich das alles gemacht habe, kopiert das FARBRAM auf den BILDSCHIRM (nur die ersten 255 Bytes)

    Und ich konnte mir endllich mal anschauen, wie die Bits 4-7 undefiniert rumwabern.

    Nimmt man AND #$00001111 in den CODE (Zeile 23) auf, dann wird es ruhig auf dem Bildschirm.

    Habe das mit dem FARBRAM 35 Jahre nicht gewußt und meine Spiele ohne Farbe versehen.

    Ich danke euch für die Hilfe.

    Ich kann nun einiges für mein Spiel durchtesten.

    Werde den Inhalt des FARBRAMs mal testweise wegspeichern (Vielleicht testweise nach 49152 bis 49152+1000). Gibt es dafür einen besseren Bereich ? Auch in hinsicht wegen BANK-Switching ?