Hello, Guest the thread was called1.5k times and contains 33 replays

last post from ZeHa at the

Wie bekomme ich den Grafikmodus 320x200 in ASM für den Plus4?

  • Hallo, guten Tag.

    Ich habe hier in kickc den Grafikmodus (ASM) 160x200, der auch funktioniert im Plus4

    Finde keinen Befehl im TED für die Hohe Auflösung 320x200


    Danke.


  • Finde keinen Befehl im TED

    Wenn Du in einen Blick in eine beliebige TED-Doku wirfst, findest Du einen.


    Tschakka, Du schaffst das!

    Ich glaub an Dich!


    EDIT: Und wenn Du den geposteten Code selbst geschrieben anstatt von anderswo zusammenkopiert hättest, müsstest Du die Frage gar nicht erst stellen.

  • Du bist im Hires-Modus solange Du nicht in den Multicolor-Modus wechselst. Was Du evtl suchst ist der Bitmap-Modus? Diesen findest Du in der Tabelle, vielleicht ist das Problem dass Du nach einem "Befehl" suchst; Du musst einen entsprechenden Wert in ein Register schreiben um den TED in den entsprechenden Modus zu versetzen.

  • Danke.

    Wenn ich das setze kommt kein Hires.

    Es werden zwar die Bytes (1. Zeile) gesetzt aber wenn ich eine Taste drücke wird auch das andere geändert.


    Irgendwie kommt jetzt bei Hires Grafik der Text mit rein.

    Was muss denn jetzt bitte noch wie geändert werden?

    Da weiß ich nicht mehr weiter.


    Danke.


    -----------------------------

    lda $ff07

    ora #%00000000

    sta $ff07

    -----------------------------

  • -----------------------------

    lda $ff07

    ora #%00000000

    sta $ff07

    -----------------------------

    Dieser Code duerfte exakt null Auswirkung haben... Du liest einen Wert, veraenderst ihn ueberhaupt nicht (ein ODER mit 0 aendert nix) und schreibst ihn wieder zurueck ins Register...

  • Das wäre jetzt ein gutes Beispiel für das, was ich in anderen Threads schon mehrfach angemerkt hatte:


    eine Art HAL scheint es auch in den modernen Entwicklungsumgebungen bislang nicht zu geben.


    Würde heutzutage tatsächlich erwarten, dass ich hier ein paar Funktionsheader aus Libraries habe wie (rein phantasiert jetzt):


    TED_init(void)

    TED_Mode(int)

    TED_GlobalColumbs(int)


    in denen solche Dinge definiert und soweit abstrahiert sind, dass ein Aufruf unter c Sinn macht. Natürlich muss man auch dann noch wissen, wie z.b. das Argument int im Mode auf die einzelnen Register des TED aufgeteilt wird, sprich welche Werte von int was auslösen. Vermutlich stellt das Basic oder gar der Kernal hier bereits geeignete Routinen zur Verfügung, auf die man aufsetzen kann.


    Kann man natürlich bis runter zu Ersetzungstabellen und Einzelbits durchziehen, aber so wie oben, durch Assembler Pragmas, die letztlich nix Anderes sind als die Pokes am C64 Basic 2.0, das erscheint gerade bei den 264ern mit dem guten Basic 3.5 eher als Rückschritt...


    Bevors wieder Klagen hagelt: NEIN, ich habe NICHT in die plus4.h reingeschaut, sondern nur auf den AssemblerCode und nur darauf bezieht sich mein Kommentar. Wenn also in plus4.h solche Prototypen definitiert sind, dann wäre allein der Code unsinnig (es sei denn, es wäre extrem zeitkritisch...) und der Hinweis auf die .h Dateien und entspr. Prototypes zielführend ;-)


    Definitionen wie Char * screen *8192 sind -angesichts von "nur" 64k RAM für "Alles" nicht nur "verschwenderisch", da 320x200/8 immer noch 8000 sind und nicht 8192, sondern stellen auch den Compiler vor große Herausforderungen, da wir hier einen 8Bit-Prozessor mit NUR 2 Stk. ACHT-Bit Index-Registern haben, d.h. wäre eine Aufteilung in x und y (Koordinaten) sinnvoller, die beiden index-register heissen zufällig auch schon so (kann aber sein, das der Compiler das dann ganz anders löst, da er fürs "housekeeping" auch ressourcen vorhält. Bitte bei allem C-Komfort immer daran denken, wie begrenzt die Ressourcen auf dem Zielsystem sind!


    Hinsichtlich der verschiedenen Funktionsmodule des CIA 6526 habe ich solch allgemeine Templates, um z.b. einen SPI-Kanal aufzumachen und mit SPI-Mode(1,1) dann zu senden oder auf Empfang zu lauschen, bislang vergeblich gesucht. Hinweise dazu jederzeit gerne willkommen.

  • Was meinst du? Das ist doch der Hires-Modus, den du da siehst. Gelöscht und mit ein paar 129er Werte gefüllt...so, wie dein Code es vorsieht. Der Text im Hintergrund definiert in dem Modus eben die Farben. Du müsstest den Textspeicher (3072) (bzw. den Farbspeicher (2048) für die Intensitäten) auch noch entsprechend setzen, um eine einheitliches Bild zu bekommen. Und was meinst du mit "aber wenn ich eine Taste drücke wird auch das andere geändert"?

  • Wenn ich Text eingebe zb "HALLO" dann erscheinen auf den Hires-Screen auch die Buchstaben aber nicht als Ascii sichtbar sondern als farbige Quadrate so groß wie der Text im Textmodus.

    Ja, weil der Textbildschirm im Grafikmodus für die Farben zuständig ist (wie ich oben auch geschrieben habe). Das ist ganz normales Verhalten.

  • -------------------------------

    Dieser Code duerfte exakt null Auswirkung haben... Du liest einen Wert, veraenderst ihn ueberhaupt nicht (ein ODER mit 0 aendert nix) und schreibst ihn wieder zurueck ins Register...


    lda $ff07

    ora #%00000000

    sta $ff07

    -------------------------------


    Da bei Multicolor eine "1" stand bei Bit 5 , habe ich einfach mal eine "0" (Hires) reingesetzt. Wäre , wie du schreibst nicht nötig beim Neustart.


    Danke.

  • Da bei Multicolor eine "1" stand bei Bit 5 , habe ich einfach mal eine "0" (Hires) reingesetzt. Wäre , wie du schreibst nicht nötig beim Neustart.

    Es ist nicht nur nicht nötig, es tut nichts. Auch dann nicht, wenn Multicolor schon an ist. Wenn du das explizit ausschalten willst, musst du sowas machen:


    Code
    1. lda $ff07
    2. and #%11101111
    3. sta $ff07
  • --------------------------------

    Ja, weil der Textbildschirm im Grafikmodus für die Farben zuständig ist (wie ich oben auch geschrieben habe). Das ist ganz normales Verhalten.

    -------------------------------


    Danke.

    Hmmm... , bei Multicolor erscheinen keine Quadrate beim Taste drücken.


    Aber irgendwie muss evtl noch etwasverlegt werden bei Benutzung von Hires.

    Weiß nur nicht was und wie.

  • Hmmm... , bei Multicolor erscheinen keine Quadrate beim Taste drücken.

    Nein, weil die Farbverwaltung da anders ist. Die Farbe einzelner Pixel ändert sich dort aber auch durch "Übertippen". Wenn da, wo man tippt, aber eben keine Pixel sind, dann sieht man das auch nicht. Das ist nicht ganz trivial. Ohne genaueres Verständnis des Aufbaus wirst du da nicht weit kommen. Hier steht z.B. ein wenig darüber: http://cbmmuseum.kuto.de/zusatz_7360_ted.html

  • Jetzt habe ich nicht getippt.

    Auf den Hires-Screen ist der Start-Text zu sehen wie der Plus4 startet, als farbige Kästchen.


    Wenn ich 8000 Byte setze mit den Wert 129 , verschwindet der Text nicht. Die farbigen Kästchen bleiben bestehen.

    Das verstehe ich nicht.


    Danke.

    Darum meine Frage bitte, was muss noch verlegt werden damit das nicht auftritt.



  • Von kickc


    plus4.h



    mos7360.h


  • Auf den Hires-Screen ist der Start-Text zu sehen wie der Plus4 startet, als farbige Kästchen.


    Wenn ich 8000 Byte setze mit den Wert 129 , verschwindet der Text nicht. Die farbigen Kästchen bleiben bestehen.

    Das verstehe ich nicht.

    Du hast das Prinzip nicht verstanden. Da muss nichts verlegt werden (jedenfalls nichts zwangläufig). Das, was im Textmodus der Text ist, ist im Hires-Modus die Farbe. Das ist auf dem C64 im Prinzip genauso. Mit deinen 129er-Werten setzt du die Pixel. Nicht die Farbe! Die Quadrate sind keine Pixel, es sind leere Stellen in der Hiresgrafik, für die der (ehemalige) Text die Hintergrundfarbe setzt.

  • eine Art HAL scheint es auch in den modernen Entwicklungsumgebungen bislang nicht zu geben.

    Doch: https://cc65.github.io/doc/tgi.html


    Geht leider an dem vorbei, was ich meinte, lediglich die dort enthaltene TGI_ioctl geht ein wenig in diese Richtung.


    Als HAL würde ich es z.b. bezeichnen, wenn ich auf nen beliebigen unterstützten System, z.b. C=, BBC, Apple-II ...., z.b. eine Funktion habe

    CRT_Set_BGColor(int8 red,int8 green,int8 blue), die die Hintergrundfarbe passed zu den im Standard-RGB-Farbraum übergebenen Farbkoordinaten einstellen (und auf Systemen mit wenigen Farben eben die Passendste auswählen,bei den nur 16 Farben eines C64 ein ziemlicher Kompromiss, ganz klar, aber dafür universell)


    Oder z.b. für die serielle Schnittstelle


    COM_Get_Max_Port(void) erst mal rückmeldet, wie viele COMs es findet, 0 oder -1 heisst keine.


    COM_Get_Max_Baud(int port) würde dann dazu die maximale Baudrate abliefern

    COM_Open(int port, long baud, char parity, int stoppbit) könnte man einen Kanal mit einer Baudrate und Parity und Stoppbits konfigurieren und öffnen.


    Wie gesagt, Bezeichnungen oben sind Schall und Rauch, es sollten eben nur die gerätespezifischen Dinge so gut wie möglich versteckt werden, aber Limitierungen durchaus abfragbar sein (hier z.b. MaxBaud), um gegebenenfalls auch dem User dann eine passende Auswahl anbieten zu können (COM1 2400 Baud, Typ CIA, COM2 38400 Baud, Typ 6551) etc.


    Das TGI stellt hier sehr komplexe Zeichenfunktionen zur Verfügung, aber die Basis, sprich: welche Auflösung mit welcher Bittiefe ist überhaupt möglich, welche Farbtiefe wird unterstützt, wieviele Zeichen/Zeile und Zeilen hat der Modus, wieviele Modi und Bildschirmseiten gibt es, die sind nicht oder nur sehr versteckt vorhanden. Somit muss man die relativ große Bibliothek mit einbinden, wenn man z.b. nur komfortabel die Hintergrundfarbe verändern will...


    Also HW <-> HAL <-> System <-> Support <-> Application würde ich mir da aus Softwaresicht vorstellen, jeweils klein und modular gehalten, damit man den verdammt kleinen Speicher auch gut nutzen kann und dennoch nicht auf eine klare Struktur verzichten muss.



    Aber wie gesagt: sind nur fromme "Wünsche", ich selbst würde sowas bestenfalls benutzen, jetzt in 2021 so eine HAL für die alten Kisten selbst programmieren würde ich nicht, da spiel ich lieber mit den Spielen aus der Jugend und schwelge in Erinnerungen ;-) Oder restauriere so ne alte HW und freue mich an dem Charme der damaligen Systemumgebung, insbesondere CBM Basic 2.0 ...