Unbekannten Compiler entdeckt

Es gibt 191 Antworten in diesem Thema, welches 30.883 mal aufgerufen wurde. Der letzte Beitrag (23. Mai 2024 um 20:54) ist von muffi.

  • Ich grabe den Thread mal wieder aus, weil ich in der RUN 7/85 eine Artikel zum BASS-Compiler gefunden habe. Ich habe den mal eingescannt: Bitte melde dich an, um diesen Anhang zu sehen.

    Genau genommen ist das ein Vergleich mit Basic 64 und der Artikel geht so: "BASS ist Mist, nimm Basic 64"...und der Rest vom Text dreht sich dann um Basic 64. Das ist etwas schade, aber auch verständlich...

    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.

  • Hat eigentlich wer Lust, ein BASIC V2-Frontend für llvm zu schreiben? Mit llvm-mos käme da vermutlich der mit Abstand beste BASIC-Compiler raus, und als Abfallprodukt könnte man BASIC auch zu so ziemlich allen anderen Sprachen kompilieren. :)

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

  • Schräge Idee, aber wenn, warum nicht den GCC? :D

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Öh... weil GCC das alles nicht kann? LLVM ist eine Compiler-Infrastruktur inkl. Intermediate Representation (Language). LLVM-Frontends setzen Krams in die IR um (z.B. C=>IR), LLVM-Backends machen wieder Code draus (z.B. IR=>x86-Maschinencode). Das Ding ist seit Jahren quasi das bessere GCC (das LLVM-Analog zu gcc heißt "clang") und wird auch z.B. in Form von Emscripten als C=>JavaScript-Transpiler eingesetzt. Im Software-Stack eines typischen PCs/Smartphones steckt heutzutage LLVM-Technik vermutlich gleich mehrmals an unterschiedlichen Stellen.

    Ein neues Frontend für LLVM zu schreiben ist nicht allzu schwer. GCC eine neue Sprache beizubringen dürfte nahezu unmöglich sein. Und GCC kann weder BASIC lesen noch 6502-Code generieren.

    llvm-mos ist ein 6502-Backend von LLVM. Der Code, den das erzeugt, sieht ziemlich beeindruckend aus (soweit man aus den Beispielen sehen kann). Die meisten anderen 6502-Compiler inkl. cc65 sind nicht allzu clever und erzeugen keinen sonderlich guten/optimierten Code. Beim 6502 ist es eben auch eine kleine Kunst, mit der Zeropage und den gerade mal drei Registern und dem unsymmetrischen Befehlssatz was Brauchbares zu zaubern.

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

  • 1570 ganz interessanter Absatz, den du da getippt hast. Als reiner Visual Studio-Coder war für mich der LLVM bislang immer "nur" eine Alternative zum GCC. Neben dem cc65 scheint es aber noch einen Port zu geben, den Bitte melde dich an, um diesen Link zu sehen., aber auch der compiliert wohl eher kein Basic.

    Spezialcompiler wie den Ascomp könnten wahrscheinlich viele schreiben, weil der Parser durch die Konventionen eigentlich nichts mehr zu tun hat. Auch die Variablenbehandlung ist so extrem vereinfacht, dass man sich gar nicht mehr groß anstrengen muss. Auf eine Runtime kann man so natürlich sogar verzichten. Umso mehr Respekt habe ich vor EgonOlsen71 . Ich schätze, wenn man einen universellen Compiler codet, macht man sich erst mal Gedanken um die Runtime, die im Verlauf dann doch noch wächst. Zumindest ich würde in diese Richtung denken. Und wenn man es dann macht wie der Basic-Boss (beim BasicV2 weiß ich es nicht), dass die Runtime erst zur Compilierzeit zusammengesetzt wird, ist das einfach nur noch genial.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Also ich mach's nicht...;)

    Können GCC-6502 und LLVM-mos eigentlich mit Gleitkomma umgehen? Ansonsten ist es ohnehin witzlos. Ganz theoretisch betrachtet dürfte BASIC V2 dem großartigen Optimierer, den LLVM (und auch GCC) mitbringt, den Teppich unter den Füßen wegziehen, weil es keinen strukturierten Kontrollfluss hat und es damit sehr schwierig sein dürfte, effektiv die Basic-Blocks (Basic wie in grundlegend, nicht wie in BASIC) im der IR zu finden. Darauf basieren aber viele Optimierungen. Ich habe das für MOSpeed kurz angeschaut, ob der da was sinnvolles finden könnte, es aber schnell wieder sein lassen. Es ist einfach nicht mit einer modernen Sprache mit strukturiertem Kontrollfluss zu vergleichen. Nimm nur z.B. sowas:

    Code
    10 gosub 100
    20 for i=0 to 3
    30 print "troet": next i
    40 end
    100 for i=0 to 11
    110 print i
    120 if (i and 1) = 0 then 30
    130 next i:print "hupp"
    140 return

    ...das kannst du in keiner modernen Sprache so bauen...zum Glück...aber in BASIC V2 schon und das wird auch gemacht. Deshalb gehen für BASIC V2 nur relativ eingeschränkte Dinge, die aber auch durchaus effektiv sein können. Ich habe z.B. neulich, weil ich was mit der Stringverarbeitung testen wollte, sowas geschrieben:

    Code
    10 a$="forum":b$=" 64"
    20 for i=0 to 1000
    30 h$=a$+b$
    40 next:print h$

    MOSpeed hat daraus das hier gemacht (in CONST_1 steht der String "forum 64"):

    Code
    LDA #<CONST_1
    LDY #>CONST_1
    JSR STROUTBRKWL
    JSR END

    ...das ist immer wieder überraschend...:D

    Und wenn man es dann macht wie der Basic-Boss (beim BasicV2 weiß ich es nicht), dass die Runtime erst zur Compilierzeit zusammengesetzt wird, ist das einfach nur noch genial.

    Ich mache das andersherum. Ich packe erst die ganze Runtime dran, und werfe dann die Teile raus, die ich nicht verwende. Das fand ich einfacher.

    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.

  • Mal wieder den Thread auspacken... hat zufällig jemand den Petspeed128, bei dem der dämliche Farbtabelle-"Kopierschutz" entfernt wurde?

    Abgesehen davon suche ich eh noch Compiler für den 128er. Bisher habe ich "nur" den Basic128, Petspeed128 und Blitz!128.

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Mal wieder den Thread auspacken... hat zufällig jemand den Petspeed128, bei dem der dämliche Farbtabelle-"Kopierschutz" entfernt wurde?

    Abgesehen davon suche ich eh noch Compiler für den 128er. Bisher habe ich "nur" den Basic128, Petspeed128 und Blitz!128.

    Schau mal hier :

    Bitte melde dich an, um diesen Link zu sehen.

    Edit: Habe gerade gelesen daß das Teil auch diesen Farb-Kopierschutz hat. War etwas zu schnell .

  • Ich hatte gerade versucht, den Farbtabellen-Kopierschutz zu entfernen. Das aber mit mäßigem Erfolg.

    Der ursprüngliche Basic-Code des Petspeed-128 Compiler, wurde natürlich durch seiner selbst compiliert.

    Im Compilat des Petspeed-128 herumwursteln ist einfach nur noch übelst schwer. Beim Compiliervorgang des Pass3 hängt sich das Programm auf.

    Ich müsste mal wissen, wie man mittles Winvice-Monitor v3.2 die kompletten 128KB abspeichern kann.

    Mir ist bekannt, dass man einen Wert in Adresse $FF00-$FF04 schreiben muss, nur welche, das weiß ich leider nicht.

    Es wäre sehr nett, wenn mir da jemand Hilfestellung geben könnte.:)

  • Ich müsste mal wissen, wie man mittles Winvice-Monitor v3.2 die kompletten 128KB abspeichern kann.

    bank ram00

    s "00000-0ffff.prg" 0 0 ffff

    bank ram01

    s "10000-1ffff.prg" 0 0 ffff

    ...und dann die beiden PRGs zusammenfügen sollte tun.

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

  • bank ram01

    s "10000-1ffff.prg" 0 0 ffff

    Müsste das nicht s "10000-1ffff.prg" 1 0 ffff heißen?

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Müsste das nicht s "10000-1ffff.prg" 1 0 ffff heißen?

    Wieso? Willst Du den Dump auf dem emulierten Tape speichern? Ich hab sowas lieber im PC-Dateisystem. :)

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

  • 1570 Beim Vice-Monitor steht die 0 für Datei? Na gut, ich hatte mich mit dem Ding noch nie beschäftigt, Asche auf mein Haupt X/

    Früher waren 64k unglaublich viel, heute reicht es nicht mal mehr für "Hello, world!".

  • Beim WinVice kann man keine 24Bit Adressen einstellen. Das Bankschalten, einmal Bank 0 und einmal Bank 15, wird mittels der Adressen $FF00-$FF04 eingestellt. Nur weiß ich die Werte nicht.

  • Stephan Scheuer Mach doch das, was ich geschrieben habe.

    Man braucht in VICE nicht mit der MMU rumfummeln, man kann dem Monitor einfach sagen "Zeig mir nicht den Speicher aus Sicht der CPU, sondern das RAM" (und zwar bank ram00 = das RAM von 00000 bis 0ffff und bank ram01 = das RAM von 10000 bis 1ffff).

    Man kann z.B. auch per bank c64rom die Sicht des Monitors auf das C64-ROM ändern, egal, was in der MMU gerade eingestellt ist/die emulierte CPU gerade sieht.

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

  • Ich habe die Syntax genau so geschrieben, wie in deinem Post. WiinVice-128 gibt die Meldung raus:

    (C:$6a46) bank ram00

    Unknown bank name `ram00'

    (C:$6a46) bank ram01

    Unknown bank name `ram01'

  • WinVICE 3.2 kann das wohl noch nicht. Vielleicht ist es nach vier Jahren mal Zeit für ein Update. ;)

    Du kannst mal bank probieren, vielleicht heißt die Bank da einfach noch anders, das wurde wohl mehrmals geändert.

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

  • Ich habe die neuste WinVice Version, nur mit dem Menu komme ich überhaupt nicht zurecht. Mein Desktop ist auf der D-Festplatte, die D64-Images befinden sich auf der E-Festplatte usw.

    Bis ich da mit den Einstellungen fertig war, und das erste D64 einlegt hatte, vergingen c.a. 30 Minuten. Der Emulator ist in diesem Zustand für mich unbrauchbar.

    Zudem hat WinVice ab v3.5 keinen Debugger mehr. Diesen benötige ich aber, um eine gecode auf Fehler zu überprüfen. Oder wie jetzt gerade, beim Petspeed-128, die Farbcode-Protection zu entfernen.

    Deshalb bleibe ich fürs Erste bei der Version 3.2.:) Zum daddeln nutze ich natürlich die aktuellste Version. Gibt es die WinVice v3.6.1 mit Maussteuerung und Pulldown-Menüs, oder bleibt das Menu jetz so?


    Nachtrag:

    Ich habe es herausgefunden.

    "bank ram1" = Bank01

    Bank00 ist nicht "bank ram0", sondern "bank ram". Auch wieder so ein Mist, der nicht sein muss. Im Großen und Ganzen stehe ich mit Commandzeilenprogramme auf Kriegsfuß.

    Erstens vertippe ich mich recht häufig und zweitens kann ich das aufgrund meiner Sehschwäche nicht richtig erkennen. Ich muss immer ganz dicht am Monitor, um die Commands richtig einzugeben.

  • Gibt es die WinVice v3.6.1 mit Maussteuerung und Pulldown-Menüs, oder bleibt das Menu jetz so?

    Von WinVice gibt es zum einen die SDL2 Versionen (das ist die, die du offenbar gerade verwendest und die keine mausbasierten Menüs haben) und zum anderen die GTK3 Versionen, die "normale" mausbasierte Einstellungen ermöglichen. Die GTK3 Versionen sind im folgenden Bild (von der VICE Homepage) rot markiert:

    Bitte melde dich an, um diesen Anhang zu sehen.

  • Danke!:)

    Das es von WinVice zwei verschiedene Versionen gibt, wusste ich bis jetzt gerade eben nicht. Gleich mal runterladen.


    Nachtrag:

    So, ich habe die WinVice Version 3.6.1 heruntergeladen und installiert. Das sieht jetzt sehr schön aus, und es funktioniert auch alles, wie zum Beispiel die RamLink, die SCPU, die CMD-HD usw.

    Danke nachmals, für den Hinweis auf die GDK3 Version.:)