Verfasst am: Sa Nov 17, 2007 10:40 pm Titel: Einsprungadressen in CCASM automatisch nach Basic übertragen
Wenn man Assemblerprogramme entwickelt, entsteht oft das Problem, das man in der Bank mehrere kleine Assemblerprogrämmchen hat, die aus Basic aufgerufen werden sollen. Dann muss man im Basic Programm die Einsprungadressen kennen. Bei jeder Änderung im Assemblerprogramm ändern sich aber evtl. diese Adressen, so dass man dies im Basic Programm ständig nachziehen muss.
Dafür habe ich mir eine Lösung ausgedacht, die das vollständig automatisert: Die Einsprungadressen sind dann im Basic-Programm immer aktuell.
Nach jeder fehlerfreien Compilierung erzeugt CCASM eine Map-Datei mit den Offsets der definierten Labels. Leider hat diese Datei kein Format, dass Basic++ versteht. Ich habe mir nun ein kleines PC-Progrämmchen geschrieben, dass diese Map-Datei so umwandelt, dass daraus eine Datei mit const-Befehlen für Basic entsteht. Diese Datei kann man mit import direkt in das Basic-Programm einfügen. Da die Workbench die Möglichkeit bietet, vor dem Kompilieren ein Script aufzurufen, kann man dort die Konvertierung vornehmen, so dass die Konstantendefinitionen automatisch immer aktuell sind.
Wurde das Assemblerprogramm fehlerfrei assembliert, kann danach gleich das zugehörige Basic Programm neu übersetzt werden. Die Labeladressen sind dort immer aktuell.
' Importfile für Basic++
' Diese Datei wird automatisch erzeugt und darf nicht editiert werden
' Sie enthält die Adressen aus der Datei sbfbin.map
const putchr = 0FD09h
const putreg = 0FD0Dh
const putbyte = 0FD11h
const serialo1 = 0FD13h
const putstr = 0FD46h
const gets00 = 0FD4Dh
const nexst = 0FD52h
const prbuf = 0FD59h
const prbufloop = 0FD5Bh
const prbufend = 0FD6Bh
const sysend = 0FD70h
Dass dabei auch die internen Labels im Assemblerprogramm umgesetzt werden stört nicht. Die Einsprungadressen aus Basic kennt man ja (und könnte die durch die Namensgebung auch kenntlich machen).
Heißt das Basic Projekt z.B. myprojekt.bpp, so muss das obige Shellkommando in einer Datei myprojekt.cmd im gleichen Verzeichnis stehen, dann wird es vor jedem Kompiliervorgang automatisch gestartet
Mit dem Parameter /B1 für map2bas kann man auch Adressen für die alternative Bank erzeugen (0FCxx). Dann muss das Assemblerprogramm aber unabhängig vom Basic-Programm mit der Workbench in die C-Control geladen werden.
Wer Interesse daran hat, kann mir eine Nachricht senden. Das Programm map2bas ist gezippt gerade mal 15k groß, und ich kann es per Mail verschicken.
Das ganze wäre natürlich unnötig, wenn CCASM gleich eine Map-Datei im passenden Format erzeugen würde.
Verfasst am: So Nov 18, 2007 11:13 am Titel: Re: Einsprungadressen in CCASM automatisch nach Basic übertr
Franz-Peter hat folgendes geschrieben::
Das ganze wäre natürlich unnötig, wenn CCASM gleich eine Map-Datei im passenden Format erzeugen würde.
Kein Problem. Das können wir machen. Eventuell kann man auch über einen Pseudo Befehl nachdenken, der Labels kennzeichnet, die als Einsprungsadressen für BPP dienen und welche, die nur intern verwendet werden. _________________ Tappertzhofen
www.tappertzhofen.eu
Eventuell kann man auch über einen Pseudo Befehl nachdenken, der Labels kennzeichnet
Ja, das fände ich auch nicht schlecht. Würde die Nutzung von Assembler um einiges erleichtern. In die Workbench könnte ich das dann auch voll integrieren. Wenn man dann auf ein Asm-Label klickt, könnte man direkt dorthin in die entsprechende Quelldatei springen. _________________
„Das, wobei unsere Berechnungen versagen, nennen wir Zufall.”
Das wäre natürlich ideal, wenn die Verbindung Assembler <-> Basic voll in die Entwicklungsumgebung integriert wird. Mein oben skizzierter Weg ist ja nur eine 'Krücke' weil es da bisher nichts gibt. Ihr solltet dabei aber auf jeden Fall beide Bänke berücksichtigen. Kann ja evtl. auch im Assembler ein Pseudobefehl sein, der angibt, für welche Bank das Programm vorgesehen ist. Der Unterschied vom Ergebnis wäre ja nur die abweichende Adresse in der Label-Datei (und die unterschiedliche Art, das Programm in die C-Control zu laden, aber da muss man wohl selbst drauf achten)
Gruß
Franz-Peter
Hallo Stefan,
aus Kompatibilitätsgründen (scheint ja schon Probleme gegeben zu haben) sollte die BAS-Datei nur erzeugt werden, wenn auch der '.page' Befehl angegeben ist (macht ja sonst auch keinen Sinn). Der derzeitige Assembler setzt auch noch alle CONST in der BAS-Datei auf Fx09h, ist also noch nicht praktisch einsetzbar.
Außerdem wird jetzt aus einer datei.asm eine datei.inc.bas erstellt. Dann wird auch die Quelldatei nicht überschrieben. _________________ Tappertzhofen
www.tappertzhofen.eu
Hallo Stefan,
ich habe mir jetzt den aktuellen CCASM heruntergeladen (1.0.0.52), habe damit aber noch ein Problem:
Wenn ich meinen Code assembliere bekomme ich folgende map-Datei:
Das passt doch nicht zusammen. Es sieht so aus, als ob bei den Konstanten der initale Offset von 09h 2x addiert wird.
Gruß
Franz-Peter
P.S. mir ist aufgefallen, dass bei einem Update der Workbench der Assembler nicht aktualisiert wird. Dazu musste ich das aktuelle Basic++ Paket laden und installieren. Ist das so gewollt oder gibt es noch einen anderen Weg den Assembler im Workbenchpaket zu aktualisieren?
P.S. mir ist aufgefallen, dass bei einem Update der Workbench der Assembler nicht aktualisiert wird. Dazu musste ich das aktuelle Basic++ Paket laden und installieren. Ist das so gewollt oder gibt es noch einen anderen Weg den Assembler im Workbenchpaket zu aktualisieren?
Wurde noch von der WB gemacht. Ich werde das aber in der nächsten BETA einbauen. _________________
„Das, wobei unsere Berechnungen versagen, nennen wir Zufall.”
Sie können keine Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum nicht antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.