amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > StormC/Miami/Farcode/Nearcode... [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

18.05.2003, 20:57 Uhr

THDany
Posts: 38
Nutzer
Mahlzeit!

Ich hab ein Problem mit dem ich nicht klar komme. Ich versuche gerade in mein TH-Verbindung eine Traffic-Kontrolle mittels MiamiPFAddHook(); einzubauen.

Der Hacken kommt jetzt wenn ich proto/miami.h einbaue. Denn ab dem Moment stürt mein Programm sofort ab wenn ich es starte. Stelle ich den Compiler jedoch auf Nearcode um funktioniert miami.h, spricht das Programm stürzt nicht ab, aber dafür funktionieren meine bislang anstandslos lauffähigen Funktionen nicht mehr.

Meine Frage ist nun was ist denn der Unterschied zu diesem Far- und Nearcode? Was kann ich machen damit das Programm läuft?

Hoffe auf Hilfe.

Dany

[ - Antworten - Zitieren - Direktlink - ]

19.05.2003, 10:22 Uhr

Solar
Posts: 3680
Nutzer
ACHTUNG - das folgende ist allgemein (statt Amiga-spezifisch) und stark vereinfacht dargestellt!

Es geht um die Größe des Offset bei Codeverzweigungen.

Wird z.B. eine Funktion angesprungen, ist dies auf Maschinensprache-Ebene ein Sprung an eine andere Speicheradresse.

Bei "Nearcode" (nahem Code) wird nun ein "kleiner" Offset genommen, sagen wir einmal 16 bit. Das reicht, um 32kByte nach "vorn" oder 32kByte nach "hinten" zu springen. Wird das Executable / die Library größer als 64kByte, dann wird's schwierig.

Bei "Farcode" wird nun ein "größerer" Offset verwendet, i.d.R. sogar eine absolute Adresse statt des Offset. Damit ist jeder Code im Speicher ansprechbar; allerdings kostet "Farcode" Speicher und Taktzyklen.

Die "Problemchen" beim verlinken von Near- und Farcode-Objektdateien kannst Du Dir dann selbst ausmalen. ;-)

[ - Antworten - Zitieren - Direktlink - ]

19.05.2003, 10:46 Uhr

thomas
Posts: 7717
Nutzer

Beim Amiga ist das so realisiert, daß beim Farcode ("großes Datenmodell") absolute Adressen benutzt werden.

move $12345,d0
jmp $23456

Beim Nearcode ("kleines Datenmodell") werden Datenzugriffe relativ zu einem Addressregister und Spünge pc-relativ durchgeführt.

move 654(a4),d0
jmp -372(pc)

Letzteres gibt Probleme bei Funktionen, die in anderen Tasks ausgeführt werden (z.B. Hooks), da dort das Basisregister (A4) nicht gesetzt ist.

Dies kann man normalerweise dadurch umgehen, daß man die Funktion mit __saveds deklariert (siehe Anleitung des Compilers).

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Antworten - Zitieren - Direktlink - ]

19.05.2003, 19:04 Uhr

THDany
Posts: 38
Nutzer
Leider reicht die Deklaration mit __saveds nicht. Aber ich bin ja bislang mit dem far code gut zurecht gekommen. Wenn jemand Erfahrung mit Miami.h hat gibt es da keine Möglichkeit es auch mit far code laufen zu lassen?

[ - Antworten - Zitieren - Direktlink - ]

19.05.2003, 19:08 Uhr

Solar
Posts: 3680
Nutzer
Wie gesagt, das Problem ist nicht die Miami.h - die teilt dem Compiler nur mit, welche Symbole in der Objektdatei vorhanden sind.

Die Probleme treten dann auf, wenn das Programm, das Miami.h includet, mit einer anderen Option als die Miami-Bibliothek compiliert wurde - dann fliegt nämlich der Linker (gute Umgebung) bzw. das Executable (nicht so gute Umgebung) auf die Nase.

[ - Antworten - Zitieren - Direktlink - ]

19.05.2003, 19:11 Uhr

THDany
Posts: 38
Nutzer
Und was kann ich dagegen machen?

[ - Antworten - Zitieren - Direktlink - ]

19.05.2003, 19:18 Uhr

Solar
Posts: 3680
Nutzer
Alle betreffenden Bibliotheken mit demselben Compiler-Setting compilieren.

Evtl. gibt's da noch den einen oder anderen Trick, aber das ist dann AmigaOS-spezifisch, da muß ich leider passen.

[ - Antworten - Zitieren - Direktlink - ]

19.05.2003, 19:32 Uhr

THDany
Posts: 38
Nutzer
Muß man __saveds definieren? Hab gesehen bei mir gibts ne Zeile die "#define __saveds" lautet. Muß ich da was angeben?

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > StormC/Miami/Farcode/Nearcode... [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.