[Entwicklung] CS2SX - Switch Homebrew App in C# schreiben

  • Ich weiß nicht, wie es euch geht, aber mir persönlich fällt das Schreiben von Apps in C / C++ trotz solidem Grundlagenwissen immer noch nicht besonders leicht.

    Da ich mich in C# deutlich wohler fühle, kam mir die Idee, das Ganze anders anzugehen. Es gibt ja bereits Compiler-/Analyse-Tools wie Roslyn – also warum nicht in die Richtung eines Transpilers denken?

    Ich habe mir diese Woche ein bisschen Zeit genommen und angefangen, genau so etwas umzusetzen: einen einfachen Transpiler mit dem Ziel, Nintendo Switch Homebrew in C# zu schreiben und anschließend nach C zu übertragen.

    Das Projekt steht noch ganz am Anfang, und ich kann aktuell selbst noch nicht sagen, wie weit ich das Ganze treiben werde. Aber ein erster Meilenstein ist erreicht: Es ist bereits möglich, einfache Homebrew-Apps für die Switch in C# zu schreiben und nativ auszuführen (über den Umweg des Transpilings).

    Falls es jemanden interessiert:

    Wie gesagt, noch ziemlich early stage und eher ein Experiment – aber vielleicht findet es ja der ein oder andere spannend oder hat Ideen dazu.

    :nabend:

  • [UPDATE] CS2SX - C# to Nintendo Switch Transpiler

    Moin, kleines Update zum aktuellen Stand. Hat sich einiges getan seit dem ersten Post:

    Neu hinzugekommen:

    Verbessert:

    Code
    [*] Inkrementeller Build — nur geänderte Dateien werden neu transpiliert
    [*] string.Format / String-Interpolation stabiler
    [*] foreach über alle Collection-Typen
    [*] Konstruktor-Generierung robuster
    [*] Handler-Architektur refactored — neue Features lassen sich
        einfacher ergänzen

    File I/O war der größte Schritt — damit lassen sich jetzt echte Save-States, Configs und Logs auf die SD-Karte schreiben. Fühlt sich zum ersten Mal nach einer richtigen App an.

    Noch fehlt: grafische Oberfläche, LINQ, async/await und ein paar C#-Patterns. Für kleine Tools und Utilities taugt es aber schon.

    Repo: https://github.com/cybercom684/CS2SX

  • [UPDATE] CS2SX — C# to Nintendo Switch Transpiler

    Moin, größeres Update seit dem letzten Post. Hat sich deutlich mehr getan als erwartet.

    Neu hinzugekommen:

    • Framebuffer-Modus — Graphics.Init(1280, 720) schaltet auf direktes
      Pixel-Rendering um, kein Console-Output mehr
    • Graphics-API — FillScreen, SetPixel, DrawRect, FillRect, DrawLine,
      DrawCircle, FillCircle, DrawText, DrawChar, DrawTexture
    • 8x8 Bitmap-Font (CP437) — eingebettet, kein externes Asset nötig
    • MeasureTextWidth / MeasureTextHeight
    • Color.RGB / Color.RGBA + vordefinierte Farb-Konstanten
    • Texture-Klasse mit IDisposable / using-Statement
    • Nullable-Typen (T?) — HasValue, Value, ??, ?.
    • Pattern Matching — is-Pattern mit Binding-Variable, switch-Expression,
      Relational-Pattern (>= / <), not null, and/or, when-Klausel
    • Lambda-Ausdrücke — werden zu statischen C-Funktionen geliftet,
      Captures via Capture-Struct
    • Properties mit explizitem Getter/Setter-Body → C-Funktionen
    • virtual / abstract / override — vollständige vtable-Infrastruktur
    • abstract-Klassen
    • do...while
    • using-Statement (ruft Dispose() automatisch auf)

    Verbessert:

    • Zwei Render-Modi — Console (ANSI) und Framebuffer schließen sich
      gegenseitig aus, Wechsel über Graphics.Init() in OnInit()
    • TranspilerContext — kein globaler State mehr, alles pro-Methode
    • String-Puffer — lokale char[]-Variablen statt globalem _cs2sx_strbuf,
      verhindert Buffer-Kollisionen bei verschachtelten Aufrufen
    • TypeInferrer robuster — mehr Ausdrucks-Typen werden korrekt erkannt
    • Konstruktor-Strategie refactored — SwitchApp, Control-Subklassen
      und normale Klassen haben eigene Strategy-Implementierungen
    • NullableHandler und PatternMatchingWriter als eigene Module

    Der Framebuffer-Modus war der größte Schritt. Damit ist CS2SX jetzt nicht mehr nur für Text-UIs brauchbar — man kann echte grafische Apps schreiben, Pixel zeichnen, animieren, eigene UIs bauen. Alles ohne Float, ohne externe Libs, direkt auf den Framebuffer.

    Als Demo hab ich einen kleinen Showcase gebaut — drei Tabs (Dashboard, Graphics, Input), animierte Sinuswellen über Integer-Trig, Farbverläufe via linearer RGB-Interpolation, eine interaktive Controller-Visualisierung die live auf Tastendruck reagiert. Kompiliert und läuft fehlerfrei.

    Noch fehlt: LINQ, async/await, Generics, Console.ReadLine. Für Tools, Utilities und grafische Homebrew-Apps taugt es aber schon ordentlich.

    Repo: https://github.com/cybercom684/CS2SX

    TestApp bzw. Showcase-NRO im Anhang.

  • [UPDATE] CS2SX — C# to Nintendo Switch Transpiler

    Moin, wieder ein größeres Update. Seit dem letzten Post hat sich einiges getan — diesmal hauptsächlich Bugfixes und neue Sprachfeatures.

    Neu hinzugekommen:

    Verbessert / gefixt:

    Code
    [*] Felder ohne _ prefix werden jetzt korrekt transpiliert
          public uint bgColor; → self->f_bgColor  (war vorher undeclared)
    [*] Interpolierte Strings als Argumente nutzen jetzt snprintf
          $"Score: {x}" als Argument → kein printf()-Bug mehr
    [*] Methoden mit Kleinbuchstaben werden als eigene Klassenmethoden erkannt
          buildHeader() → MyApp_buildHeader(self, ...)
    [*] struct-Member-Zugriff robuster (TouchState, StickPos, eigene Klassen)
    [*] Multi-File-Projekte mit Hilfsklassen funktionieren zuverlässig
    [*] OwnMethodHandler erkennt jetzt alle eigenen Methoden unabhängig
        von Groß-/Kleinschreibung

    Touch und Stick-Input waren der größte Schritt — damit lassen sich jetzt echte Touch-UIs und Controller-gesteuerte grafische Apps schreiben.
    Als Demo läuft eine Touch-App die bis zu 10 simultane Berührungspunkte auf dem Bildschirm visualisiert, plus eine Showcase-App mit statischer Hilfsklasse und Color-Presets die zeigt wie Multi-File-Projekte aussehen können.


    Ab hier hätte ich allerdings eine Bitte: Ich würde mich sehr über Feedback und Ideen / Verbesserungsvorschläge freuen, da das Projekt mittlerweile an einem Punkt angekommen ist, wo ich nicht immer den besten Überblick behalte was für die Community am nützlichsten wäre.

    Auf Wunsch baue ich auch gerne ein Git-Bundle mit mehreren Beispiel-Apps je Bereich — um zu zeigen wie mächtig CS2SX bereits ist und werden kann.

    Ich bin überzeugt dass das Projekt Potenzial hat. Viele die gerne Homebrew schreiben würden scheuen den Einstieg in C — genau da kann CS2SX eine Brücke bauen. Mit C# als Einstiegspunkt wird die Hürde deutlich niedriger, und das könnte einiges an neuen Apps in der Community hervorbringen.

    Freue mich über jede Rückmeldung!

    Repo: https://github.com/cybercom684/CS2SX

  • Schonmal vielen Dank für eure Rückmeldungen.

    Über Bekanntheit und Meilensteine habe ich mir auch bereits Gedanken gemacht.
    Es geht mir ehrlich gesagt darum, das es so viele möglichkeiten für die Switch gäbe, aber nur sehr wenig Apps.

    Ich teste ja auch stätig, was mein Projekt auf dem Kasten hat.
    Alle Projekte möchte ich noch nicht vorstellen aber z.b. einfache Ports von bekannten Classic-Spielen wie Pong, Tetris, SpaceInvaders, Snake, PacMan, etc..
    kann ich euch allerdings schon vorstellen.

    Vielleicht ist das bereits der erste Köder, der euch zu meinem Transpiler führt.
    Im Anhang aber erstmal nur die NRO's.

    Die Projekte folgen in den nächsten Tagen.

    Ich habe in letzter Zeit gefühlt nichts anderes gemacht, bin aber auch sehr stolz auf meine Arbeit. (nur 452,77 KB :winking_face:)

    Schönen Abend euch:sleeping_face:

  • Großartige Leistung meinen Respekt dafür

    Hast du dein Projekt schon bei GBA Temp vorgestellt?

    Du wirst hier wenig Nutzer finden die damit etwas anfangen können, GBA wird von Devs deutlich besser aufgenommen da auch die Sprachbarriere Deutsch dort nicht ist.

    Mach weiter so, ich freue mich schon auf neue und spannende Apps für die switch die durch deine Arbeit erst möglich sind.

  • Guten Morgen,

    Erstmal vielen Dank an alle, die mich hier Unterstützen. Ich werde in den nächsten Tagen mal eine free-hostet.vercel Domain schalten, um mein Projekt etwas besser ins Licht zu rücken. (Link kommt die Tage)


    Auch die Info mit GBA weiß ich sehr zu schätzen.

    Ich habe mich auch mal etwas schlau gemacht, mein Projekt ist ein ziemlicher Mischenfüller, allerdings mit sehr wenigen anderen Projekten vergleichbar.

    Theoretisch ist es auch schon Stabil. Aber so richtig easy damit arbeiten wird den meisten noch schwer fallen.


    Geplant ist nun folgendes:

    - Website für CS2SX (mit Entwicklerdokumentation)

    - Ausbau der LibNX Funktionen (Intelisense unterstützung)

    - Demo Projekte sowie viele Screenshots.


    Das ist es erstmal für diese/nächste Woche.


    Aber ehrlich gesagt finde ich es krass, wie weit ich gekommen bin und die tTatsache, dass das so gut funktioniert ist hammer.

    Ich sorge für einfache Anleitungen, sodass jeder etwas davon haben wird.


    Vielleicht kommt noch eine richtig praktische App bei raus. Wenn ihr also Ideen haben solltet, was die Switch benötigt, immer her damit.


    PS. Mir fehlen auch noch logos/icons etc. Wenn sich also jemand grafisch gut auskennt, gute Ideen und bock hat :grinn:

    Edited once, last by JFY684: Ein Beitrag von JFY684 mit diesem Beitrag zusammengefügt. (April 9, 2026 at 8:00 AM).

  • Wenn ihr also Ideen haben solltet, was die Switch benötigt, immer her damit.

    Tatsächlich, ja!

    Da ich gerne Skyrim spiele, habe ich herausgefunden, dass die Switch-Saves durch das Umbenennen/ändern der Datei-Endung auch am PC spielbar sind.
    Eine kleine App, die die Saves extrahiert (à la JKSV), umbenennt und auf der SD-Karte exportiert.

    Für den Komfort natürlich auch umgekehrt: PC-Saves in Switch-Saves "konvertieren".

    Ich weiß, dass das "nur" Endungen abändern ist, aber so etwas automatisch ablaufen zu lassen fänd ich Klasse! :lachende:

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!