Schnelles Füllen und Löschen mit SYS

Es gibt 161 Antworten in diesem Thema, welches 22.429 mal aufgerufen wurde. Der letzte Beitrag (17. Oktober 2016 um 02:26) ist von BIF.

  • Löschen kann man nicht nur mit
    POKE, PRINT, STRINGS oder DIM, sondern es gibt auch eine ROM-Routine, im ROM-Basic-Code des DIM-Befehl, die man von Basic aus mit SYS anspringen kann.
    Damit kann man dann punktgenau und ebenso schnell löschen und füllen, wie mit DIM.


    Quellcode:
    10 :a=1024:b=1000:c=42:gosub30,fuell:end
    19:
    30 :rem---ram-fuell(a,b,c)
    31 :poke780,c:poke114,b/256:poke113,b-peek(114)*256
    32 :poke89,a/256+peek(114):poke88,a-int(a/256)*256:poke12,1:sys45762:return


    Schönen Gruß.

  • Hervorragend erklärt. Danke.

    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.

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?

  • Hervorragend erklärt. Danke.

    LOL

    Wenn etwas nicht klar ist, dann liegt es an Dir. Einfach mal wieder Deine Gedanken neu ordnen... Oder mal fragen, was nicht klar ist. :bgdev

    <Edit> Ein noch schnelleres LÖSCHEN, ganz ohne PEEK/POKE/SYS/PRINT und Assembler kann man durch kurzzeitiges Betätigen des kleinen Schalters rechts am Gehäuse erreichen. Einfach danach den Schalter wieder betätigen und die BASIC RAM Speicherstellen sind leer.

    ___________________________________________________________
    Meine Kreationen: 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.
    Avatar: Copyright 2017 by Saiki

    2 Mal editiert, zuletzt von syshack (29. September 2016 um 03:58)

  • Ich bezweifle, dass der Speicher dann leer im Sinne von durchgängig ==0 ist. Weil er es nach aus- und anschalten nicht ist.

    Wissen ist das einzige Gut, das sich beim Teilen vermehrt. Also seid vorsichtig damit!

  • Übrigens ist "a" die Startadresse, "b" die Blockgröße und "c" der Füllwert. Der POKE 12,1 dient dazu, die Routine rechtzeitig zu verlassen, bevor noch weiterer DIM-Kram gemacht wird. Zwischen der eigentlichen Füllschleife und diesem Abbruch passieren allerdings noch zwei Schreibzugriffe über den Vektor $5f/$60 mit den Offsets 2 und 3 - ich hab jetzt weder Zeit noch Lust, das näher zu untersuchen, aber wenn in $5f/$60 Mist stehen sollte, kann einem das den Tag versauen.
    Code siehe Bitte melde dich an, um diesen Link zu sehen. von $b2c2 bis $b2e7 (der Branch führt zu einem RTS).

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

  • Aber Mac, du kannst doch nicht in diesen Thread Sinn reinbringen in dem Du handfeste Fakten reinschreibst!
    :mitleid:
    Schäm dich mal bitte eine Runde. Danke.

    GREETINGS PROFESSOR FALKEN
    A STRANGE GAME.
    THE ONLY WINNING MOVE IS NOT TO PLAY.
    HOW ABOUT A NICE GAME OF CHESS?

  • Ich bezweifle, dass der Speicher dann leer im Sinne von durchgängig ==0 ist. Weil er es nach aus- und anschalten nicht ist.

    ich meine, das Thema hatten wir schon mal in einem Thread, was beim Einschalten passiert und was wie initialisiert wird.
    Es wird wohl mindestens 3x ein 0 Byte ab $0801 geschrieben, nehme ich an. :D

    ___________________________________________________________
    Meine Kreationen: 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.
    Avatar: Copyright 2017 by Saiki

  • Das waren mehr als drei Zeilen!
    Außerdem hat BIF ein Programm gepostet, das wirklich etwas macht, wenn man es Zeile für Zeile abschreibt und ausführt.

    Dass man von ihm erwartet, bei soviel Entgegenkommen auch noch die Parameter des Gosub-Aufrufs zu erklären ist dann schon etwas zuviel des Guten. :smile:

    Edit:
    Doof ist nur, dass nach Ausführen des Codes der LIST Befehl nicht mehr funktioniert falls man weiter entwickeln, testen, starten, beenden, neu starten, etc möchte.

    Edit2:
    Der Code macht doch keine Instabilität. Ich hatte es im Emulator nochmal probiert, seitdem geht es. Das Listing bleibt im Speicher, alles gut. Ich hatte auch mit den Parametern gespielt und evtl. einen Tippfehler drin. Wenn ich den Bereich nach 1024 mitgelöscht habe wundert mich nichts.

  • Dass man von ihm erwartet, bei soviel Entgegenkommen auch noch die Parameter des Gosub-Aufrufs zu erklären ist dann schon etwas zuviel des Guten.

    Das ist das Minimum was ich von einem Beitrag mit einem vermeintlich nützlichen Codesnippet erwarten kann:

    Beschreibung WAS es tut und
    mit welchen PARAMETERN füttere ich den Code (aka Bedienungsanleitung).

    Wenn man nicht mindestens das liefert, kann man es auch gleich lassen- wir sind hier doch nicht bei Rate mal mit Rosenthal.

    Was nutzt mir ein Snippet wenn ich nicht seine Bedienung kenne - oder sie mir erst erarbeiten muss.
    Stell Dir mal vor Dein Herd zu Hause hätte 5 Knöpfe und alle sind unbeschriftet und du müsstest erst mal den Herd aufschrauben und die Strippen verfolgen damit du weisst welcher Knopf was macht - das ist das gleiche Prinzip.

    Nun ist das Snippet hier nicht sonderlich komplex und damit ist es rasch nachzuvollziehen, aber sind wir mal ehrlich:
    BIF sonnt sich darin obfuskaten Code einzustellen, weil er sich damit wohl überlegen fühlt (auch wenn das totaler Käse ist).

    GREETINGS PROFESSOR FALKEN
    A STRANGE GAME.
    THE ONLY WINNING MOVE IS NOT TO PLAY.
    HOW ABOUT A NICE GAME OF CHESS?

  • Zu den Parametern:
    Das ich die Parameter nicht erklärt habe, könnte man natürlich als Formfehler betrachten.
    Die Funktion der Parameter wird allerdings durch die Demo erklärt.

    Zu den Schreibzugriffen:
    Stimmt tatsächlich, vor dem RTS werden noch zwei Bytes in den Speicher geschrieben.
    Dies geschieht offenbar immer in Speicherstelle 2/3.
    Mit :print peek(2)+peek(3)*256: kann man den Zeiger auslesen.
    Im Prinzip ungefährlich, sollte man aber wissen, falls man 2 und 3 im Programm benutzt.

    Schönen Gruß.

  • BladeRunner:
    Das Handbuch zum Trick fehlt allerdings noch.

    Zum Exklusiv-Preis von 20 Euro+Versand kannst du das allerdings bei mir bestellen.
    Selbstverständlich gewähre ich auch Mengenrabatt.

    Schönen Gruß.

  • Behalt dein Handbuch, ich nutze lieber gleich vernünftigen -nebenwirkungsfreien- Code, und wenn es schnell sein soll sowieso Assembler.
    Wenn ich einen Nagel in die Wand schlagen will nehm ich den Hammer und nicht einen labbrigen Fisch...

    GREETINGS PROFESSOR FALKEN
    A STRANGE GAME.
    THE ONLY WINNING MOVE IS NOT TO PLAY.
    HOW ABOUT A NICE GAME OF CHESS?

  • Stimmt tatsächlich, vor dem RTS werden noch zwei Bytes in den Speicher geschrieben.
    Dies geschieht offenbar immer in Speicherstelle 2/3.

    "offenbar"? Sehr schön. Mach den Aufruf mal nicht per SYS 45762, sondern per R = 45762:SYS R.

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

  • "BIFS 1001 Tips & Tricks - BASIC V2 in Word und Bit erklärt"

    Verlag: Hastenichtgesehen Verlach
    Autor: Prof. Dr. B. Ifinger
    1024 Seiten, 64 farbige, 128 sw Illustrationen

    Ja, für EUR 20.- würde ich das bestellen :thumbsup:

    ___________________________________________________________
    Meine Kreationen: 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.
    Avatar: Copyright 2017 by Saiki

  • 1000 Seiten, keine 1024. Das Buch ist sicher exakt einen BIF-Screen lang. :P

    GREETINGS PROFESSOR FALKEN
    A STRANGE GAME.
    THE ONLY WINNING MOVE IS NOT TO PLAY.
    HOW ABOUT A NICE GAME OF CHESS?

  • Zitat von Bladerunner

    Stell Dir mal vor Dein Herd zu Hause hätte 5 Knöpfe und alle sind unbeschriftet und du müsstest erst mal den Herd aufschrauben und die Strippen verfolgen damit du weisst welcher Knopf was macht - das ist das gleiche Prinzip.

    So ähnlich war das als BIF mir mal gezeigt hat wie ich mit Poke-Tricks das Bildschirm-RAM und den Zeichensatz so ins obere RAM verlegen konnte, dass meine weitschweifigen Array-Abfragen keinen Grafikmüll mehr auf den Bildschirm gebracht haben.

    Ohne seinen Tip hätte es nicht funktioniert. Er ist halt so. Er ist halt kein MacBacon oder Mike oder Hexworx. Na und. Ändern wird er sich eh nicht. Dafür gibt es hier im Forum Leute, die man wirklich als gute Mentoren bezeichnen kann, nicht nur fachlich, auch didaktisch.

  • Ich nehm die zweite, von MacB kommentierte Auflage des Werkes :bgdev

    Wissen ist das einzige Gut, das sich beim Teilen vermehrt. Also seid vorsichtig damit!

  • BladeRunner:
    Schade, ich dachte jetzt das du das Handbuch unbedingt haben willst.

    @MacBacon:
    Glaub ich, aber ich hab den Trick ja auch mit :sys45762: gepostet.
    Falls man den Schreibzugriff vermeiden will müßte man den Code kopieren und dann in einem anderm Speicherbereich aufrufen oder
    auf mein bekanntes ROM-RAM-Copy Verfahren zurückgreifen.
    Wenn sich das Betriebssystem im RAM-Befindet kann man das RTS poken.

    Schönen Gruß.

  • Ohne seinen Tip hätte es nicht funktioniert. Er ist halt so.

    Und dann änderst Du in deinem Programm eine Kleinigkeit und nichts geht mehr, weil der BIF'sche Code irgendwelche SideEffects hat von denen Du nichts weisst. Chance das selbst zu beheben: gegen Null.
    Da mag der Einzeltipp 10 mal funktionieren, ohne fundierte Auskunft WIE es geht und was so alles passieren kann würde ich es nicht nutzen.
    Ab davon lernst Du so wenig bis nichts. Du fügst einen Code ein der (mit Absicht) so verschleiert aufgebaut ist dass man ihn in kleine Häppchen zerlegen muss wenn man absehen können will was er alles beeinflusst.
    Das ist ein miserabler Stil. In den wenigsten Fällen wäre er noch dazu nötig, oft gibt es deutlich einfacher zugängliche Wege, die nicht in einem Wust aus Gosubs, Zeropagegepoke und strangen ich-spreche-den-String-mal-als-Code-an untergehen.

    Mein ehrlich gemeinter Tipp: Finger weg von dem Käse.
    Zudem ist "er ist halt so" noch nie eine gute Entschuldigung gewesen. Man kann an sich arbeiten.
    "Huch, Don Pepperoni hat schon wieder einen Polizisten im Hudson River versenkt. Dabei war der privat hier" - "oh, ja, schade. Aber, er ist halt so. Polizisten mag er nicht."
    8|

    GREETINGS PROFESSOR FALKEN
    A STRANGE GAME.
    THE ONLY WINNING MOVE IS NOT TO PLAY.
    HOW ABOUT A NICE GAME OF CHESS?