Farben vom Jiffy DOS ändern?

  • Farben vom Jiffy DOS ändern?

    Moin Leute,

    man kann ja im HEX Editor etwas im Code ändern, leider kenne ich mich mit dem Jiffy Code gar nicht so gut aus, ich würde gern die Farben vom Hintergrund und der Schrift ändern.

    Jemand einen Tipp wo dieser Deklariert ist?
  • Nach sta $d020 suchen wird nichts bringen, denn der VIC wird aus einer Tabelle initialisiert:

    E5A0 A9 03 LDA #$03
    E5A2 85 9A STA $9A
    E5A4 A9 00 LDA #$00
    E5A6 85 99 STA $99
    E5A8 A2 2F LDX #$2F
    E5AA BD B8 EC LDA $ECB8,X
    E5AD 9D FF CF STA $CFFF,X
    E5B0 CA DEX
    E5B1 D0 F7 BNE $E5AA
    E5B3 60 RTS

    Die Tabelle mit den Werten, die beim Initialisieren nach $D000 usf. geschrieben werden, beginnt obigem Code nach beim normalen Kernal an Adresse $ECB9. Für die Bildschirmfarben müßte man demzufolge den Inhalt von $ECD9 und $ECDA anpassen, wenn ich mich nicht irre. Das wird bei Jiffy sicherlich gleich sein.

    @Edit: Unter Jiffydos ist es offenbar so wie beim normalen Kernal. ?peek(60633) liefert 14 und ?peek(60634) liefert 6. Das entspricht den hell- und dunkelblauen Bildschirmfarben.
    @Edit2: Ach oldskool hatte das ja auch schon geschrieben. Naja, da sind wir uns ja einig (-:
    In a moment all went screaming wild until the darkness killed the light..
  • Bin gerad dabei, mit einem HEX-Editor auf Win7 den JD-KERNAL zu modifizieren, was die Farben angeht,
    finde aber die entsprechenden Werte/Adressen nicht :(
    Was mache ich vermutlich falsch?
    muss man noch eine bestimmte Ansicht im Editor einstellen?
  • Der Kernal ist 8 KiB groß und liegt im C64-Adressraum von Adresse $e000 bis $ffff. Das weiß aber Dein Hex-Editor nicht, der zeigt also nur Adressen von $0000 bis $1fff an. Entsprechend musst Du also jeweils $e000 subtrahieren, um das richtige Byte zu erwischen.
    Yes, I'm the guy responsible for the ACME cross assembler
  • Wenn der Editor es nicht kann, wär das auch nicht so schlimm:
    Um eine Speicherstelle wie $eXYZ zu ändern, änderst Du stattdessen $0XYZ, und
    um eine Speicherstelle wie $fXYZ zu ändern, änderst Du stattdessen $1XYZ.
    Ist also halb so wild - kompliziert wird das nur bei krummen Offsets.
    Yes, I'm the guy responsible for the ACME cross assembler
  • OK, mal HxD geöffnet, ROM geladen und anstatt nach $EC09 im Offset dann nach $0C09 gesucht.
    Es gibt eine $0C00, danach kommt aber direkt $0C10. OK, denk ich mir, schaue ich mal oben auf die
    Spalten: aha, oben gehts nochmal von 00 bis 0F - Gut, nochmal im thread nach der Rahmenfarbe
    geschaut: Hm, oldskool schrieb was von $0E bei $EC09 - somit ist meine vorige Überlegung, die "09" von $EC09
    unter den Spalten zu finden, wohl nicht richtig... *aua*... sorry, in Sachen HEX bin ich n Depp :D
    Die Adresse $0CDA (abgeleiteter Offset v. $ECDA) kann ich ebenfalls nicht finden :(
  • Doch doch, das stimmt schon alles - nur hat sich oldskool wohl bei der einen Adresse verlesen bzw. vertippt:
    Die Cursorfarbe ($0e für hellblau) liegt bei $e535 (d.h. "Zeile" 0530, "Spalte" 5)
    die Rahmenfarbe ($0e für hellblau) liegt bei $ecd9 (d.h. "Zeile" 0cd0, "Spalte" 9),
    die Hintergrundfarbe ($06 für dunkelblau) liegt bei $ecda (d.h. "Zeile" 0cd0, "Spalte" a).
    Yes, I'm the guy responsible for the ACME cross assembler
  • Ich wärme das mal kurz auf .....

    ich habe mich jetzt an

    Mac Bacon schrieb:

    Doch doch, das stimmt schon alles - nur hat sich oldskool wohl bei der einen Adresse verlesen bzw. vertippt:
    Die Cursorfarbe ($0e für hellblau) liegt bei $e535 (d.h. "Zeile" 0530, "Spalte" 5)
    die Rahmenfarbe ($0e für hellblau) liegt bei $ecd9 (d.h. "Zeile" 0cd0, "Spalte" 9),
    die Hintergrundfarbe ($06 für dunkelblau) liegt bei $ecda (d.h. "Zeile" 0cd0, "Spalte" a).
    diese Aussage gehalten, um die richtigen Adressen zu finden, jedoch wäre es für mich sehr hilfreich, wenn ich meinen Hex-Editor dazu bekommen könnte, mir die richtigen Adressen gleich zu zeigen, sodass ich nicht umrechnen muss. Ich benutze auf dem Mac den Editor iHex (wird wahrscheinlich niemand kennen). Wie würde denn so eine Funktion heissen, dass man die Adressen gleich anders angezeigt bekommt? Sorry für diese Noob-Frage, aber das letzte Mal, dass ich irgendwelche Bytes mit einem Hex-Editor geändert habe, war irgendwann in den 80er Jahren und da hatte ich einen Diese-Editor, der ohnehin auf dem C64 lief. da brauchte ich mir um die Adressen keine Gedanken machen ... Ich hoffe, meine Frage ist halbwegs verständlich ...
  • Du könnstest dir mit dd auf dem Terminal helfen:

    Eine 64k große Datei namens memory.bin erzeugen (stehen nur Nullen aus /dev/zero drin):

    dd if=/dev/zero of=memory.bin bs=1024 count=64

    Kernal aus kernal.bin an die richtige Stelle im memory.bin schreiben:

    dd if=kernal.bin of=memory.bin bs=4096 seek=14 conv=notrunc

    Jetzt kannst du die memory.bin editieren, die Adressen stimmen.

    Und danach wieder rausholen als kernal-patched.bin:

    dd if=memory.bin of=kernal-patched.bin bs=4096 count=2 skip=14

    Unter der Annahme, dass deine Kernal-Datei keine Ladeadresse enthält, also genau 8192 bytes hat und nicht 8194 bytes.
  • Henning schrieb:

    Unter der Annahme, dass deine Kernal-Datei keine Ladeadresse enthält, also genau 8192 bytes hat und nicht 8194 bytes.
    Die Länge der Kernal-Datei passt, allerdings habe ich jetzt im Editor nicht die richtigen Adressen, d.h. ich finde nicht $ECD0 sondern "nur" $ECD8. Verdammt, das ist alles so lange her ..... ein simples Anzeigeproblem, wette ich. Ich kann Dir ja fast folgen, wenn ich das richtig verstehe, ist die gefüllte memory.bin am Anfang nur mit nullen vollgeschrieben, bis halt das Kernal.rom an der richtigen Adresse anfängt, soll wohl E000 sein. Im Editor steht jetzt aber E010, E000 gibt es nicht. Ich bin echt zu doof ... ;(