Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» besoin cable coleur et interface de lecture sd card
fonction asm depuis le c EmptyJeu 6 Aoû 2020 - 18:55 par kenneth

» le forum fourre tout
fonction asm depuis le c EmptyMar 30 Juin 2020 - 13:11 par Admin

» I had a dream .. glOric
fonction asm depuis le c EmptySam 6 Juin 2020 - 14:18 par jbperin

» Multi soluces...
fonction asm depuis le c EmptyMar 19 Mai 2020 - 12:41 par soft-bug

» Des nouvelles de BAS_ORIC
fonction asm depuis le c EmptyMer 6 Mai 2020 - 16:08 par goyo

» 3D walkthrough template en moins de 600 lignes de C
fonction asm depuis le c EmptyMer 29 Avr 2020 - 20:43 par Star42

» CB2 micro
fonction asm depuis le c EmptySam 11 Avr 2020 - 19:29 par jbperin

» Le bonjour de codeur
fonction asm depuis le c EmptyMer 1 Avr 2020 - 15:18 par Invité

» [résolu] Format des fichiers Hyperbasic...
fonction asm depuis le c EmptySam 28 Mar 2020 - 19:50 par damien

» [résolu] Récupération contenu disquettes 3 pouces...
fonction asm depuis le c EmptyVen 27 Mar 2020 - 15:06 par damien

» Echange de jeux/logiciels
fonction asm depuis le c EmptyLun 23 Mar 2020 - 20:15 par Star42

» Ordi Portable Sony VAIO
fonction asm depuis le c EmptyDim 22 Mar 2020 - 16:17 par froggy

» une atan2 pour vos lib math
fonction asm depuis le c EmptyDim 22 Mar 2020 - 11:30 par drpsy

» nouveau site
fonction asm depuis le c EmptyJeu 19 Mar 2020 - 20:02 par Star42

» CEO Mag Spéciaux disponibles
fonction asm depuis le c EmptyJeu 19 Mar 2020 - 9:33 par musepat

Qui est en ligne ?
Il y a en tout 2 utilisateurs en ligne :: 0 Enregistré, 0 Invisible et 2 Invités

Aucun

Le record du nombre d'utilisateurs en ligne est de 29 le Mer 25 Fév 2015 - 14:01
Connexion

Récupérer mon mot de passe

Statistiques
Nous avons 208 membres enregistrés
L'utilisateur enregistré le plus récent est darq

Nos membres ont posté un total de 8577 messages dans 746 sujets
Portail ORIC



-34%
Le deal à ne pas rater :
LaCie 4 To Disque Dur Externe portable – USB 3.0
94.99 € 144.99 €
Voir le deal

fonction asm depuis le c

Aller en bas

fonction asm depuis le c Empty fonction asm depuis le c

Message par goyo le Jeu 7 Mar 2019 - 13:53

Je sais que pour récupérer en assembleur des paramètres d'une méthode depuis le c il faut les lire sur la pile mais comment fait on pour passer une valeur en retour d'une fonction appelée depuis le c ?

J'imagine qu'on ne peut pas pousser une valeur sur la pile puisque qu'au RTS le PC va se positionner sur le haut de la pile pour lire l'adresse de retour, non ?

J'aimerais compléter cette routine de Chema afin d'en faire une fonction en C qui récupère la valeur aléatoire: (le rnd() d'OSDK est bien mais trop lent)
Code:
; A real random generator...
randseed .word $dead    ; will it be $dead again?
randgen
.(
   lda randseed         ; get old lsb of seed.
   ora $308             ; lsb of VIA T2L-L/T2C-L.
   rol                  ; this is even, but the carry fixes this.
   adc $304             ; lsb of VIA TK-L/T1C-L.  This is taken mod 256.
   sta randseed         ; random enough yet.
   sbc randseed+1       ; minus the hsb of seed...
   rol                  ; same comment than before.  Carry is fairly random.
   sta randseed+1       ; we are set.
   rts                  ; see you later alligator.
.)


Dernière édition par goyo le Jeu 7 Mar 2019 - 14:29, édité 6 fois (Raison : a)
goyo
goyo

Messages : 189
Date d'inscription : 02/05/2014
Age : 49
Localisation : Massy

Revenir en haut Aller en bas

fonction asm depuis le c Empty Re: fonction asm depuis le c

Message par Dbug le Jeu 7 Mar 2019 - 17:25

Un truc que j'utilise souvent pour me souvenir de comment faire les histoires de passage de paramètre, c'est de regardes les fonctions existantes.
Par exemple tu regardes dans "include/lib.h" et tu vois "char toupper(char c);", en cherchant dans "lib/library.ndx" on voit que "_toupper" est implémentée dans "tstring.s", et en regardant le code on voit bien que la valeur de retour est dans a et x.

Dans ton cas particulier, tu pourrais juste renommer "randseed" en "_randseed" et déclarer "extern int randseed;" pour lire la valeur quand tu veux.




_________________

Dbug
Dbug

Messages : 248
Date d'inscription : 06/01/2013

Revenir en haut Aller en bas

fonction asm depuis le c Empty Re: fonction asm depuis le c

Message par goyo le Jeu 7 Mar 2019 - 18:09

Dbug a écrit:Un truc que j'utilise souvent pour me souvenir de comment faire les histoires de passage de paramètre, c'est de regardes les fonctions existantes.
Par  exemple tu regardes dans "include/lib.h" et tu vois "char toupper(char c);", en cherchant dans "lib/library.ndx" on voit que "_toupper" est implémentée dans "tstring.s", et en regardant le code on voit bien que la valeur de retour est dans a et x.

Dans ton cas particulier, tu pourrais juste renommer "randseed" en "_randseed" et déclarer "extern int randseed;" pour lire la valeur quand tu veux.



intéressant, merci pour l'info.

Dans la fonction 'toupper' je vois que le registre 'a' semble être à zéro avant le retour ( lda #0 ) . Le 'x' semble contenir le résultat.

Si je comprends bien ça veut dire qu'entre la fin de la routine en assembleur et le retour à l'appel depuis le C les registres ne sont pas affectés, n'ont pas été sauvés/restaurés via la pile .? l

Code:
_toupper
 ldy #0
 lda (sp),y ;low byte of c
 tax
 lda ctype,x
 and #$02 ;_L
 beq toupper1 ;skip if not lower-case
 sec
 txa ;original char
 sbc #$20 ;force upper case
 tax
toupper1
 lda #0
 rts

du coup comment récupérer le contenu du registre 'x' étant retourné au niveau du programme c ?
goyo
goyo

Messages : 189
Date d'inscription : 02/05/2014
Age : 49
Localisation : Massy

Revenir en haut Aller en bas

fonction asm depuis le c Empty Re: fonction asm depuis le c

Message par Dbug le Jeu 7 Mar 2019 - 20:09

C'est la convention de passage de paramètre du C.
Si la signature de ta fonction retourne une valeur, le compilateur sait que ca sera stocké dans A et X et génère le code qui va bien pour récupérer les valeurs et soit les mettre dans une variable, ou bien une adresse temporaire.

_________________

Dbug
Dbug

Messages : 248
Date d'inscription : 06/01/2013

Revenir en haut Aller en bas

fonction asm depuis le c Empty Re: fonction asm depuis le c

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum