Meine ersten Gehversuche - mal wieder

Es gibt 26 Antworten in diesem Thema, welches 3.703 mal aufgerufen wurde. Der letzte Beitrag (21. August 2019 um 10:22) ist von zagdul.

  • Gott, ist das lange her... aber so langsam wird es... wollte hier vielleicht auch mal meine geistigen "Ergüsse" posten. Ich bin leider von Berufs wegen "hochsprachenverseucht", da muss man schon rumsuchen.

    Ich wollte, nach den ersten "Hallo-Welt" Progrämmchen mal gucken, ob ich es noch schaffe, den screen zu löschen :D

    Was wollte ich machen:

    1. ich wollte mir mein Toolset mal zusammensuchen, um mal den Round-Trip zu testen - im Moment nutze ich KickAssembler mit Vice und Virtual64 auf dem Mac.

    2. ich wollte ein etwas komplexeres Beispiel testen, als nur 255 Zeichen auf den Screen packen. Also wollte ich den ganzen Bildschirm löschen, mit vernünftiger Ende-Erkennung.

    3. Der Ansatz hier ist sicher nicht optimal, aber für 60 Minuten probieren nach gut 30 Jahren pause, glaub ich ganz ok :D

    ich komme mir echt blöd vor, was man in 35 Jahren alles vergessen hat - damit könnte man ganze Bücher füllen :S. Damals hätte ich da sicher was besseres in deutlich weniger Zeit zustande gebracht. Mann oh man...

    Nur falls es einen interessiert... vielleicht hilfts ja noch jemandem. Aber seid gnädig, ich übe ja noch ;)

    2 Mal editiert, zuletzt von zagdul (18. August 2019 um 00:10) aus folgendem Grund: typo fix

  • Sowas hier? Naja, nach 35 Jahren wüsste ich vom Assembler auch nicht mehr viel.:) Also immer fleißig üben.

    ldx #$00

    lda #$34

    loop

    sta $0400,x

    sta $0500,x

    sta $0600,x

    sta $0700,x

    inx

    bne loop

    rts

  • ja, die lösung habe ich auch gefunden. Allerdings erkennt die das Ende des Screens nicht 100% - der Screen endet bei 07e8, nicht bei 07ff.

    Mit der lösung oben würde man die "übrigen" bytes auch überschreiben. Da sind die Sprite-Pointer drin, glaub ich....

    Deine Lösung ist sicher flotter!

  • Ja, ok da hat du recht. in dem fall werden die spritepointer gelöscht. Wird aber recht häufig so gemacht.

    so, bitteschön.:):D

    ldx #$00

    lda #$34

    loop1

    sta $0400,x

    sta $0500,x

    sta $0600,x

    inx

    bne loop1

    ldx #$e9

    loop2

    sta $06ff,x

    dex

    bne loop2

    rts

  • jup... würde ich auch so machen, ist ja nur ein akademisches Beispiel...

    Einmal editiert, zuletzt von zagdul (18. August 2019 um 00:11)

  • Ich hatte auch mal so angefangen und dann jede Woche, wenn es möglich war, irgendwas gecodet.

    Nur ZP-Adressen um den Bildschirmspeicher zu löschen, würde ich nicht unbedingt machen. Das ist sowas wie mit Kanonen auf Spatzen zu schiessen.:)

  • Was ich stattdessen mache: nur bis $fa zählen. Dann kommt man nicht über die $07e8 hinaus.

  • Ist so ziemlich dasselbe wie im post 4 von mir. Das wäre doch auch mal was. Die kürzeste Varriante um den Bildschirmspeicher zu löschen.

    Jetzt aber nicht "PRINT"{clr}" :)

  • nur bis $fa zählen. Dann kommt man nicht über die $07e8 hinaus

    Oder statt STA $0700,x dies: STA $6e8,x. Die anderen bleiben wie sie sind. Ein paar Bytes werden dann zwar doppelt gelöscht, aber was soll's. :wink:

    Arndt

    GoDot C64 Image Processing
    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. - Bitte melde dich an, um diesen Link zu sehen.

  • wow... da hab ich ja was losgetreten :thumbup:

    Danke für die Tips und Hilfen... genau das hilft weiter. Ein wenig tipps, wie man es besser machen kann.. Cool... 8)

  • Ich hatte auch mal so angefangen und dann jede Woche, wenn es möglich war, irgendwas gecodet.

    Nur ZP-Adressen um den Bildschirmspeicher zu löschen, würde ich nicht unbedingt machen. Das ist sowas wie mit Kanonen auf Spatzen zu schiessen.:)

    das mit den ZP-Adressen war auch nur eine Übung. Ich fand das Beispiel ganz witzig um mal zu sehen, wie das mit der ZP-Adressierung so läuft und wie gut ich mich daran erinnern kann. Also das Beispiel davon hat höchstens einen Lerneffekt, sicherlich keinen Praxisbezug!

    Danke Dir!:)

  • Achso, das wusste ich nicht.


    Mit der unteren Spielerei kann man Breiche im RAM verschlüsseln oder entschlüsseln. Bei der Input64 wurde das so gemacht.

    Das untere kleine Beispiel kann die Programme auf der Input64 entschüsseln.

    LDA #$00

    STA $FC

    TAY

    LDA #$10

    STA $FD

    LOOP1

    LDA ($FC),Y

    EOR #$55

    STA ($FC),Y

    INI

    BNE LOOP1

    RTS

  • das ding mach doch "nur" ein XOR mit $55 auf den Speicherbereich $1000 bis $100ff - oder macht INI da irgendwas? Das sagt mir jetzt nix...

  • Richtig. Bei der Input64 waren alle Programme auf der Disk so verschlüsselt. Die XOR-Verschlüsselung wurde recht häufig bei diversen Kopierschutzverfahren genutzt.

    Bei dem Game Portal von Activision ist jeder Sektor mit eine unterschiedlichen XOR-Wert verschlüsselt. Das entschlüsseln findet im Floppy-RAM, während der Ladens statt.

  • oh ja, da klingelt was. Da habe ich mir damals auch über so was den kopf zerbrochen. Schlimm waren dann auch die Kopierschutze (ist das die Mehrzahl?:/), die irgendwelche besonderheiten der Floppy vorausgesetzt haben.

    Wobei, wenn ich mich recht entsinne, war das schwierigste, die stelle zu finden, wo die Prüfung "Fehler" geworfen hat und die Logik umzudrehen. ähm... hab ich gehört ;)

  • Die XOR-Verschlüsselung hatte nur den Sinn, es den Crackern schwer zu mache, den Code zu ändern. An dem Coden im Floppy-Ram war zudem auch recht schwer

    ranzukommen. In gegensatz zum C64 , da kann man mittels Frezzer Cartridge einen Monitor aufrufen und den Code ändern, gibt es sogut wie keine Möglichkeit, den Code

    im Floppy-RAM auszulesen, auch mit dem Action Replay nicht. Der IRQ-Lader verhindert das. Heute geht das ganz einfach mit dem Monitor im WinVice.:)

    Übrigens, die meisten Kopierschutzverfahren waren einfach nur Schice und eine Geldverschwendung. Ich kenne gerademal 8 Kopierschutze, die man als sehr gut bezeichnen kann.:)

  • Ja, das kann ich nur bestätigen. Ich kann mich erinnern, dass es einen "Kopierschutz" bei irgendeinem Game gab, da war schlicht ein Loch in der Floppy! Und das Layout der Blöcke war anders, dass man auf Jedem Fall in dem "Loch" landet, wenn man nicht den normalen Code nutzt. Die Umgehung dafür war aber wirklich simpel, glaub ich... irgendein RTS an der richtigen stelle und gut war es...

    Aber das ist nun wirklich OT - wenn auch schön über die "guten Alten Zeiten" abzunerden :D

  • das gute EOR :)

    Fuer die Anfaenger noch eine andere Schreibweise fuer das schnellste und sauberste Screen loeschen:

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

    loop

    sta $0400+250*0 -1,x

    sta $0400+250*1 -1,x

    sta $0400+250*2 -1,x

    sta $0400+250*3 -1,x

    dex

    bne loop

    das -1 weil die Schleife nie mit X=0 durchlaufen wird.

    Das 250*n ist glaube ich intuitiver fuer den Anfang zu verstehen. Da ist dann nichts doppelt oder gar zu weit.

    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.