website logo
Auteur
avatar
JuLieN

Forum » » OS4 toutes plateformes confondues » » Appel système en assembleur PPC sous OS4


Posté : 07-01-2008 17:53 icone du post

Salut à tous!

Peut-être quelqu'un pourrait-il m'éclairer sur la manière d'ouvrir une bibliothèque et appeler une fonction sous OS4 en assembleur?

Je me suis inspiré d'un hello world en assembleur pour MorphOS mais apparemment ça ne marche pas sous OS4. Je pense que le problème vient de la nouvelle manière qu'a OS4 de passer les appels sytème, puisque j'ai lu dans le document "os4_migration_guide.pdf" du SDK (dans Documentation/Developer Info/General) que l'on doit maintenant passer par des pointeurs d'interface. Et il y a aussi une histoire de libauto un peu nébuleuse pour un programmeur 68k sous AOS3.x...

Voici mon source (pour pasm), en espérant que quelqu'un pourra me dire ce qui cloche...




#?Helloworld.p

.set?mainstack,2240
.set?mainstack2,2244

.set?reg_d0,0
.set?reg_d1,4
.set?reg_d2,8
.set?reg_a1,36
.set?reg_a6,56
.set?EmulCallDirectOS,100
.set?_LVOCloseLibrary,-552
.set?_LVOOpenLibrary,-552

.set?_LVOVPrintf,-954

.text

__start:

mflr?r0
stwu?r1,-mainstack(r1)
stw??r0,mainstack2(r1)
stw??r31,8(r1)
stw??r30,12(r1)
stw??r29,16(r1)
stw??r28,20(r1)
stw??r27,24(r1)
stw??r26,28(r1)
stw??r25,32(r1)
stw??r24,36(r1)
stw??r23,40(r1)
stw??r22,44(r1)
stw??r21,48(r1)
stw??r20,52(r1)
stw??r19,56(r1)
stw??r18,60(r1)
stw??r17,64(r1)
stw??r16,68(r1)
stw??r15,72(r1)
stw??r14,76(r1)
stw??r13,80(r1)

li???r11,4
lwz??r14,0(r11)?#?execbase?dans?r14

li???r13,0

#DEBUT?ouverture?des?bibliothèques

lis??r9,dosName@ha
stw??r13,reg_d0(r2)
addi?r9,r9,dosName@l
stw??r14,reg_a6(r2)
stw??r9,reg_a1(r2)
lwz??r0,EmulCallDirectOS(r2)
li???r3,_LVOOpenLibrary????????#?OpenLibeaey(libName,version)?(a1,d0)
mtlr?r0
blrl???????????????????????????#?call?function

mr?r15,r3

#MAIN

lis??r8,string1@ha
addi?r8,r8,string1@l
stw??r8,reg_d1(r2)???#?string
stw??r13,reg_d2(r2)??#?NULL
stw??r15,reg_a6(r2)??#?r15=DosBase
lwz??r0,EmulCallDirectOS(r2)
li???r3,_LVOVPrintf
mtlr?r0
blrl

#Fin?de?MAIN
CloseLibraries:

stw??r15,reg_a1(r2)?#?r15=DosBase
stw??r14,reg_a6(r2)
lwz??r0,EmulCallDirectOS(r2)
li???r3,_LVOCloseLibrary??#?CloseLibrary(library)?(a1)
mtlr?r0
blrl

exit:

li???r3,0??#?return?code?=?0

lwz??r14,76(r1)
lwz??r15,72(r1)
lwz??r16,68(r1)
lwz??r17,64(r1)
lwz??r18,60(r1)
lwz??r19,56(r1)
lwz??r20,52(r1)
lwz??r21,48(r1)
lwz??r22,44(r1)
lwz??r23,40(r1)
lwz??r24,36(r1)
lwz??r25,32(r1)
lwz??r26,28(r1)
lwz??r27,24(r1)
lwz??r28,20(r1)
lwz??r29,16(r1)
lwz??r30,12(r1)
lwz??r31,8(r1)
lwz??r0,mainstack2(r1)
addi?r1,r1,mainstack
mtlr?r0
blr

.type?__start,@function
.size?__start,$-__start

#DATA
dosName:
.string?"dos.library"

string1:
.string?"Hello?World!"

.sdata
.global?__amigappc__


Message édité par : JuLieN / 07-01-2008 17:54

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=124&forum=6