Hello, Guest the thread was viewed781 times and contains 5 replies

last post from BastetFurry at the

[CC65] C128er VDC und Uppercase PETSCII, Snippet gesucht

  • Die CC65 Runtime ist ja der Ansicht auf Mixed Case zu schalten und man muss wieder zurück auf Upper Case schalten wenn man PETSCII verwenden will.
    Da aber Conio auch beim VDC direkt auf selbigen zugreift kann ich hier lange versuchen mit dem entsprechendem Controlcode umzuschalten.
    Hat mal wer nen Snippet was unter C mitm CC65 den Zeichensatz wieder richtig stellt?

  • Da aber Conio auch beim VDC direkt auf selbigen zugreift kann ich hier lange versuchen mit dem entsprechendem Controlcode umzuschalten.

    ...ich bin mir nicht sicher, was der Satz ausdrücken soll.


    Aber: Das aktuelle Attribute-Byte steht in Speicherstelle $f1, mit dem höchstwertigen Bit kann man also "zwischen den beiden Zeichensätzen wählen". Falls Dein Programm eh nur auf dem VDC laufen soll, dürfte diese Möglichkeit die simpelste sein.

  • Ich habe aktuell fürs erste das hier:

    Code
    1. #ifdef __PET__
    2.  POKE(59468L,12); // Make sure we are upper case with graphics
    3. #elif __C128__
    4.  set_c128_speed(SPEED_FAST);
    5.  videomode(VIDEOMODE_80COL);
    6.  cprintf("\x8e"); // <-- Fast, aber keine Zigarre...
    7. #endif


    Das geht aber so nicht. Deswegen fruch ich nach nem Snippet was ohne stdio printf auskommt und trotzdem über den Kernel umschaltet.
    Ich nehm auch ein Machinen-Snippet, das wird dann schön in ein asm volatile eingewickelt.

  • Ich habe aktuell fürs erste das hier:

    Code
    1. cprintf("\x8e"); // <-- Fast, aber keine Zigarre...

    Das geht aber so nicht.

    Aaahhh...

    Als ich MacBootMake auf cc65 umgestrickt habe, hatte ich das gleiche Problem. Ein Kommentar in meinem Source von damals besagt: "cc65 seems to garble some control codes when inside strings, so don't put them there".

    Beispiel: Der Code 0x92 für RVSOFF funktioniert wunderbar, der Code 0x8e für UPPERCASE geht nicht.

    Ich hab das nicht weiter untersucht und dann so gelöst: cbm_k_bsout(0x8e); - das funktioniert wie erwartet.

  • Ich habs. Und zwar etwas extrem blödes was absolut nicht mit Conio oder sonst was zusammen hängt.

    Code
    1. cl65 test.c -t c128 -o test.prg -O2 -Wall



    Versus

    Code
    1. cl65 -t c128 test.c -o test.prg -O2 -Wall



    Der untere funktioniert jetzt wie gedacht, der obere nicht.
    GAH! :cursing:
    Da kann ich ja dreizig Jahre den C Code verfluchen wenn die Reihenfolge der Optionen beim cl65 wichtig ist.
    Hab ich auch nur dadurch heraus gefunden weil ich mal auf blauem Dunst den Code für den 128er aus dem #ifdef heraus bewegt hatte und mir daraufhin Syntaxfehler bemängelt wurden.
    Und ich gehe wetten ein das durch ihre Position das -O2 und das -Wall auch nur Makulatur und Kunst sind.:wand:wand:wand