Upside Down (64er 11/1995)

Es gibt 49 Antworten in diesem Thema, welches 6.270 mal aufgerufen wurde. Der letzte Beitrag (15. Juni 2023 um 23:20) ist von Unseen.

  • Ich meine aber, dass die C-64-Firmware das auch mal temporär macht.

    Dazu aus "C 64 für Insider":

    Zitat

    ... die Bytes $0100-$013e bei Kasettenoperationen als Speicher für die Fehlerbeschreibungen dienen. Die Adressen $00ff-$010a werden zusätzlich noch bei der Umwandlung einer Fließkommazahl ins ASCII-Format verwendet, wodurch der Stapel im Bereich $0100-$010a tangiert ist.

  • Proof of concept! :emojiSmiley-41:

    Nein, ich habe den Screenshot nicht mit einem Grafikprogramm gedreht. :)

    Wirklich praktisch einsetzbar ist der Code allerdings (noch) nicht... Ich bleibe dran!

    Bitte melde dich an, um diesen Anhang zu sehen.

    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

  • Dieses Programm wäre wirklich nützlich, wenn man Kopfstand übt, und währenddessen Textverarbeitung betreiben will?

  • Um das x-Register mit einer 8 zu laden, macht das Programm so: "ldx $a3b9" (weil da zufällig eine 8 im ROM steht), statt einfach "ldx #$08". WARUM??! :help:

    Das würde man eigentlich nur bei BIT machen, um die fehlende Immediate-Adressierung zu erreichen ... aber für ein LDX sehe ich keinen Notwendigkeit oder irgend einen Nutzen (abgesehen davon, dass es mehr Platz und mehr Zyklen braucht).

    Außerdem scheint auch kein Opcode im Parameter versteckt zu sein, um eventuell ein Befehls-Skip zu erreichen und einen alternativen Ausführungspfad bekommt, wenn man auf die Adresse des Parameters springt. Da wäre ein LDA $00A3,Y - ich glaub das bringt hier nichts, oder? Vor allem wenn es nicht angesprungen wird.

  • Zum Programm selbst: Es ist etwas kniffliger als gedacht. Denn das Farb-RAM besteht ja, wenn es sich verändert, aus einer Mischung von bereits korrigierten Farben und Farben, die man jetzt noch verschieben muss. Es bringt also nichts, einfach das Farb-RAM zu spiegeln. Man muss die konkreten Stellen herauspflücken, die sich verändert haben, sie an die richtige Stelle schieben und die an unerwünschter Stelle veränderten Farben aus der Kopie, die man vorher angelegt hat, wiederherstellen. Zumindest ist mir bisher kein besserer Ansatz eingefallen...

    Heidewitzka! :facepalm:

    Mir ist aufgefallen, dass es ein noch viel gravierenderes Problem gibt. Wie gesagt, das Farb-RAM besteht aus einer Mischung von Farben, die schon an den richtigen Ort kopiert worden sind und Farben, die noch woanders hinmüssen.

    Aber was ist denn jetzt, wenn beide Farben gleich sind? Es werden z.B. drei Stellen mit Dunkelblau gefüllt, aber vorher war da auch schon Dunkelblau. Das "neue" Dunkelblau muss eigentlich woanders hin. Aber woran erkennt man das jetzt? :) Tja, offensichtlich gar nicht...

    Aber es war trotzdem ein nettes Projekt.

    Dennoch gibt es ein kleines Update. Damit man garantiert etwas erkennen kann, wird in Version 2.2 das Farb-RAM jetzt einfach mit Farben gefüllt, die einen guten Kontrast zum Bildschirmhintergrund bilden.

    "Labyrinth" von der Demo-Disk läuft damit z.B. einwandfrei. :)

    Also dann!

  • Wie wäre es, das Farb-RAM periodisch auf Standardwerte zurückzusetzen? Upside-Down gibt es dann eben nur "Monochrom"...

    Projekte: micromse

    Fertig: C128 wieder aufbauen, Bitte melde dich an, um diesen Link zu sehen.

    Inaktiv 😴: Bitte melde dich an, um diesen Link zu sehen.

  • Wie wäre es, das Farb-RAM periodisch auf Standardwerte zurückzusetzen? Upside-Down gibt es dann eben nur "Monochrom"...

    Genau das macht die neue Version. Der Standardwert ist Schwarz bei hellen Hintergrundfarben ($d021) und Weiß bei dunklen...

    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

  • Zum Programm selbst: Es ist etwas kniffliger als gedacht. Denn das Farb-RAM besteht ja, wenn es sich verändert, aus einer Mischung von bereits korrigierten Farben und Farben, die man jetzt noch verschieben muss. Es bringt also nichts, einfach das Farb-RAM zu spiegeln. Man muss die konkreten Stellen herauspflücken, die sich verändert haben, sie an die richtige Stelle schieben und die an unerwünschter Stelle veränderten Farben aus der Kopie, die man vorher angelegt hat, wiederherstellen. Zumindest ist mir bisher kein besserer Ansatz eingefallen...

    Heidewitzka! :facepalm:

    Mir ist aufgefallen, dass es ein noch viel gravierenderes Problem gibt. Wie gesagt, das Farb-RAM besteht aus einer Mischung von Farben, die schon an den richtigen Ort kopiert worden sind und Farben, die noch woanders hinmüssen.

    Aber was ist denn jetzt, wenn beide Farben gleich sind? Es werden z.B. drei Stellen mit Dunkelblau gefüllt, aber vorher war da auch schon Dunkelblau. Das "neue" Dunkelblau muss eigentlich woanders hin. Aber woran erkennt man das jetzt? :) Tja, offensichtlich gar nicht...

    [...]

    Daher mein Hinweis, dass für das Farb-RAM - analog zum ("original") Screen-RAM ab $0400 - eigentlich ein buffer benötigt wird ;)

    Dies würde imho nur dann funktionieren, wenn das ganze in HiRes realisiert wird, da das Farb-RAM dort nicht angesprochen wird und somit als buffer dienen kann. Aus diesem buffer können dann die Farbwerte ins bitmap Screen-RAM - aus welchem in dem Modus ja die Farben gelesen werden - transkodiert werden. Das ganze braucht zwar mehr Rechenzeit und Platz, aber zumindest die Bitmap kann ja unter dem ROM ab $E000 gelegt werden.

  • Vielleicht wäre eine C128-Version doch besser, da kann man zwischen zwei Farb-RAM-Bänken umschalten, getrennt für CPU und VIC.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    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.