Hello, Guest the thread was called3.4k times and contains 43 replays

last post from BlondMammuth at the

6502 Port des vbcc C Compilers

  • Daher meine erste Frage (bitte nur, falls es echt leicht geht, ich will dir keinesfalls sinnlos Arbeit aufhalsen, die ich mit einigem Bemühen auch selber erledigen kann!): Hast du zufällig eine funktionierende Konfiguration (mit ToolChain etc.) für Eclipse Photon? Falls nicht, vielleicht schaffe ich es noch, zur Zeit entwickle ich sowieso deshalb mit einfachem Text-Editor und manuellem Aufruf. Wäre also ein "nice to have", aber nicht wirklich dringend.

    Ich weiß, dass es Nutzer gibt, die vbcc mit Eclipse benutzen, habe es selbst aber leider noch nicht gemacht.


    Die zweite Frage betrifft Memory Layout, OS, Libs. Ich brauche mindestens 32K+4K, also 36K am Block freies RAM (weil ich mein eigenes Memory-Management einbaue). Ist das mit dem VBCC machbar? Zusätzlich möchte ich die i/o Basics nützen, also Files öffnen, lesen, schreiben. Da sollte die stdio eigentlich ausreichen, und die entsprechende Lib. Fragt sich nur, ob sich dann die 36 K RAM am Block noch ausgehen? Ich habe keine Vorstellung, wie groß die entsprechende Lib dann ist, wo sie liegt, etc. Eventuell müsste ich meinen Speicherbedarf auf 18K runterregulieren?


    LG BL


    update: Natürlich brauche ich dann auch float, habe ich ganz vergessen, wobei es für den Anfang sicher nicht weiter tragisch ist, welchem Standard die gehorchen. Die BASIC-Floats oder ähnliche Improvisationen würde für den Anfang sicher völlig ausreichen. Würde das den Platzbedarf zusätzlich erhöhen, oder sind die schon von Anfang an drin in einem Compilat?

    Die Standardkonfiguration sollte das RAM von 0x801 bis 0xCFFF, also 50KB nutzen. Da muss dann aber Code, Lib, Stack etc. mit rein. Zur Größe der Lib kann ich noch nichts genau sagen, weil ich sie noch nicht für 6502 optimiert habe. Hängt aber davon ab, was man alles benutzt. Was man nicht aufruft, wird normalerweise auch nicht gelinkt.


    Die WozFP-Floating-Point-Routinen brauchen ca. 1KB, glaube ich. Das ist aber nicht der volle C-Umfang, sondern nur Grundrechenarten, exp(), log().

    Die nächste Version wird wohl Support für die SANE-Routinen haben und IEEE-konforme 32/64Bit Arithmetik mit ziemlich komplettem C-Math Umfang bieten. Die liegen dann aber bei ca. 6KB für die Basisfunktionalität plus 4KB für erweiterte Funktionen.

  • Die WozFP-Floating-Point-Routinen brauchen ca. 1KB, glaube ich. Das ist aber nicht der volle C-Umfang, sondern nur Grundrechenarten, exp(), log().

    Das wäre aus meiner Sicht genug, und 1 KB klingt sehr günstig. Wenn das zukünftig über Option gesteuert wird (ich bilde mir ein, sowas gelesen zu haben), kann ich es weiter verwenden.

    Die Standardkonfiguration sollte das RAM von 0x801 bis 0xCFFF, also 50KB nutzen. Da muss dann aber Code, Lib, Stack etc. mit rein.

    Klingt gut! Das wären dann deutlich über 10KB, die ich noch frei habe. Ich kann noch nicht so richtig abschätzen, ob das ausreicht, aber es klingt vielversprechend, und mit sparsamem Umgang mit den Libs könnte es sich ausgehen. Ich bin echt neugierig. Danke erst einmal!

  • ich habe eine erste Version der 6502 Portierung meines C Compilers vbcc hochgeladen: http://www.compilers.de/vbcc.html

    Es gibt eine neue Version unter: http://www.compilers.de/vbcc.html


    Major changes since Alpha 1:


    - fixed some bugs

    - added NES target including lazyNES library (NES) (thanks to Matthias "lazycow" Bock)

    - added support for banked memory and far pointers

    - added 32/64bit IEEE compliant floating point based on SANE (thanks to Andy Werner)

    - added argv handling (C64) (thanks to Stefan Haubenthal)

    - improved code generation for larger types

    - added config for re-runnable programs (C64)

    - more examples/demos

  • Sowas würde ich mir wünschen für die 6309 CPU!

    Da gibt es ja nur das Small-C für MS-DOS, der emitierte Code ist, - nicht gut.

    Nachdem hier einige bzgl. 6309 gefragt hatten: Es gibt ein frühes Preview von vbcc für 6809 auf http://www.compilers.de/vbcc.html


    Ist von einem 68hc12-Backend abgeleitet und bisher noch nicht sonderlich optimiert. Die Testsuite meldet auch noch ein paar Fehler, die ich mir anschauen muss. Aber vielleicht will jemand mal drauf schauen und auf echter Hardware testen (ich habe bisher nur auf Simulator getestet).


    Um noch was zum Thema (6502) passendes zu posten: Matthias Bock hat hier gute Ergebnisse mit vbcc6502 auf NES gemeldet: http://forums.nesdev.com/viewt…61f28c12f525458c5#p251672

  • Toller Erfolg, und wohlverdient!

  • Es gibt ein neues Update unter: http://www.compilers.de/vbcc.html


    Major changes since Alpha 2:


    - first version of an Atari 8bit target (Atari)

    - configuration for running banked code with REU (C64)

    - configuration for TxROM mapper (NES)

    - some speed and size optimizations of the C library (thanks to Frank Wille) => up to 234 dhrystones/s on C64

    - chars are unsigned by default for slightly better code

    - return values of banked function calls work now

    - setjmp/longjmp added

    - new option -depobj to fix problems with -deps

    - zpage now supports multiple arguments (vasm)

    - some support for mixing source and assembly with -g

    - a few bug fixes

    - updated/improved documentation

  • Hi, ich hab das NES-bubbles-demo aus den vbcc6502 Beispiel Programmen für den C64 portiert. Das demo ist in der Hinsicht interessant, dass es zählt wieviele Sprites es in 50 fps bewegen kann. (also so eine Art Mini-Benchmark)

    links (bzw. oben) : compiliert mit cc65, rechts (bzw. unten) mit vbcc6502

    Mit dem cc65 compiliert mit -Oris -Cl und es bewegen sich: 7 Sprites

    Mit dem vbcc6502 compiliert mit -O3 und es bewegen sich: 20 (!) Sprites

    download: bubbles64.zip (bubbles64-cc65.prg, bubbles64-vbcc.prg und source für vbcc6502)

  • daybyter: War das eine Aufforderung an mich oder fragst du mich um Erlaubnis es auf gcc 6502 portieren zu dürfen? (Erlaubnis erteilt) :D

    Meines Wissens gibt es keine lauffähige Version eines gcc 6502. Falls ich mich irre, dann bitte ich um den Download. (Binaries für Linux/Mac/Windows, kein Source!) Dann nehme ich den Federhandschuh auf... Vielleicht. :saint:

  • Was sind für Dich typische Graphic- und Sound-Libs? Für welche Zielplattform? Dir ist klar das die meisten 6502-Plattformen sehr spezielle Video- und Audiohardware haben und zudem sehr langsam sind?

    Oh, ich bitte um Verzeihung, mir geht es konkret um den C64. Und klar weiß ich das, sonst würde ich mich kaum im diesem Forum herumtreiben. :D


    Ich habe damit gemeint, ob es Libs gibt, um den VIC-II und den SID anzusprechen, die sich mit dem VBCC mitlinken lassen, oder vielleicht im Source-Code, die sich compilierem lassen.

  • Ich habe damit gemeint, ob es Libs gibt, um den VIC-II und den SID anzusprechen, die sich mit dem VBCC mitlinken lassen, oder vielleicht im Source-Code, die sich compilierem lassen.

    Welche Funktionen schweben dir zum Beispiel so vor?

    Ja, das Übliche halt. Einschalten der HiRes-Graphik, Farbwahl, Punkt setzen, Linie, Kreis, etc. Solche Sachen.

    Hab sowas mal für den cc65 und gcc-6502 gesehen. Könntest Du evtl portieren.

    Ja, in die Richtung habe ich auch schon gedacht. Weißt du noch, wo du es gesehen hast?

  • cc65 kommt doch mir einer Grafik Lib.


    Eine Version als Header Files hatte ich mir mal selbst geschrieben.


    https://github.com/daybyter/c_shooter

    Geil, danke für den Link! Ja, der CC65 kommt mit einer, aber der VBCC nicht. Drum habe ich hier gefragt. Ich weiß nicht, wie weit das Format solcher Libs normiert ist, ob also diese Libs mit dem VBCC funktionieren würden. Ich gehe aber davon aus, dass deine Sourcen mit wenigen oder gar keinen Änderungen eigentlich auf dem VBCC funktionieren sollten. So weit hab ich mich aber noch nicht eingearbeitet, um das jetzt schon 100%ig beurteilen zu können.


  • Ich habe eine neu Version hochgeladen: http://www.compilers.de/vbcc.html


    Major changes since last update:


    - new target: MEGA65 (native mode, some banking support)

    - new target: Commander X16 (thanks András Péteri)

    - new options -prefer-statics/-force-statics (allocate local variables in static memory rather than on the stack)

    - new option -range-opt (first implementation of some range-based optimizations changing induction variables to smaller types)

    - added support for o65 object file format

    - added support for Oric target format

    - better use of x register

    - improved cross-module function-inlining

    - IEEE math library works with 65c02

    - several code generation improvements

    - fixed several bugs

    - slightly reworked examples

  • Eine Frage insgesamt zum VBCC, und bitte nicht als Kritik gemeint, rein damit ich mich auskenne: Sehe ich das richtig, dass x64 nicht unterstützt wird (da x86 und i386 32-bitter sind)? Bzw. gibt es auch keine 8086, 80186, 80286 Unterstützung?


    Zusatz: Hintergrund der Frage ist, dass ich unter Linux (auch auf Windows portierbar angestrebt) einen kleinen Interpreter schreiben will, der gleichermassen auf modernen Plattformen wie auch auf dem C64 funktioniert. Da würde sich natürlich ein Compiler, der beides kann, idealerweise anbieten. Aber da auch GCC denselben Standard unterstützt, kann ich auch für die eine Seite gcc und für die andere vbcc verwenden.