Startseite Entwickler Produkte Online Hilfe Forum Weitere Projekte

 

Forum

Einloggen, um private Nachrichten zu lesen




Einsprungadressen in CCASM automatisch nach Basic übertragen

 
Neuen Beitrag schreiben   Auf Beitrag antworten    C-Control Forum Foren-Übersicht -> Beispiele
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Franz-Peter



Anmeldungsdatum: 01.05.2006
Beiträge: 141
Wohnort: Franken

BeitragVerfasst am: Sa Nov 17, 2007 10:40 pm    Titel: Einsprungadressen in CCASM automatisch nach Basic übertragen Antworten mit Zitat

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.

Ein Beispiel:

Aus der Map-Datei sbfbin.map:

Code:

putchr, OFF: 9d, 09h
putreg, OFF: 13d, 0Dh
putbyte, OFF: 17d, 11h
serialo1, OFF: 19d, 13h
putstr, OFF: 70d, 46h
gets00, OFF: 77d, 4Dh
nexst, OFF: 82d, 52h
prbuf, OFF: 89d, 59h
prbufloop, OFF: 91d, 5Bh
prbufend, OFF: 107d, 6Bh
sysend, OFF: 112d, 70h


wird mit dem Shell-Befehl
Code:
map2bas sbfbin.map >sbfbin.bas

die Datei sbfbin.bas mit dem Inhalt:
Code:

' 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. Wink

Gruß
Franz-Peter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tappi
Site Admin


Anmeldungsdatum: 15.03.2005
Beiträge: 1578
Wohnort: Aachen, Düsseldorf

BeitragVerfasst am: So Nov 18, 2007 11:13 am    Titel: Re: Einsprungadressen in CCASM automatisch nach Basic übertr Antworten mit Zitat

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. Wink


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

Support (Deutsch) http://www.tappertzhofen.eu/kontakt.php
Support (English) http://www.tappertzhofen.eu/kontakt_en.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dierk



Anmeldungsdatum: 15.03.2005
Beiträge: 2610
Wohnort: Schwabenländle

BeitragVerfasst am: So Nov 18, 2007 11:44 am    Titel: Antworten mit Zitat

Zitat:
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.”
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Franz-Peter



Anmeldungsdatum: 01.05.2006
Beiträge: 141
Wohnort: Franken

BeitragVerfasst am: So Nov 18, 2007 1:05 pm    Titel: Antworten mit Zitat

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
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tappi
Site Admin


Anmeldungsdatum: 15.03.2005
Beiträge: 1578
Wohnort: Aachen, Düsseldorf

BeitragVerfasst am: So Nov 18, 2007 3:22 pm    Titel: Antworten mit Zitat

Hallo, als kleiner Test:

http://www.fdos.de/ccasm/ccasm.exe

So funktioniert das ganze:

Code:
.page $fd00

.code

PUBLIC main:
rts

xyz:
rts


CCASM erzeugt darauf eine BAS Datei, die so aussieht:

Code:
' CCASM Import
CONST main = FD09h
' SYSCODE "D:\temp\bpp\test.bin"

_________________
Tappertzhofen
www.tappertzhofen.eu

Support (Deutsch) http://www.tappertzhofen.eu/kontakt.php
Support (English) http://www.tappertzhofen.eu/kontakt_en.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Franz-Peter



Anmeldungsdatum: 01.05.2006
Beiträge: 141
Wohnort: Franken

BeitragVerfasst am: So Nov 18, 2007 3:51 pm    Titel: Antworten mit Zitat

Hey, Du bist ja schneller als der Schall!! Very Happy
Die Erweiterung dürfte alles Notwendige abdecken, Super

Ich hab's in mein Assemblerprogramm schon eingebaut. Gib Bescheid, wenns fertig ist. (derzeit stehen die public-Adressen ja alle noch auf 00)

Danke und Gruß, Franz-Peter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Franz-Peter



Anmeldungsdatum: 01.05.2006
Beiträge: 141
Wohnort: Franken

BeitragVerfasst am: So Dez 09, 2007 10:12 pm    Titel: Antworten mit Zitat

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.

Gruß
Franz-Peter
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tappi
Site Admin


Anmeldungsdatum: 15.03.2005
Beiträge: 1578
Wohnort: Aachen, Düsseldorf

BeitragVerfasst am: So Dez 09, 2007 10:26 pm    Titel: Antworten mit Zitat

Problem sollte beseitigt sein.

Außerdem wird jetzt aus einer datei.asm eine datei.inc.bas erstellt. Dann wird auch die Quelldatei nicht überschrieben.
_________________
Tappertzhofen
www.tappertzhofen.eu

Support (Deutsch) http://www.tappertzhofen.eu/kontakt.php
Support (English) http://www.tappertzhofen.eu/kontakt_en.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Franz-Peter



Anmeldungsdatum: 01.05.2006
Beiträge: 141
Wohnort: Franken

BeitragVerfasst am: Mo Dez 10, 2007 8:39 pm    Titel: Antworten mit Zitat

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:
Code:
putchr, OFF: 9d, 09h
putreg, OFF: 13d, 0Dh
putbyte, OFF: 17d, 11h
serialo1, OFF: 19d, 13h
so01, OFF: 53d, 35h
so02, OFF: 62d, 3Eh
so03, OFF: 64d, 40h
putstr, OFF: 70d, 46h
gets00, OFF: 77d, 4Dh
nexst, OFF: 82d, 52h
outst1, OFF: 88d, 58h
prbuf, OFF: 89d, 59h
prbufloop, OFF: 91d, 5Bh
prbufend, OFF: 107d, 6Bh
ldax, OFF: 109d, 6Dh
sysend, OFF: 111d, 6Fh

in der inc.bas-Datei steht aber:
Code:
' CCASM Import
CONST putchr = FD12h
CONST putreg = FD16h
CONST putbyte = FD1Ah
CONST putstr = FD4Fh
CONST prbuf = FD62h

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?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dierk



Anmeldungsdatum: 15.03.2005
Beiträge: 2610
Wohnort: Schwabenländle

BeitragVerfasst am: Mo Dez 10, 2007 8:42 pm    Titel: Antworten mit Zitat

Zitat:
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.”
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge vom vorherigen Thema anzeigen:   
Neuen Beitrag schreiben   Auf Beitrag antworten    C-Control Forum Foren-Übersicht -> Beispiele Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  
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.

Powered by phpBB © 2001, 2005 phpBB Group


www.tappertzhofen.eu | zurück  

© Copyright 2004 - 2007 Tappertzhofen. Alle Rechte vorbehalten.
Rechtliche Hinweise / Haftungshinweis