Automatisch erkennen ob C128 im 40 oder 80 Zeichen Modus ist

Es gibt 23 Antworten in diesem Thema, welches 4.104 mal aufgerufen wurde. Der letzte Beitrag (9. März 2024 um 11:41) ist von Natas.

  • Hallo,

    Ich habe jetzt 2 RGBtoHDMI Adapter am C128D, einer für den 40 Zeichen Ausgang (VicIIDizer/Lumacode) und einen am RGBi.

    Gibt es eine Möglichkeit zu erkennen, ob man im 80 Zeichen Modus ist, oder im 40 Zeichen Modus?

    Hintergrund, ich würde gerne eine einfache HDMI Weiche dazwischen schalten, deren Schalter/Taster ich mit einem I/O Signal vom C128 aus gerne ansteuern würde (Optokoppler etc. dazwischen).

    Zum einen könnte man die 40/80 Taste abfragen, aber ein GO64 aus dem 80 Zeichen Modus wechselt in 40 Zeichen Mode bei gedrückter Taste.

    Soweit ich weiß, gibt es ja noch andere Möglichkeiten via software den Modi zu wechseln, ohne gedrückter Taste.

    C128D | PI1541 | Sidekick64 | SidkickPico | VICIDizer128 | RGB2HDMI for VDC | Yaumataca | C=Key | PS2 Mouse Adapter | U3!-Adapter | Modulatorersatz for Lumacode

  • Du kannst sogar in beiden Modi gleichzeitig sein, einige Software nutzt das auch aus, z. B. "Eye of the Beholder" hat die Automap auf dem 80-Zeichen Schirm.

    Ansonsten hat BASIC auch eine Funktion, um herauszufinden welcher Schirm (in BASIC) gerade aktiv ist:

    Bitte melde dich an, um diesen Link zu sehen.

    Mit 5 ist man im 80-Zeichen-Textmode, alles andere ist 40 Zeichen.

    Umschalten kann man mit ESC+"X" (nacheinander) oder eben mit printchr$(27)"x" als Befehl

  • Ansonsten hat BASIC auch eine Funktion, um herauszufinden welcher Schirm (in BASIC) gerade aktiv ist:

    Bitte melde dich an, um diesen Link zu sehen.

    Mit 5 ist man im 80-Zeichen-Textmode, alles andere ist 40 Zeichen.

    Dabei sollte man allerdings nicht auf "=5", sondern auf ">4" testen, denn wenn der VIC Grafik anzeigt und der Cursor auf dem VDC ist, kann die Funktion auch Werte von 6 bis 9 zurückgeben.

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

  • Dualscreenanwendugen sind natürlich schon aus der Fragestellung außen vor.

    Eine Umschalterkennung könnte die Zugriffe auf den jeweiligen Videochips überwachen. Es ist schließlich anzunehmen, daß der Videochip, auf dem zuletzt zugegriffen wurde, auch der aktiv genutzte ist.

  • Na, ich würde eher sagen, da alle zusätzlichen Tasten die auf einer 128´er Tastatur drauf sind durch den vic laufen sollte man doch da auch ein Register abfragen können ob 40/80 gedrückt ist, oder nicht.

    Schlagt mich nicht tot, ich weis es nicht , ist nur eine Theorie ... :whistling:

    Um sicher zu gehen, würde ich mal Bill Herd fragen, der hat das Teil ja Damals mit verbrochen...

  • Na, ich würde eher sagen, da alle zusätzlichen Tasten die auf einer 128´er Tastatur drauf sind durch den vic laufen sollte man doch da auch ein Register abfragen können ob 40/80 gedrückt ist, oder nicht.

    Die Taste spielt doch nur beim Reset eine Rolle.

    Wie man letztendlich umschaltet, wurde auch schon erwähnt:

    Umschalten kann man mit ESC+"X" (nacheinander) oder eben mit printchr$(27)"x" als Befehl

    Und das bezieht sich wohlgemerkt lediglich auf die KERNAL-Routinen. Jede Software kann die Chips nach Belieben ansprechen.

    Es gibt keine Taste, über die man den aktuellen Zustand abfragen könnte.

  • da alle zusätzlichen Tasten die auf einer 128´er Tastatur drauf sind durch den vic laufen

    Könnte man meinen, wär aber falsch. :D Es sind 26 Tasten mehr, davon werden 24 über die drei zusätzlichen Tastaturmatrixleitungen des VIC abgefragt, eine (ASC/DIN/CAPSLOCK) über den Prozessorport und eine (40/80) über die MMU.

    sollte man doch da auch ein Register abfragen können ob 40/80 gedrückt ist, oder nicht

    Natürlich kann man abfragen, ob die Taste gedrückt ist (und für eine manuelle Umschaltung des Monitor-Eingangssignals würde ich tatsächlich auch diese Taste verwenden, denn die ist sonst für nichts zu gebrauchen), aber das ist dann eben immer noch eine manuelle Umschaltung, und die Ursprungsfrage schien eher in Richtung Automatikfunktion zu gehen - die ist aber so gut wie unmöglich zu realisieren, denn es sind eben immer beide Videoausgänge aktiv.

    Eine Umschalterkennung könnte die Zugriffe auf den jeweiligen Videochips überwachen. Es ist schließlich anzunehmen, daß der Videochip, auf dem zuletzt zugegriffen wurde, auch der aktiv genutzte ist.

    Gute Idee eigentlich, funktioniert aber nur für den VDC: Beim VIC ist es ja so, dass

    1.) das dargestellte Bild einfach durch Schreibzugriffe ins RAM geändert wird, ohne dass unbedingt in VIC-Register geschrieben wird, und

    2.) dass im 128er-Modus ständig auf VIC-Register zugegriffen wird, die mit der BIlddarstellung gar nichts zu tun haben, wie z.B. das Interrupt-Acknowledge-Register oder die oben erwähnten zusätzlichen Tastaturleitungen.

    EDIT: Man könnte natürlich sowas versuchen wie "wenn <x> Sekunden lang nicht mehr auf den VDC zugegriffen wurde, dann wird wohl der VIC-Ausgang der aktuelle sein", aber selbst das versagt dann bei "press any key to go on".

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

  • 1.) das dargestellte Bild einfach durch Schreibzugriffe ins RAM geändert wird, ohne dass unbedingt in VIC-Register geschrieben wird, und

    Stimmt schon. Eine Umschaltung vom VDC zurück zum VIC kann da unter gehen. In der Regel geht eine Umschaltung allerdings auch mit der Umschaltung zwischen 1 und 2 Mhz einher, was dann wieder ein VIC-Zugriff wäre.

    2.) dass im 128er-Modus ständig auf VIC-Register zugegriffen wird, die mit der BIlddarstellung gar nichts zu tun haben, wie z.B. das Interrupt-Acknowledge-Register oder die oben erwähnten zusätzlichen Tastaturleitungen.

    Das ist allerdings schon etwas kniffeliger. VIC-Interrupt ist da eher unbedeutend, denn ohne den VIC aktiv zu nutzen, hat man da doch gar keine Verwendung für.

    Die Tastaturabfrage ist allerdings ein Argument. Da müßte man den VCD wohl die Priorität geben, wenn beide Chips zeitnah angesprochen werden. Funktioniert natürlich auch nur, wenn die Tastatureingaben immer auch sofort Auswirkungen auf den VDC haben. Um das wirklich sicher zu machen, müßte man wohl schon Zugriffe auf $d02f bei der Erkennung noch explizit ausschließen. Dazu müßte man die unteren 6 Bit vom Adressbus auch noch überwachen.

    Ein weiterer Fall, wo so eine Erkennung nicht funktioniert, sind natürlich Programme, welche den VDC als RAM-Disk zweckentfremden.

  • Danke für die Antworten. Dann wird es doch bei einer manuellen Umschaltung bleiben. Momentan ist das Ganze an einem TV-Gerät, hier habe ich 4 HDMI inputs, die über Fernbedienung wählbar sind. Idee war eine einfache Umschaltung mit Weiche über Taster/Schalter der vom C128 angesteuert wird, um nicht die Fernbedienung zu bemühen. Wird dann erstmal bei der manuellen Bedienung bleiben. Ziel ist es, im Wohnzimmer der Dachgeschosswohnung ein bisschen retro zu spielen und vieles von der Couch aus zu steuern.

    Da mein Userport ungenutzt ist, könnte man hier einen I/O mit zwei Poke Befehlen als Ausgang nutzen, der dann über einen Treiber zum Schutz und Optokoppler eine Weiche umschaltet, oder?

    Ich bin noch nicht so lange bei C64/C128 dabei, hat als Kind/Jugendlicher keinen Cevi, hatte nur Kontakt mit Commodore im Freundeskreis. Wir haben gleich mit MS-DOS 3.2, GEM-Desktop, angefangen mit Schneider/Amstrad PC1512. Durch einen Dachbodenfund eines C128D bei den Schwiegereltern bin ich seit letztem Jahr dabei, Gerät funktionierte auf Anhieb. Habe es dann mit PI1541, Sidekick64 und RGBtoHDMI imit der Neuzeit verbunden. So hatten die nicht genutzten Raspis endlich eine Verwendung.

    C128D | PI1541 | Sidekick64 | SidkickPico | VICIDizer128 | RGB2HDMI for VDC | Yaumataca | C=Key | PS2 Mouse Adapter | U3!-Adapter | Modulatorersatz for Lumacode

  • VIC-Interrupt ist da eher unbedeutend, denn ohne den VIC aktiv zu nutzen, hat man da doch gar keine Verwendung für.

    Den benutzt das System von ganz alleine: Im 128er-Modus wird für den normalen System-Interrupt nicht CIA1, sondern der VIC genutzt.

    Ein weiterer Fall, wo so eine Erkennung nicht funktioniert, sind natürlich Programme, welche den VDC als RAM-Disk zweckentfremden.

    Guter Einwand, das macht es noch schwieriger.

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

  • Gute Bildschirme haben eine PiP-Funktion oder können (4K und mehr Auflösung und Breitformat) die zwei niedrig aufgelösten 4:3 Bildschirminhalten NEBENEINANDER darstellen.

    Darin sehe ich eine vernünftige Lösung dieses Problems und des 2-Schirmbetriebs gleich noch mit dazu...

    Wobei: wenn man an so modernen TFTs sitzt und zig Raspis (oder Dinge mit noch mehr Rechenleistung) quasi "nebenher" beschäftigt, dann stellt sich schon die Frage, warum dann überhaupt noch einen physikalischen C128 etc. da mit zu betreiben, dann doch gleich ganz emulieren!

  • In der Zerro-Page Adresse $E7 bzw. 238 wird abgelegt, die rechte Grenze des Fensters. Die Adresse braucht man nur auslesen, bei Ergebnis 39 oder 79 hat man dann die Antwort.

    Wem es beim Bit zählen schwindelig wird, der hat zuviel davon.

    Alt werden ist schön, das Altern nicht.

  • Na, ich würde eher sagen, da alle zusätzlichen Tasten die auf einer 128´er Tastatur drauf sind durch den vic laufen sollte man doch da auch ein Register abfragen können ob 40/80 gedrückt ist, oder nicht.

    Nein, weil die 40/80-Taste in die MMU geht, und die Taste wird auch nicht laufend abgefragt und ausgewertet.

    Und wenn das zugehörige MMU-Bit "von innen" auf 0 steht, nützt es auch nichts, wenn "von außen" kein GND anliegt - was passiert, sobald das betreffende MMU-Register irgendwann mal gelesen und wieder zurückgeschrieben wurde.

    Näheres hier: Bitte melde dich an, um diesen Link zu sehen.

    Die Taste spielt doch nur beim Reset eine Rolle.

    Nein, auch z. B. bei RUN-STOP/RESTORE.

    Was ich in der Tat auch nutze für die 40/80-Umschaltung, siehe verlinkten Thread.

  • In der Zerro-Page Adresse $E7 bzw. 238 wird abgelegt, die rechte Grenze des Fensters.

    Hex $e7 ist dezimal 231.

    Hex $ee ist dezimal 238.

    In $e7/231 steht die höchste Spaltennummer der aktuellen Fensterdefinition, auch auf dem VDC kann der Wert mal 39 werden. Mir fällt auch spontan ein Beispielprogramm ein, wo das der Fall ist.

    In $ee/238 steht die höchste Spaltennummer der maximal möglichen Fensterdefinition, das ist in der Tat 39 auf dem VIC und 79 auf dem VDC.

    Die Adresse braucht man nur auslesen, bei Ergebnis 39 oder 79 hat man dann die Antwort.

    Und was soll man damit anfangen? Bereits in Beitrag Bitte melde dich an, um diesen Link zu sehen. wurde doch schon Software genannt, die beide Videoausgänge gleichzeitig nutzt. Und selbst Software, die nur einen nutzt, kann die Systemvorgaben von Kernal und Editor lustig ignorieren.

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

  • In der Zerro-Page Adresse $E7 bzw. 238 wird abgelegt, die rechte Grenze des Fensters. Die Adresse braucht man nur auslesen, bei Ergebnis 39 oder 79 hat man dann die Antwort.

    Eine einzelne Zeropage-Adresse samt geschriebenem Inhalt zu überwachen ist jetzt auch nicht einfacher, als die Videochips auf Zugriffe zu überwachen. Und sobald ein Programm die Hardware am KERNAL vorbei anspricht, und erst recht im C64-Modus bringt das ohnehin nichts.

  • Gibt der C128 überhaupt ein Syncsignal auf dem RGBI aus wenn dieser nicht aktiv ist?

    Selbst wenn dauerhaft ein Syncsignal anliegt ist das Bild doch in der Regel schwarz und der Pegel auf den RGBI Leitungen konstant.

    Es sollte also eigentlich relativ einfach möglich sein herauszufinden ob der RGBI Ausgang aktiv ist.

  • Selbst wenn dauerhaft ein Syncsignal anliegt ist das Bild doch in der Regel schwarz

    ...in der Regel, aber nicht immer. Wenn man z.B. eine aktuelle Ausgabe der Digital Talk auf einem 128er bootet, zeigt der VDC "Change monitor mode!" an.

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

  • Selbst wenn die Trefferquote etwa 66% ist, ist das besser als immer manuell umzuschalten.

    Wer sagt den das ein manueller Schalter nicht Priorität hat? Schiebeschalter oder Kippschalter Mittelstellung Auto, links 40 und rechts 80.

  • Oder noch besser, mach es so wie Commodore es im Tedmon:

    B169: 24 D7 BIT $D7 Teste auf 40 / 80 Zeichen Bildschirm

    B16B: 10 01 BPL $B16E Bei 40 Zeichen zur Step Division

    B16D: E8 INX Bei 80 Zeichen Bildsch. Stepzahl/16

    616E: 46 62 LSR $62 Division des 3 Byte Operanden OP1

    Das gehört zum M Befehl.

    Wem es beim Bit zählen schwindelig wird, der hat zuviel davon.

    Alt werden ist schön, das Altern nicht.

  • Du meinst also man soll die nutzlose Z80 CPU beschäftigen? um es irgendwo auf einen IO Pin umzuleiten?

    Oder wie willst du von außen (Hardware) daran kommen?