![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > Initialisierung SysBase? | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2002-08-12, 14:20 h tokai Posts: 1071 User |
Hallo, ist es eigentlich bei Programmen, die man ohne startup (c.o o.ä.) linkt, nötig die SysBase zu initialisieren? Das Programm läuft ohne und mit der Initialisierung (auch bei Zugriffen auf Funktionen der exec.library)... Codeschnippsel: .... 8< struct ExecBase *SysBase; long __saveds main(void) { SysBase = *(struct ExecBase **)4; .... 8< tokai [ Dieser Beitrag wurde von tokai am 12.08.2002 editiert. ] [ - Answer - Quote - Direct link - ] |
2002-08-13, 11:42 h gni Posts: 1106 User |
Zitat:Du verwechselst da wohl etwas. Programme ohne Startup müssen SysBase initialisieren (was soll das Programm ansonsten sinnvolles tun können? Zitat: Wenn Du Startupcode verwendest, ist die Zeile mit SysBase überflüssig. Wenns ohne die Zeile läuft, dann verwendest Du auch Startupcode, da sonst Dein Programm einen Absturz produzieren müsste. [ - Answer - Quote - Direct link - ] |
2002-08-13, 15:02 h tokai Posts: 1071 User |
Zitat: Ich verwechsle nichts. ![]() Bei den SAS/C Beispielen ist z.B.: auch ein HelloWorld-Replacement ohne SysBase Initialisierung und das Beispiel wird ohne startup gelinkt (Linker options: nostartup, "slink from test.o to test.exe SMALLCODE SMALLDATA") sieht wie folgt aus: ---- 8< ---- #include <stdlib> #define MSG "hello world!n"; int __saveds main(void) { struct DosLibrary *DOSBase = (struct Doslibrary *)OpenLibrary("dos.library",0L); Write(Output(),MSG,strlen(MSG)); Close((struct DosLibrary *)DOSBase); } ---- 8< ---- funktioniert auch. Ohne SysBase Initialiserung. Zitat: s.o. Habe hier ein Tool geschrieben, dass ohne startup gelinkt wird. Das Tool öffnet nur dos.library und verwendet deren Funktionen. Es werden auch exec.library-Funktionen wie z.B. AllocVec() verwendet. Und OpenLibrary() natürlich ![]() tokai. [ Dieser Beitrag wurde von tokai am 13.08.2002 editiert. ] [ - Answer - Quote - Direct link - ] |
2002-08-13, 18:38 h thomas Posts: 7721 User |
Warum fragst du, wenn du es schon weißt ? Wenn Exec-Funktionen funktionieren, wird auch SysBase initialisiert. Du kannst SysBase ja extern deklarieren und nachsehen, was drinsteht. Um ganz sicherzugehen mußt du das Lademodul disassemblieren. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2002-08-14, 09:43 h gni Posts: 1106 User |
Zitat: Stimmt. Standardmäßig verwendet SAS/C SysBase nicht... Aus Kompatibilitätsgründen wird AbsExecBase verwendet. Wenn man proto/exec.h verwendet und SysBase will, muß man __USE_SYSBASE definieren. Das kann man sich alles im proto/ Header anschauen. AbsExecBase sollte man tunlichst vermeiden. Man bekommt sonst Beschwerden von Leuten die ständig Enforcer-Tools laufen haben ;-) [ - Answer - Quote - Direct link - ] |
2002-08-15, 09:59 h tokai Posts: 1071 User |
Zitat: Das stimmt. Aber praktisch bringt das auch keinen Unterschied. Aber ich vermute, dass das ganze über amiga.lib initialisiert wird, anders kann ich mir das auch nicht mehr erklären... bin leider noch nicht dazu gekommen, die amiga.lib macros aus dem Tool rauszunehmen. Das werd' ich nochmal probieren, vielleicht bringt es die Lösung, wenn ich das ganze ohne die amiga.lib linke. Hmmm... eigentlich funktioniert das Tool ja... aber es ist einfach mal interessant sowas herauszufinden! ![]() [ - Answer - Quote - Direct link - ] |
2002-08-15, 20:49 h Holger Posts: 8116 User |
Zitat:Ich dachte, Enforcer würde die AbsExecBase aus einem ziemlich naheliegenden Grund nicht als illegalen Zugriff melden. Aber es gibt einen anderen Grund AbsExecBase zu vermeiden. Die Adresse liegt im Chip-RAM und abhängig davon, wie viele exec-Funktionen man benutzt, kann sich der Geschwindigkeitsunterschied durchaus bemerkbar machen. mfg -- Good coders do not comment. What was hard to write should be hard to read too. [ - Answer - Quote - Direct link - ] |
2002-08-20, 15:17 h gni Posts: 1106 User |
Zitat:Zwischen _SysBase und _AbsExecBase besteht ein großer Unterschied! Zitat:Die amiga.lib hat damit *nichts* zu tun. Wenn _AbsExecBase verwendet wird, dann generiert der SAS/C folgenden Code: move.l 4,a6 Wenn man __USE_SYSBASE definiert, dann muß man _SysBase initialisieren, weil der Compiler dann folgenden Code generiert: move.l _SysBase,a6 Alles klar? [ - Answer - Quote - Direct link - ] |
2002-08-20, 15:20 h gni Posts: 1106 User |
Zitat:Tut er auch nicht. Aber da Enforcer den Zugriff emulieren muß, wird es langsam. Das fällt dann eben auf, wenn viele Zugriffe auf _AbsExecBase erfolgen. Zitat:Nicht unbdingt. MMU-Amigas mappen die Zero-Page einfach ins Fast-Ram ;-) [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > Initialisierung SysBase? | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |