amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Library für MOS erzeugen [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2004-08-09, 15:33 h

DariusBrewka
Posts: 899
[Banned user]
Hi Ich mal wieder.

Ich habe in meinem Programm einige sehr Rechenintensive Operationen durchzuführen (TrueColor Berechnungen etc.) das geht auf WinUAE auch so schnell genug, aber ich denke, dass es beispielweise auf MorphOS doch nicht so schnell mit Emulieter CPU (trotz JIT) geht und so würde ich gerne diese Teile aus meinem Programm in eine/ein Library/Modul auslagern.

NUn meine Frage, wenn ich diese Lib für MOS übersetze(n lasse), wie sieht das dann mit der Kompatiblität zu den 68K libs aus, mein Programm kann weiterhin nur 68K. Anders ausgedrückt bringt das was an Speed (denke mal es wird PPC Code erzeugt) und läuft mein programm weiterhin?

Ich kenne mich mit MOS nicht aus und weiss nicht wie man das von der Registerbergabe von 68K auf PPC macht oder besser wie MOS das macht damit es läuft.

danke

Darius

[ - Answer - Quote - Direct link - ]

2004-08-09, 17:00 h

thomas
Posts: 7718
User

Wenn die Library funktioniert, wird es keine Probleme geben. Ein Funktionsaufruf läuft immer über den 68k-Emulator und Parameter werden weiterhin in 68k-Registern übergeben.

Wie MorphOS das genau macht und was man bei PPC-Libs beachten muß, ist in der Doku des MorphOS-SDK beschrieben. Die Lib wird natürlich nicht auf AmigaOS/WarpOS/PowerUP laufen, sondern nur auf MorphOS.

Gruß Thomas

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

[ - Answer - Quote - Direct link - ]

2004-08-09, 19:30 h

DariusBrewka
Posts: 899
[Banned user]
Nunja, für 68K AOS habe ich ja dann die 68K library, mir ist nur wichtig, dass das ganze dann auf PPC klappt d.h. schnell ist, sonst würde sich der Aufwand ja auch nicht lohnen. Der Rest in meinem Code würde nicht unbedingt vom PPC profitieren, da es eigentlich egal sein sollte, ob ein Fenster nun in 0.1 oder 0.2 Sekunden aufgeht.

Jetzt muss ich nur noch herausfinden wie man eine MOS Library erzeugt ;-) bzw. benutze CLib-SDI müsste wohl damit zu machnen sein.

danke

[ - Answer - Quote - Direct link - ]

2004-08-10, 13:07 h

tokai
Posts: 1071
User
Zitat:
Original von thomas:

Wenn die Library funktioniert, wird es keine Probleme geben. Ein Funktionsaufruf läuft immer über den 68k-Emulator und Parameter werden weiterhin in 68k-Registern übergeben.


Nicht zwangsläufig. :-) Alllerdings wenn man Libraries programiert, die auch mit 68k software kompatibel sein müssen, dann muss man das gate interface nutzen. Ansonsten kann man auch einfach die SysV ABI verwenden, allerdings laufen diese Libs dann nur mit MorphOS PPC-Programmen (siehe z.b. vorbisfile.library, um sie mit dem 68k ANR kompatibel zu machen, war eine PPCnative 68kgate.library notwendig, die die Funktonsaufrufe von ANR (68k) für SysV (PPC) übersetzt).



@Darius:

wenn du es selbst _nicht_ testen kannst (sprich du die lib auf mos entwickelst), dann vergiss es lieber, weil das wird nichts. Ich meine das ehrlich, du machst dir da nur unnötig Stress. Der 68k emu von MorphOS ist verdammt flink, so dass ich denke, dass auch die 68k version deiner lib sehr gut laufen wird. :-)


regards,
tokai
--
http://www.christianrosentreter.com ~ MorphOS und AmigaOS Software

[ - Answer - Quote - Direct link - ]

2004-08-10, 14:56 h

DariusBrewka
Posts: 899
[Banned user]
@tokai

Vieleicht hast du Recht, habe gestern nachgefragt, wie schnell das auf MOS mit 68K code geht und es war nicht übermässig lange.

Andererseits hatte ich auch nicht vor die Lib selber an MOS anzupassen, sondern den LIB-Source meinem Programm beizufügen, dass wenn jemand das machen will, es ihm freisteht.

Mein Programm ist jedenfalls inzwischen dafür bereit und benutzt interne Funktionen, falls die lib nicht existiert ansonsten werden die Lib-Funktionen benutzt.

Leider bekomme ich Kurioserweise die lib nicht übersetzt, es ist nämlich so:

Ich benutze wie oben angeführt CLIB-SDI und mit GCC2.95 scheint es da Probleme zu machen, die mir sehr eigenwillig erscheinen. Wenn ich in einer Library Funktion eine Exec Funktion aufrufe, so geht alles gut, wenn ich aber in meiner Library funktion aine Funktion aufrufe, welche eine Exec Funktion aufruft, dann meldet GCC einen Fehler, dass die Library Base meiner Erzeugten Liibrary nicht definiert ist.

Es liegt nicht an meiner Library, sondern ist bei mir auch in der Beispiellib aus CLIB-SDI

beispiel aus der CLIB-SDI Library, welches Funktioniert:

code:
/* this one shows how functions with variable argument lists are handled */
ASM(LONG) LIBex_TestRequest2A(REG(a0, STRPTR title), REG(a1, STRPTR body),
REG(a2, STRPTR gadgets), REG(a3, APTR args), REG(a6, struct ExampleBaseP *ExampleBase))
{
  struct EasyStruct estr;

  estr.es_StructSize   = sizeof(struct EasyStruct);
  estr.es_Flags        = NULL;
  estr.es_Title        = title;
  estr.es_TextFormat   = body;
  estr.es_GadgetFormat = gadgets;

  ++ExampleBase->exb_NumCalls;
  Forbid();
  return EasyRequestArgs(NULL, &estr, NULL, args);
}

das Forbid hat oben keinen Sinn, wude von mir nur Testweise eingefügt um den Fehler zu zeigen.


nun das gleiche Beispiel welches NICHT Funktioniert:

code:
/* this one shows how functions with variable argument lists are handled */

void test() {
  Forbid();
}

ASM(LONG) LIBex_TestRequest2A(REG(a0, STRPTR title), REG(a1, STRPTR body),
REG(a2, STRPTR gadgets), REG(a3, APTR args), REG(a6, struct ExampleBaseP *ExampleBase))
{
  struct EasyStruct estr;

  estr.es_StructSize   = sizeof(struct EasyStruct);
  estr.es_Flags        = NULL;
  estr.es_Title        = title;
  estr.es_TextFormat   = body;
  estr.es_GadgetFormat = gadgets;

  ++ExampleBase->exb_NumCalls;
  test();
  return EasyRequestArgs(NULL, &estr, NULL, args);
}


in diesem Beispiel kommt von gcc dei Meldung

code:
examplefuncs.c: In function 'test':
examplefuncs.c:26: 'ExampleBase' undeclared (first use in this function)
examplefuncs.c:26: (Each undeclared identifier is reported only once
examplefuncs.c:26: for each function it appears in.)
make: *** [examplefuncsgcc.o] Error 1


[ - Answer - Quote - Direct link - ]

2004-08-10, 18:33 h

thomas
Posts: 7718
User

Wie ist denn SysBase definiert ? Wenn du SysBase als ExampleBase->eb_SysBase definiert hast, dann braucht Forbid natürlich die ExampleBase.

Gruß Thomas

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

[ - Answer - Quote - Direct link - ]

2004-08-10, 23:12 h

DariusBrewka
Posts: 899
[Banned user]
@thomas

Ich denke mal, du hast Recht. Danke

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Library für MOS erzeugen [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.