Це відео не доступне.
Перепрошуємо.

Welche Zeichenpositionierung ist die schnellste auf dem C64

Поділитися
Вставка
  • Опубліковано 6 сер 2024
  • Es steht ein neuer Benchmark an und zwar teste ich in diesem Video, welche der drei folgenden Möglichkeiten der Positionierung von Zeichen auf dem C64 Bildschirm am schnellsten sind:
    - Direktes POKE in den Bildschirmspeicher
    - Cursorpositionierung mittels POKE und Systemroutine
    - PRINT mit Steuerzeichen
    Dem ganzen liegt ein X/Y Koordinatensystem zu Grunde, ich werden im Laufe des Videos aber auch andere Möglichkeiten testen.
    Viel Spaß!
    ===== Supporte mich und meinen Kanal!
    Kanalmitgliedschaft: / @c64
    Meine Kaffeekasse: streamelements.com/n3rdroom/tip
    Der N3rdroom Shop: shop.n3rdroom.de
    ===== Inhalt dieses Videos
    0:00 Möglichkeiten der Positionierung von Zeichen
    0:31 Direktes Poken in den Bildschirmspeicher
    2:22 Cursorpositionierung mit POKE und SYS58732
    5:48 PRINT mit Cursor Steuerzeichen
    9:17 Verschiedene Varianten und Optimierungen
    viel Spaß!
    ===== Links zu weiteren Inhalten
    Web: www.n3rdroom.de
    Discord: / discord
    Twitch: twitch.n3rdroom.de
    Instagram: / n3rdroom
    TikTok: / n3rdroom
    Facebook: / n3rdroom
    #C64 #Commodore #C64Studio #Commodore64 #programmieren

КОМЕНТАРІ • 13

  • @C64
    @C64  Місяць тому

    6:40 Ich habe hier einen Fehler gemacht und ein Steuerzeichen für die X-Positionierung zu wenig in den String gepackt. Das führt später zu dem Ausgabefehler... 😅🙈

  • @sengir3937
    @sengir3937 28 днів тому +3

    Die PRINT-Version kannst du effizienter gestalten:
    1. Das Home-Zeichen muss natürlich das erste Zeichen der PX$-Zeichenkette sein, heißt natürlich auch, dass die erste Spalte dann 1 ist.
    2. Mehrere Ausgaben in einer einzelnen PRINT-Anweisungen sollten nicht durch unnötige Zeichen wie + oder ; verlangsamt werden, direkt hintereinander schreiben.
    3. Das letzte Zeichen einer PRINT-Anweisung sollte ein ; sein, sonst wird noch eine Zeilenumbruch ausgeführt, was Zeit benötigt.
    4. Spar dir PX$ sondern nutze TAB(X) zur direkten Positionierung
    Resultat: 49 Jiffys bei 60 Durchgängen und x=15, y=6 statt deinen 70. PRINTLEFT$(PY$,Y)TAB(X)"B"; und PY$="{home}.."
    Beim Poken in den Bildschirmspeicher musst du natürlich noch berücksichtigen, dass du die Zeit verdoppelst, wenn du auch die Farbe setzen musst, außerdem bist du auf ein einzelnes Zeichen beschränkt.
    Du kannst kein Zeichen an die letzte Bildschirmposition printen, da dann ein automastischer Zeilenvorschub stattfindet.

    • @C64
      @C64  28 днів тому

      PRINT Ausgabe in C64 BASIC optimieren #c64 #retro #programmieren

  • @astraton2001
    @astraton2001 28 днів тому +1

    Basic auf dem C64. hab ich ja schon ewig nicht mehr gesehen.
    Und jetzt das ganze mal in Assembler.

  • @lararaulf9968
    @lararaulf9968 28 днів тому +2

    Wenn du hinter den Printbefehl in Zeile 320 und Zeile 420 ein ";" packst, so müsste dies schneller gehen, weil der Basic-Interpreter dann kein "Enter" auführen muss.

    • @C64
      @C64  28 днів тому +1

      Wirklich schneller scheint es so nicht zu laufen, ich nehme an, weil der Interpreter dann das ; als zusätzliches Zeichen interpretieren muss. 🤔
      ua-cam.com/users/shortshU2L07fcgUw

  • @captainoffuture4488
    @captainoffuture4488 27 днів тому +1

    Mutmaßlich noch schneller geht es, wenn man die Bildschirmadresse gleich in Assembler ausrechnet. Ich hab das mal in SMON gemacht. Die Syntax lautet: SYS 49152, X, Y, CODE
    Da man im Assembler nicht direkt die Y-Koordinate mit 40 multiplizieren kann rechne ich stattdessen die Bildschirmposition so aus: P = 32*Y + 8*Y + X + 1024
    Quellcode:
    jsr aefd ; Komma einlesen
    jsr b79e ; Bytewert einlesen (steht im X-Register)
    stx fb ; X-Koordinate zwischenspeichern
    ; Bildschirmposition berechnen
    jsr aefd
    jsr b79e ; Y-Koordinate einlesen
    lda #00
    sta fd
    txa
    asl
    asl
    asl
    tay ; Y-Koordinate * 2 * 2 * 2 im Y-Register sichern
    asl
    rol fd ; etwaigen Übertrag im High-Byte sichern
    asl
    rol fd
    sta fc ; FC/FD hat nun das Ergebnis aus Y-Koordinate * 32
    tya ; Vorherige Sicherung zurückholen ...
    clc
    adc fc ; ... und aufaddieren
    sta fc
    lda fd
    adc #04 ; 1024 aufaddieren
    sta fd
    jsr aefd
    jsr b79e ; Bildschirmcode einlesen
    txa
    ldy fb ; X-Koordinate wieder auslesen
    sta (fc),y ; Code in den Bildschirm schreiben
    rts

  • @wizball6502
    @wizball6502 25 днів тому +1

    Ein klein wenig schneller kriegt man es so hin (man spart damit den Overhead des SYS Befehls):
    POKECY,Y:PRINT:POKECX,X:PRINT"A";
    Ich war aber noch erstaunt, wie langsam die TAB() Funktion ist. Der zusätzliche Poke ist schneller als ein PRINTTAB(X)"A";

  • @arminschnee865
    @arminschnee865 28 днів тому +2

    So ein kleines Kindheitstrauma von mir: mich würde interessieren, wie man das richtige Timing für left/right borderless hinbekommt.
    Oben/Unten ist durch den vertical blanking IRQ ja recht simpel gewesen, aber ich habe mich damals sehr schwer getan, den Rand links und rechts zu entfernen.
    Klar - habe ich heute den Assembler Code nicht mehr zur Hand, kann mich aber gut erinnern wie ich versucht habe, das Timing mit einer Anzahl NOP's zu treffen.
    Das funktionierte in meinem Fall leider nur teilweise und fransig. Stellenweise war der Rand weg, stellenweise nicht.
    Vielleicht hat hier jemand einen Source oder einen kleinen Technik-Guide wie der Trick funktioniert - damit ich heute mit dem Thema abschließen kann xD ;)

    • @C64
      @C64  28 днів тому

      Da kann ich Dir leider nicht weiterhelfen, bin was solche Techniken angeht ein totaler Anfänger. 😅

  • @aries_code9615
    @aries_code9615 27 днів тому +1

    integer variablen verwenden, also cx%, cy% und cp%, usw, dann fällt die fließkomma wandlung zur laufzeit weg

    • @C64
      @C64  27 днів тому +1

      Aber nur wenn man sie als Feldvariable nutzt. Ob das dann aber unbedingt noch schneller wäre müsste man mal testen. Ich hab mal in einer Schleife Integer Variablen getestet. Das lief sogar unterm Strich langsamer, da das % Zeichen mit interpretiert werden musste. 🤔

    • @aries_code9615
      @aries_code9615 26 днів тому

      @@C64 next try: anfangsvektor der feldvariablen auf 1024 setzen und das indexing für dich arbeiten lassen