Hello, Guest the thread was called1.5k times and contains 36 replays

last post from BlackJack at the

Wie ist der bbcompiler einzustufen?

  • Hi!


    Das hat nix mit dem Compiler zu tun, sondern hiermit:

    Code
    1. 100 open 2,8,2,"test,w"


    Du musst HINTERHER (irgendwo zwischen OPEN-Zeile und CLOSE-Zeile) sagen, was geschrieben wird, und zwar mit PRINT# (RAUTE!)


    PS: VORSICHT, keinesfalls mit

    Code
    1. ?#


    abürzen. Sieht nach LIST zwar nach PRINT# aus, ist es aber nicht.

  • Jup, danke.
    Man muss sich an die neue Schreibweise gewöhnen beim Scheiben und Lesen von Daten auf der Disk mit Boss.


    Man das geht jetzt fehlerfrei ab wie die ein Rennwagen.
    Ich öfffne ein Grafikscreen von $2000-$4000, schreibe da 8000 Byte rein mit den Wert 129, dann wird der Grafikscreen abgespeichert.
    Mit Haeder hat die Testdatei dann 8027 Byte.
    Dann wird der Grafikscreen gelöscht und die Daten aus der Testdatei werden einlesen und in den Grafikscreen geschrieben, zur kontrolle addiere ich zum Datenwert etwas dazu um zu sehen ob es auch die Daten sind aus der Datei.


    Da ich den Programmspeicher hoch gesetzt habe wegen der Grafik, starte ich mit "sys 16384"
    Das Programm hat eine Grösse von 1400 Byte.


    klasse.


  • @plus4fan: Basic Boss bringt seine eigenen Gleitpunktzahl-Routinen mit, darum braucht er die im BASIC-ROM nicht. Dass der Compiler bei ``x=sin(4.3)`` erkennt, dass man das zur Übersetzungszeit schon ausrechnen kann, wäre möglich.


    Der Fall, dass der Basic Boss Code 15% schneller als äquivalenter cc65-Code mit eingeschalteten Optimierungen ist, sollte eigentlich eher die Ausnahme sein. Oder der Code ist nicht wirklich Äquivalent.


    Zur eigentlichen Frage: Der Basic Boss ist IMHO ein ziemlich guter BASIC-Compiler. Er erzeugt echten Maschinencode statt P-Code oder Bytecode und bietet wie von Ryk schon erwähnt gute Möglichkeiten die Speicheraufteilung zu beeinflussen um das ganze dann zum Beispiel mit Grafikdaten und weiterem Code in Assembler, oder normalem interpretierten BASIC zu kombinieren.


    Aber von der Sprache her gefällt mir C ein wenig besser. Bei cc65 kann auch die Speicheraufteilung weitreichend konfigurieren und ein Assembler ist auch dabei.

  • Basic Boss bringt seine eigenen Gleitpunktzahl-Routinen mit, darum braucht er die im BASIC-ROM nicht.


    Was allerdings nicht zu der irrigen Annahme verleiten darf, die Kompilate kämen grundsätzlich ohne ROM aus. Ich habe bei meinem jüngsten Fehlschlag ein Cartridge-Projekt mit dem Zwischenergebnis abgebrochen, dass ich trotz ALLRAM/RAM/ROM das Kompilat nicht komplett ohne Basic-ROM zum Laufen gekriegt habe (also wird es ein Disk-Release). Wen's interessiert, Befehle BASICRAM/ALLRAM/RAM/ROM im Handbuch mal ansehen. Bei ALLRAM muss man mit RAM/ROM festlegen, was bei PEEK/POKE gemacht wird.

  • Quote

    Zur eigentlichen Frage: Der Basic Boss ist IMHO ein ziemlich guter BASIC-Compiler. Er erzeugt echten Maschinencode statt P-Code oder Bytecode und bietet wie von Ryk schon erwähnt gute Möglichkeiten die Speicheraufteilung zu beeinflussen um das ganze dann zum Beispiel mit Grafikdaten und weiterem Code in Assembler, oder normalem interpretierten BASIC zu kombinieren.


    ja - wobei es auch hier darauf ankommt was einem wichtiger ist, geschwindigkeit oder speicherplatz. falls letzteres eher das problem darstellt ist zb der "blitz!" compiler sehr gut, darum war der auch für BBS systeme so beliebt.

    Quote

    Aber von der Sprache her gefällt mir C ein wenig besser. Bei cc65 kann auch die Speicheraufteilung weitreichend konfigurieren und ein Assembler ist auch dabei.


    in der tat. basic compiler würde ich heutzutage auch nur noch zum aufpolieren schon existierender programme benutzen oder gar empfehlen. cc65 find ich schon darum schöner weil sich da hochsprache und assemblercode sehr viel komfortabler kombinieren lässt als das mit basic der fall wäre, und dank dem exzellenten linker sind auch relativ komplexe sachen noch halbwechs managebar.

  • Bei cc65 kann auch die Speicheraufteilung weitreichend konfigurieren und ein Assembler ist auch dabei.


    Na,dann mach mir das mal eben schnell für den c128, damit ich den Start bei $4000 anfange kann.
    Ich kriege das für den c128 nicht hin.


    danke.


    gruss

  • Was allerdings nicht zu der irrigen Annahme verleiten darf, die Kompilate kämen grundsätzlich ohne ROM aus.

    Na , junge, da musst du dir schon mal die Basic-Boss-Beschreibung richtig durchlesen und nicht nur Oberflächlich.
    Da steht ganz genau drin welche Routinen du ohne das ROM benutzen kannst..


    danke.


    gruss

  • ja - wobei es auch hier darauf ankommt was einem wichtiger ist,
    geschwindigkeit oder speicherplatz. falls letzteres eher das problem
    darstellt ist zb der "blitz!" compiler sehr gut, darum war der auch für
    BBS systeme so beliebt.


    Für unsere tutschigen Programme reicht der Speicher vom C64 allemal.
    Wozu kann man nachladen ..auch Compilate vom Basic-Boss kann man nachladen, bloss die Variablaninhalte werden nicht alle gehalten.


    danke.


    ps: ich progge auch gern mit dem cc65.


    gruss

  • @Plus4Fan: Man kann zwar den Speicher untem ROM problemlos durch das Kompilat mittels ALLRAM nutzen, aber das Kompilat scheint leider - anders als ich erwartet hätte - doch noch gelegentlich (auch im RAM-Mode) aufs ROM zuzugreifen. Anders kann ich mir das Scheitern meines .CRTs nicht erklären. Versuch erst einmal selbst ein BOSS-Kompilat ohne ROM auf Cartridge (mehr "ohne ROM geht nicht) zum Laufen zu kriegen, dann reden wir weiter.


    PS: Und woher weißt Du überhaupt, wie "tutschig" (4 whatever this means) meine Programme sind bzw wie genau ich Manuals lese (werd mal konkreter, was ich überlesen haben soll, wenn Du das Teil als tägliche Bettlektüre inzwischen auswendig kennst)? ;)

  • @plus4fan: Okay, ich lasse mir als erstes die originale Linkerkonfiguration für den C128 ausgeben:

    Code
    1. $ ld65 --dump-config c128 > c128_4000.cfg.orig
    2. ld65: Error: No object files to link


    In der muss man jetzt die Speicherbereiche anpassen:

    Code
    1. MEMORY {
    2. ZP: file = "", define = yes, start = $0002, size = $001A;
    3. LOADADDR: file = %O, start = $1BFF, size = $0002;
    4. HEADER: file = %O, start = $1C01, size = $000C;
    5. RAM: file = %O, define = yes, start = $1C0D, size = $A3F3 - __STACKSIZE__;
    6. }


    Die Ladeadresse soll bei $4000 liegen, davon muss man 2 abziehen weil die Ladeadresse selbst ja zwei Bytes lang ist. Also `start` dort auf $3FFE setzen.


    In `HEADER` wird der Code für die BASIC-Zeile abgelegt. Da man die normalerweise nicht haben möchte wenn man den Code nicht am BASIC-Start platziert, kann man dort mit ``file = ""`` dafür sorgen, dass der Code nicht gespeichert, also letztlich ignoriert wird. In diesem Fall wäre eine BASIC-Zeile ja auch besonders sinnfrei.


    Und dann muss man nur noch den Start vom `RAM`-Bereich auf $4000 setzen und die Grösse entsprechend nach unten korrigieren. Das habe ich mal recht grosszügig gemacht, weil ich zu fault zum Rechnen war. :-)


    Ergebnis:

    Code
    1. MEMORY {
    2. ZP: file = "", define = yes, start = $0002, size = $001A;
    3. LOADADDR: file = %O, start = $3FFE, size = $0002;
    4. HEADER: file = "", start = $1C01, size = $000C;
    5. RAM: file = %O, define = yes, start = $4000, size = $4000 - __STACKSIZE__;
    6. }


    Damit jetzt ein Hallo-Welt-Programm übersetzt:

    Code
    1. cl65 -t c128 -C c128_4000.cfg test.c -o test.prg


    Und im C128-Monitor ein kleines Startprogramm dafür eingegeben:

    Code
    1. a 01000 ad 00 ff lda $ff00
    2. a 01003 48 pha
    3. a 01004 a9 0e lda #$0e
    4. a 01006 8d 00 ff sta $ff00
    5. a 01009 20 00 40 jsr $4000
    6. a 0100c 68 pla
    7. a 0100d 8d 00 ff sta $ff00
    8. a 01010 60 rts
    9. a 01011


    Das war's.


    Wo steht das denn in der Basic-Boss-Anleitung? Kannst Du da mal explizit auf die Stelle(n) hinweisen? Ich bin nämlich davon ausgegangen, dass das BASIC-ROM nicht benötigt wird.



    TheRyk : Bist Du dem Problem eigentlich mal nachgegangen, oder ist/war zu viel Stress wegen der Competition? Wo kracht es denn? Wenn das BASIC-ROM weg ist, und man den Platz dort mit 0en, also BRKs füllt, oder vielleicht auch mit einem 1-Byte-Opcode, der den Prozessor crasht/zum stehen bringt, sollte man mit dem Emulator doch heraus finden können, an welche Stelle im BASIC-ROM gesprungen wird.


    Und man (Du :-)) könnte auch versuchen immer mehr Teile vom Programm weg zu lassen um so einzugrenzen welche Teile funktionieren und welche nicht.


    Wobei mir jetzt gerade auffällt, dass Du £ALLRAM schreibst, das dürfte natürlich tatsächlich nicht gehen, denn den Kernel benutzen die Kompilate.

  • Das du ohne ROM mit dem BOSS nur Poke und Peek und einpaar vorgegeben Befehle vom BOss nutzen kannst.


    Wie kommst Du darauf?

    Quote

    weil die arithmetischen Routinen des Basic-ROM vom Compilat teilweise genutzt werden (für Realzahlen)


    ist der einzige Hinweis in der Dokumentation, die ich hier vorliegen habe hinsichtlich der Verwendung des Basic-ROMs.
    Hast Du irgendeine andere?!?

  • [offtopic]Um nicht zuviel Offtopic auf einmal zu produzieren (es ging mal um Einschätzung des Boss, dann kamen C128 Probleme, dann über die Frage ROM-nötig-oder-nicht wieder mein altes Cartridge-Leid), habe ich auf die letzten Postings von Black-Jack und plus4fan mal wieder im Cartridge-Fred geantwortet:
    16KB Cartridge Game Development Compo[/offtopic]

  • Jup, danke



    BlackJack
    .


    Kann man dieses Programm:


    a 01000 ad 00 ff lda $ff00
    a 01003 48 pha
    a 01004 a9 0e lda #$0e
    a 01006 8d 00 ff sta $ff00
    a 01009 20 00 40 jsr $4000
    a 0100c 68 pla
    a 0100d 8d 00 ff sta $ff00
    a 01010 60 rts
    a 01011


    als PRG benutzen wenn ich es mit acme übersetze?


    danke.


    gruss

  • Ich weiss nicht ob ich die Frage richtig verstehe!? PRG bedeutet ja eigentlich erst einmal nur dass man eine Datei mit zwei Bytes hat, welche die Adresse angeben wo das hin geladen werden soll was danach in der Datei als Inhalt kommt. Wenn Du die Assembleranweisungen mit dem ACME übersetzt, dann kommt so eine Datei heraus. Die kann man dann (mit ,8,1) laden und mit SYS4096 starten.