ASCII nach PETSCII umwandeln

Es gibt 25 Antworten in diesem Thema, welches 4.714 mal aufgerufen wurde. Der letzte Beitrag (16. Februar 2022 um 16:09) ist von TD1334.

  • Ich schreibe mir gerade einen Tastaturroutine und dabei habe ich mich mit den Dekodiertabellen beschäftigt. Zum einen glaube ich dass im C64 WIKI ein Fehler ist.

    Unter Bitte melde dich an, um diesen Link zu sehen. steht

    Zitat

    Aus der jeweiligen Tastencodetabelle wird der Bitte melde dich an, um diesen Link zu sehen.-Code der - gegebenenfalls mit der Steuertaste gemeinsam gedrückten - Taste ermittelt.

    Das ist IMO aber nicht der PETSCII-Code der da in der Tabelle steht, sondern der ASCII-Code.

    in Zeile 2 steht an der dritten Stelle $41:

    Code
    :EB81 14 0D 1D 88 85 86 87 11
    :EB89 33 57 41 34 5A 53 45 01

    Das ist aber der ASCII-Code für 'A'. Dieser Wert ist auch der A-Taste zugeordnet. Die ersten 8 Werte sind die Codes für die Tastaturmatrix Zeile 0, die zweite Zeile für Matrixzeile 1 usw. und in Matrixzeile 1 ist Bit 3 die Taste A. Kann das jemand bestätigen? Dann sollte man eventuell den WIKI Eintrag korrigieren.

    Jetzt die eigentliche Frage:

    Wenn in den Dekodiertabellen die ASCII-Werte stehen, wie wird das dann in PETSCII umgewandelt. Denn irgendwo muss das Zeichen ja auch am Bildschirm landen und der PETSCII-Code für 'A' ist 1 und nicht $41. Ich habe aber im Kernel keine Tabelle gefunden die ASCII in PETSCII abbildet, also wird es u.U. im Code passieren. Weiss jemand wo oder wie man das am Besten macht? Oder muss ich dann einfach prüfen ob der Wert >= 'A' UND <= 'Z' ist und dann einfach $40 abziehen. Das würde dann zwar für die Buchstaben funktionieren, aber ich weiss nicht wie das dann mit den ganzen anderen Zeichen aussieht. Vor allem mit den ganzen Grafikzeichen, die ja im ASCII nicht existeren.

  • Der PETSCII-Code für "A" ist 0x41 (wie der ASCII-Code). Der Bildschirmcode für "A" ist 1. In Bitte melde dich an, um diesen Link zu sehen. gibt es ein Routinen, die von PETSCII nach Bildschrimcode wandeln.

  • In screencodes vs. PetASCII gibt es ein Routinen, die von PETSCII nach Bildschrimcode wandeln.

    Naja, der Code ist auch im Kernal vorhanden ... ;)

    Und der wird ausgeführt, immer wenn du PRINT verwendest oder BSOUT

    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.

  • Ich schreibe mir immer was anhand dieser Tabellen zusammen, oft braucht man ja gar nicht alle Fälle:

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Die oben verlinkten Routinen sind aber sehr elegant, meine sind meist auch nicht kürzer ^^

    ────────────────────────────────────────────────────────────
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    ────────────────────────────────────────────────────────────

  • In screencodes vs. PetASCII gibt es ein Routinen, die von PETSCII nach Bildschrimcode wandeln.

    Naja, der Code ist auch im Kernal vorhanden ... ;)

    Und der wird ausgeführt, immer wenn du PRINT verwendest oder BSOUT

    Gibts dazu auch eine etwas kompaktere Funktion? Ich habe versucht mir das aus dem Kernel rauszulesen, aber das ist viel zu kompliziert. Wäre schön, wenn es da auch so eine kompakte Funktion gibt, wie die nach PETSCII.

  • ASCII nach Screen mache ich so:

    habe ein DEMO auf GITHUB gefunden und die ASCIIs vom Source passen nicht im Schirm deshalb kurz gespielt - so muss es sein

    Bitte melde dich an, um diesen Link zu sehen.

    die Relevante Umwandlung ist das:

    Code
     lda textdata, y ;hole ASCIIDATA
       
      
      cmp #$60
      bcc uppercase ; kleiner als $60 dann ist es Uppercase also lassen 
      sbc #$60 ; sonst $61 abziehen....
      jmp lowercase
  • Gibts dazu auch eine etwas kompaktere Funktion? Ich habe versucht mir das aus dem Kernel rauszulesen, aber das ist viel zu kompliziert. Wäre schön, wenn es da auch so eine kompakte Funktion gibt, wie die nach PETSCII.

    Vielleicht hilft dir das weiter. Sind zwei Funktionen screen2pet und pet2screen. Beide Funktionen erwarten im Akkumulator den Wert und zerstören das X-Register. Rückgabe ist über A

    Ich habe dazu die Tabellen hier Bitte melde dich an, um diesen Link zu sehen. und hier Bitte melde dich an, um diesen Link zu sehen. verwendet.

    Sollten nicht alle Fälle berücksichtigt werden müssen könnte man das auch wesentlich einfacher und kürzer umsetzen.

    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • Muss ich mal mit meiner Funktion vergleichen. Bei der Pet2Screen, gibts da auch was ohne Tabelle?

    Inwiefern ohne Tabelle?

    meinst du sowas?

    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • ja mathematisch statt lookup (aus 256 Zeichentabelle)

    Die erste Routine nutzt nur eine 8 Byte Tabelle, die für die 32 Byte Blöcke einen Wert enthält der dazu addiert wird.

    Das habe ich ja in der zweiten Routine mathematisch gemacht. Grundlage sind aber weiter die 32 Byte Blöcke mit den beiden Ausnahmen für PI und das andere Zeichen.

    Das schöne aus der ersten Routine ist, das die einen grossteil der Routine sowohl für pet2screen als auch für screen2pet nutzt.

    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • poste doch den Code für uns wenn er funktioniert - dann verwenden wir den in Zukunft... Danke !

    Wobei ich ja sagen muss das Tabellen immer besser sind (beim Introprogrammieren) weil weniger CPU zyklen benötigt werden.

    Ganz fein ist es natürlich im ASM File ASCII Text zu haben und dem Assembler per Script vor dem Assemblieren zu sagen das alle ASCIIs zu PETSCREEN Codes zu verwandeln. Dann brauche ich keine Tabelle und keine Mathe im C64 Program. Denke die Grossen der Szene machen das genauso....

  • poste doch den Code für uns wenn er funktioniert - dann verwenden wir den in Zukunft... Danke !

    Das kann noch dauern. Im Moment arbeite ich verstärkt an meinen C++ PC Projekten. Ich kann meine begrenzte Zeit nur entweder Commodore oder PC schenken, aber meistens nicht beiden. :)

    Zitat

    Wobei ich ja sagen muss das Tabellen immer besser sind (beim Introprogrammieren) weil weniger CPU zyklen benötigt werden.

    Ja, da hast du wohl gar nicht so unrecht.

    Zitat

    Ganz fein ist es natürlich im ASM File ASCII Text zu haben und dem Assembler per Script vor dem Assemblieren zu sagen das alle ASCIIs zu PETSCREEN Codes zu verwandeln. Dann brauche ich keine Tabelle und keine Mathe im C64 Program. Denke die Grossen der Szene machen das genauso....

    In meinem ASM Code verwende ich eigentlich nur PETSCII. Nur wo ich muss, verwende ich ASCII. Am liebsten wäre mir eigentlich wenn es für den PC ein echtes PETSCII Keyboardmapping gäbe, so dass man dann genau das reinschreiben kann, was dann am C64 auch so aussieht. :D

  • Im C64Studio kann man von vornherein festlegen (!text, !scr oder !pet) wie man seinen Text verwenden möchte.

    Mit was schreibst du denn deinen ASM Code?

    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • Mit Notepad++ oder Visual Studio Code.

    Ich kann dir nur empfehlen das C64Studio mal auszuprobieren, gerade auch das debugging mit WinVice gefällt mir dort ganz gut.

    Und so Sachen wie Ascii, Petscii oder Screencodes sind dann kein Problem mehr.

    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • Ich kann dir nur empfehlen das C64Studio mal auszuprobieren, gerade auch das debugging mit WinVice gefällt mir dort ganz gut.

    Und so Sachen wie Ascii, Petscii oder Screencodes sind dann kein Problem mehr.

    Kann ich da ca65 einbinden?

  • Ich kann dir nur empfehlen das C64Studio mal auszuprobieren, gerade auch das debugging mit WinVice gefällt mir dort ganz gut.

    Und so Sachen wie Ascii, Petscii oder Screencodes sind dann kein Problem mehr.

    Kann ich da ca65 einbinden?

    Ich denke nicht. Habe eben mal nachgesehen ob ich da eine Option finde. Ich glaube C64Studio setzt auf die ACME Syntax hat wohl aber einen eigenen Assembler integriert ( Endurion könnte da mehr Details zu nennen)

    Ich mag halt das Komplettpaket aus IDE, Tools und einfachen assemblieren und dann den Vice starten.

    Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

  • Du kannst Custom Build-Steps verwenden, dann kannst du externe Programme aufrufen. Der eigene Assembler kennt ein paar verschiedene Syntaxen, (ACME, DASM, PDS).

    Viel von den Vorteilen geht halt verloren, wenn eigene Assembler nicht verwendet wird; dann fehlen die ganzen Meta-Daten für die Code-zu-Adressen-Zuordnung etc.

    Müsste ich mir mal ansehen, ob ich C64Studio nicht auch die ca65-Syntax beibringen kann.

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.