Hello, Guest the thread was viewed12k times and contains 338 replies

last post from Lynx at the

Alles über COMAL 80 V2.01 – Der ultimative Mega-Thread

  • Hallo liebe Programmier-Freunde,


    ich tauche gerade in die wunderbare Welt von COMAL 80 V2.01 ein und experimentiere mit den Befehlen USE FONT und LINKFONT, die im Direktmodus eingegeben werden müssen.


    FONT ist ein Softwarepaket mit Prozeduren, das es ermöglicht, benutzerdefinierte Zeichensätze zu erstellen.


    Der Befehl USE FONT lädt dieses Paket in den Arbeitsspeicher. Im Anschluss sorgt der Befehl LINKFONT dafür, dass einige Dinge passieren: Der Zeichensatz aus dem ROM wird ins RAM kopiert, und offenbar wird auch die Startadresse des Bildschirmspeichers verändert.


    Dadurch scheint der Bildschirmspeicher nicht mehr bei Adresse 1024 zu beginnen, sondern an einer anderen Stelle, was mich gerade etwas verwirrt.


    Daher die Frage an euch: An welche Adresse flüchtet der Bildschirmspeicher nach dem Einsatz von USE FONT / LINKFONT? Hat jemand Erfahrung damit oder eine Idee, wie ich das elegant herausfinden kann?

  • Daher die Frage an euch: An welche Adresse flüchtet der Bildschirmspeicher nach dem Einsatz von USE FONT / LINKFONT? Hat jemand Erfahrung damit oder eine Idee, wie ich das elegant herausfinden kann?

    Wenn Du z.B. ein AR6 hast, müsste es möglich sein das per Einzelschritt ab einer bestimmten Adresse nachzuverfolgen, selber probiert habe ich es allerdings noch nicht .


    Edit: Geht natürlich nur wenn Comal als Disketten-Version vorliegt .

  • Wenn Du z.B. ein AR6 hast, müsste es möglich sein das per Einzelschritt ab einer bestimmten Adresse nachzuverfolgen,

    Das AR6 ist ein Modul und COMAL80 2.01 ist ebenfalls ein Modul. Ich denke nicht, dass das so möglich ist. Außerdem weiß ich nicht, was du mit Einzelschritt usw. meinst.

    Edit: Geht natürlich nur wenn Comal als Disketten-Version vorliegt .

    Die Disketten-Version COMAL 0.14 enthält das FONT-Paket imho nicht.

  • Außerdem weiß ich nicht, was du mit Einzelschritt usw. meinst.

    Einzelschritt heißt das der Programm-Code auf Tasten-Druck Befehl für Befehl abgearbeitet wird, so das man die Auswirkungen besser nachverfolgen kann .


    Die Disketten-Version COMAL 0.14 enthält das FONT-Paket imho nicht.

    Das wusste ich nicht .

  • Gibt es denn im VIC keine Adressen, in der man feststellen kann, wo der Bildschirmspeicher gerade ist? Dann müsste man das doch mit

    print peek(irgendwas) and 240 + peek(irgendwasanderes) * 16 +2

    oder sowas ähnliches herausfinden können. :gruebel:?::?::?:


    Leider spuckt ChatGPT diesbezüglich nur Unsinn aus.

    Soviel zur KI. :D


    Vielleicht findest Du hier was brauchbares :


    https://www.c64-wiki.de/wiki/Bildschirmspeicher

  • Informationen sind im Handbuch "COMAL_2_01_Handbuch für Commodore 64" ab Seite 148 zu finden.

    Es scheint, dass der Bereich dynamisch verwaltet wird, bin mir aber nicht sicher.


    Ds Buch hast du? Siehe den Link zu deinem Post.


    P.S. warum benutzt du das originale crt-File? Es gibt doch das tolle COMAL80-SuperChipII-Modul


    LG aus dem fernen China

    Claus


    Edit:

    Ich habe eben mal mit dem VICE-Monitor geschaut.

    Gibt man die Befehle gleich nach dem Start von COMAL80 ein, dann liegt der Bildschirm ab $6C00

  • In meinem Test ab $6C00


    USE FONT, LINK FONT, dann oben in den Bildschirm einfach mal ABCDEFG reingeschrieben und im VICE Debugger geschaut, wo der String abliegt. -> Bauernlösung.


    USE FONT, LINK FONT, VICE Monitor starten und $DD00 (VIC Bank) und $D018 (Beginn Bildschirmspeicher innerhalb der Bank) auslesen -> Ergibt Bank 1 ($4000-$7FFF) plus $B * $100 = $2C00 -> $6C00

  • Ds Buch hast du? Siehe den Link zu deinem Post.

    Ja, danke. Das Buch von Neuber/Sperling habe ich. Und es gefällt mir auch sehr gut und behandelt alle wichtigen Themen in ausreichendem Maße. Da steht aber leider absolut nichts über den Beginn des Bildschirmspeichers bei Verwendung des Font-Pakets drin.

    P.S. warum benutzt du das originale crt-File? Es gibt doch das tolle COMAL80-SuperChipII-Modul

    Tja. Gute Frage. Welchen Vorteil hat das tolle COMAL80-SuperChip II Modul gegenüber dem Original?

    In meinem Test ab $6C00

    Ah, vielen Dank. Das scheint zu funktionieren.

    Es scheint, dass der Bereich dynamisch verwaltet wird, bin mir aber nicht sicher.

    Uh, das wäre aber schlecht. Dann ist ja $6c00 doch nicht mit 100%iger Sicherheit zu verwenden. Hmmm? :gruebel

  • Ja, danke. Das Buch von Neuber/Sperling habe ich. Und es gef#llt mir auch sehr gut und behandelt alle wichtigen Themen in ausereichendem Maße. Da steht aber leider absolut nichts über den Beginn des Bildschirmspeichers bei Verwendung des Font-Pakets drin.


    Es scheint, dass der Bereich dynamisch verwaltet wird, bin mir aber nicht sicher.

    Uh, das wäre aber schlecht. Dann ist ja $6c00 doch nicht mit 100%iger Sicherheit zu verwenden. Hmmm? :gruebel

    Wie ich schon geschrieben habe, ich bin mir da nicht sicher. Ist mehr eine Vermutung.

    Ich schau mir das mal genauer an.

  • Falls es sich ändert, ist das ja auch kein Thema, dann holt man sich die Adresse halt? peek und poke gibts in Comal genauso :)

    Ja, PEEK und POKE gibt es auch. Und praktischerweise kann man das in eine selbstgeschriebene Funktion einkapseln.

    Die Frage des Tages ist aber: Wie findet man mit PEEK die Anfangsadresse des Bildschirmspeichers heraus? Ich habe ja bereits Herrn Prof. Dr. Chat GPT gefragt. Aber der hat nur mit Dünnpfiff geantwortet. (Wie immer wenn es um C64 geht.)

  • Die Frage des Tages ist aber: Wie findet man mit PEEK die Anfangsadresse des Bildschirmspeichers heraus?


    Vielleicht findest Du hier was brauchbares :


    https://www.c64-wiki.de/wiki/Bildschirmspeicher

    Da hast du nicht nachgelesen oder Omega?


    Am C64 und am VC-20 steht die Page zB in 648. (also den Wert x 4 nehmen, für die Adresse).

    Am c128 ist das 2619.

    Also zumindest steht dort, wo der Kernal denkt, dass sie ist.


    Der VIC-II kriegt seinen 16 kB Block vom CIA#2 zugewiesen, dort geben unter 56576 die Bits 0-1 Auskunft darüber.

    Die Startadresse innerhalb des 16 kB Blocks ist dann in 53272 hinterlegt, da aber nur in den Bits 4-7.

  • Es werden, wie auch schon von fireball angemerkt, die Adressen $D000, und $D018 mit entsprechenden Werten beschrieben.

    Siehe nachfolgenden Code

    Im unteren Abschnitt kann man sehen, das dort die Adressen $DD00, und $D018 beschrieben werden.

    Man sollte also auch im Umkehrschluss die Bildschirmadresse dort rauslesen koennen, oder?

  • Falls es sich ändert, ist das ja auch kein Thema, dann holt man sich die Adresse halt? peek und poke gibts in Comal genauso :)

    Ja, PEEK und POKE gibt es auch. Und praktischerweise kann man das in eine selbstgeschriebene Funktion einkapseln.

    Die Frage des Tages ist aber: Wie findet man mit PEEK die Anfangsadresse des Bildschirmspeichers heraus? Ich habe ja bereits Herrn Prof. Dr. Chat GPT gefragt. Aber der hat nur mit Dünnpfiff geantwortet. (Wie immer wenn es um C64 geht.)

    Auf der Seite des Bildschirmspeicher Links von Primzahl findet sich eigentlich die relevante Information

    • Die Bits 0 und 1 des CIA 2 Kontrollregister 56576 ($DD00) wählen die aktuelle VIC-Bank ($0-$3FFF/$4000-$7FFF/$8000-$BFFF/$C000-$FFFF).
    • Die Bits 4-7 des VIC-Speicher-Kontroll-Register 53272 ($D018) enthalten die Startadresse des Bildschirmspeichers innerhalb der gewählten VIC-Bank.

    Wenn Du also Peek (56576) und Peek (53272) aufrufst kannst Du anhand der Werte überprüfen wo der Bildschirmspeicher gerade genutzt wird.

  • Ernsthaft? Du befragst ChatGPT zu Einstellungen im C64? Da ist das C64-Wiki sicher die bessere und zuverlässigere Anlaufstelle. Eine Google-Suche nach "C64 Bildschirmspeicher" ergibt gleich als ersten Treffer diese Seite hier:


    https://www.c64-wiki.de/wiki/Bildschirmspeicher


    Und da steht im zweiten Abschnitt "Position des Bildschirmspeichers" - also genau das, was du suchst.

  • m unteren Abschnitt kann man sehen, das dort die Adressen $DD00, und $D018 beschrieben werden.

    Man sollte also auch im Umkehrschluss die Bildschirmadresse dort rauslesen koennen, oder?

    Man sollte es vielleicht können. Ich kann es aber nicht. Ich verstehe von solcherlei Dingen nichts.

    Die Bits 0 und 1 des CIA 2 Kontrollregister 56576 ($DD00) wählen die aktuelle VIC-Bank ($0-$3FFF/$4000-$7FFF/$8000-$BFFF/$C000-$FFFF).
    Die Bits 4-7 des VIC-Speicher-Kontroll-Register 53272 ($D018) enthalten die Startadresse des Bildschirmspeichers innerhalb der gewählten VIC-Bank.

    Wenn Du also Peek (56576) und Peek (53272) aufrufst kannst Du anhand der Werte überprüfen wo der Bildschirmspeicher gerade genutzt wird.

    Das ist mir alles zu kompliziert. Ich bin es gewohnt mit Hochsprachen zu arbeiten und nicht der Maschine von unten an den Eiern herumzufummeln. :D

    Und warum guckt für die Bildschirmspeicheradresse nicht einfach in 648 nach? :gruebel

    In 648 steht bei COMAL im "Normalmodus" 4 und nach LINKFONT steht da 108. Das kann ja wohl nicht sein. Oder? :nixwiss:


    Kann mir mal jemand konkret ein Beispiel geben, wie man die aktuelle Adresse des Bildschirmspeichers herausfinden kann? Das kann gerne auch ein BASIC V2 Programm sein, da ich das leicht nach COMAL umsetzen kann. Aus den bisher dargebotenen Informationen werde ich leider nicht schlau.