Derniers sujets
» HRC (Hires RLE Compressed)
fonctions supplémentaires pour OSDK EmptyMar 15 Oct 2019 - 20:16 par Hialmar

» CEO-MAG 354
fonctions supplémentaires pour OSDK EmptyDim 13 Oct 2019 - 10:14 par didierv

» Version compatible 64 bits de WAVtoTAP ?
fonctions supplémentaires pour OSDK EmptySam 12 Oct 2019 - 16:48 par markerror

» Lot de livres et revues Oric sur LBC
fonctions supplémentaires pour OSDK EmptyVen 11 Oct 2019 - 21:37 par didierv

» rs
fonctions supplémentaires pour OSDK EmptyMer 9 Oct 2019 - 0:29 par kenneth

» Écriture stylée sur MCP 40
fonctions supplémentaires pour OSDK EmptyDim 6 Oct 2019 - 17:38 par Dbug

» CEO-MAG 353
fonctions supplémentaires pour OSDK EmptyDim 6 Oct 2019 - 15:27 par Symoon

» Vieumikro 2019
fonctions supplémentaires pour OSDK EmptyLun 30 Sep 2019 - 16:34 par Hialmar

» [sujet Public] - le Ceo-Mag
fonctions supplémentaires pour OSDK EmptyDim 29 Sep 2019 - 22:31 par didierv

» Vidéos en anglais
fonctions supplémentaires pour OSDK EmptyDim 29 Sep 2019 - 15:22 par Dbug

» Nouvelles commandes SEDORIC
fonctions supplémentaires pour OSDK EmptySam 28 Sep 2019 - 20:57 par Sheld67

» A venir: nouvelle version TAP2WAV
fonctions supplémentaires pour OSDK EmptyMer 25 Sep 2019 - 21:03 par Symoon

» Twilighte card, 6502 et joysticks
fonctions supplémentaires pour OSDK EmptyMar 24 Sep 2019 - 12:29 par Jede

» Boitier Oric HD
fonctions supplémentaires pour OSDK EmptyLun 23 Sep 2019 - 12:58 par Jede

» OSDK & gnu/Linux...
fonctions supplémentaires pour OSDK EmptyVen 20 Sep 2019 - 4:39 par Symoon

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

kenneth

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 193 membres enregistrés
L'utilisateur enregistré le plus récent est Oric Man

Nos membres ont posté un total de 7938 messages dans 684 sujets
Portail ORIC




fonctions supplémentaires pour OSDK

Poster un nouveau sujet   Répondre au sujet

Aller en bas

fonctions supplémentaires pour OSDK Empty fonctions supplémentaires pour OSDK

Message par Ladywasky le Mar 28 Aoû 2018 - 19:53

Je parle de ces fonctions là :
ATOF.S   (ALPHA TO FLOAT)
ATOI.S    (ALPHA TO INTEGER)
FTOA.S   (FLOAT TO ALPHA)
RND.S     (RND de l'ORIC)
SCRN.S   (SCRN de l'ORIC)
PLOA.S   (PLOT ATTRIBUT de l'ORIC)
PLOC.S   (PLOT CHAR de l'ORIC)
PLOTS.S (PLOT STRING de l'ORIC)
POP.S    (POP de l'ORIC)
WAIT.S    (WAIT de l'ORIC)

Qui, je suppose, sont de Kiwilevrai ou zodiac.
(voir ce post : http://forums.oric.org/t104-mise-en-place-de-l-environnement-c)

ces fonctions sont absentes de l'osdk.

pour les rajouter, il suffit de les copier du répertoire "lib" du package lcc65.zip
(voir ici : http://forums.oric.org/t87-lcc65-la-compil-pour-oric)

et de les coller dans le répertoire lib de l'osdk.

Mais ce n'est pas tout : vous vous retrouverez avec une erreur de compilation si vous utilisez ces fonctions.
Pour l'instant je n'ai fait "joujou" qu'avec plotc :
Code:
void main()
{
 SimplePrint("Hello World !");
 plotc(3,3,'a');
}

Pour ce faire, il vous faudra remplacer les lignes apparaissant ainsi
Code:
lda #LOW(adresse)
par
Code:
lda #<adresse

et les lignes commes celles là par
Code:
lda #HIGH(adresse)
par
Code:
lda #>adresse

pareillement, ces lignes ci poseront un problème :
Code:
STRING "%c"
 BYTE $0

il suffit de les remplacer par celles-là :
Code:
.asc "%c"
 .byt $0

enfin, il faut rajouter ces lignes à la fin du fichier library.ndx (qui est une sorte de catalogue des fonctions) :
Code:
-atoi.s
        _atoi
-ftoa.s
        _ftoa
-atof.s
        _atof
-plota.s
        _plota
-plotc.s
        _plotc
-plots.s
        _plots
-wait.s
        _wait
-rnd.s
        _rnd
-scrn.s
        _scrn
-pop.s
        _pop
-plot.s
        _plot
en fait, je suis un quiche en assembleur .
c'est la documentation de l'assembleur de l'OSDK (ici), qui m'a aidé.
une fois fait, la compilation passe sans problème Wink

merci à l'auteur ou aux auteurs de ces fonctions : elles me manquaient cruellement.
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Dbug le Mer 29 Aoû 2018 - 18:19

Je ne vais pas mettre ces routines là dans le OSDK telles qu'implémentées, parce qu'il y a beaucoup de problèmes:
- Ce ne sont pas des routines assembleur, en gros c'est le code du compilateur C après compilation, donc ca rame, et ca prend de la place.
- Elles sont redondantes, pas besoin d'avoir quatre versions de PLOT dont le code est a 90% identique (calcul de l'endroit ou on affiche)
- SCRN devrait aussi partager 90% du code de PLOT vu que ca fait la meme chose mais dans l'autre sens.
- La fonction POP est une hérésie sans non, celle la ne sera jamais dans le OSDK.
- Il y a deja une fonction random
- WAIT ne marchera que sur Oric ATMOS (appel de la ROM)
- scanf contient déja le code pour convertir des chaines de caractères vers format float ou entier, donc ATOF et ATOI devraient utiliser ca.
- printf contient déja le code pour convertir un float vers format ASCII, donc pareil.

Le but du OSDK n'est pas d'etre exhaustif et de permettre de faire tourner n'importe quel programme C standard sur l'Oric. Si c'est ce que les gens veulent faire, il y a CC65 qui fait ca très bien.

Le but du OSDK est de fournir une solution relativement optimale pour faire des programmes Oric aussi bons que possible, ce qui implique pas mal de contraintes, dont le fait de ne pas rajouter de code non optimisé.

J'ai eu pas mal de discussion avec Jérome, il va y avoir des changements (ne serait ce que pour le support téléstrat et Orix propre), mais ca va se faire de facon contrôlée.

merci à l'auteur ou aux auteurs de ces fonctions : elles me manquaient cruellement.

Pour les fonctions manquantes, un truc qui marche bien c'est de juste faire des macros en C:

Code:
#define PLOT(x,y,c) POKE(0xBB80+(X)+(Y)*40,C)
#define SCRN(x,y) PEEK(0xBB80+(X)+(Y)*40)

Ca ne devrait pas générer un code pire que le SCRN.S Smile

_________________

Dbug
Dbug

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

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Ladywasky le Mer 29 Aoû 2018 - 18:27

OK grand chef !
Very Happy
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Dbug le Mer 29 Aoû 2018 - 19:17

Après, si il y a des requêtes pour des fonctions vraiment utiles (conversion de programmes BASIC vers C, ca ne rentre pas dans la catégorie utile vu que le programme BASIC existe déja :p), il suffit de faire une demande claire, tout en se souvenant que le but c'est l'utilité, pas la compatibilité ISO/POSIX/UNIX ou autre truc qui ne tournerait pas bien sur un Oric 48k Smile

Voir http://www.osdk.org/index.php?page=issues

_________________

Dbug
Dbug

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

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Ladywasky le Mer 29 Aoû 2018 - 20:10

Bah voilà, j'ai suivi ton conseil et j'ai viré tout ça.

Pour le wait, je me suis débrouillée comme ça :
Code:

void wait(unsigned int wait_cs)
 {
 clock_t TIME0, TIME1;
  
 TIME0 = clock();
 do
  TIME1 = clock();
 while ( ((double)(TIME1-TIME0))<wait_cs );
 }


Dernière édition par Ladywasky le Mer 29 Aoû 2018 - 22:01, édité 3 fois
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Dbug le Mer 29 Aoû 2018 - 21:27

Sur oric "double" et "float" c'est un tres tres mauvaise idée.
Il faut privilégier les octets, a defaut les valeurs entieres 16 bit.

La fonction clock est implémentée comme ca.
Code:
;
; clock_t clock(void)   ; return the system clock
;
_clock
   php
   sei
   ldx $0276
   lda $0277
   cli         ; JEDE
   plp
   rts
Ca charge en #276/277 dans A et X, donc une valeur 16 bit, et on sait que ca incrémente avec le temps, donc je suppose que du code dans ce genre là devrait suffire:
Code:
void wait(unsigned int wait_ms)
 {
  clock_t TIME0; 
  TIME0 = clock();
  while ( (clock()-TIME0))<wait_cs ) 
  {}
 }
Tout octet que tu perds ici et là sont des octets que tu aimerais bien avoir plus tard.
La principale raison pour laquelle Chema est passé au 100% assembleur c'est a cause de la place mémoire, le code généré par les compilateurs C est très très gros comparé au BASIC ou a l'assembleur propre.


_________________

Dbug
Dbug

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

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Ladywasky le Mer 29 Aoû 2018 - 22:01

D'accord, super, j'ai corrigé Smile
Et surtout, j'ai compris.
Merci champion.
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Ladywasky le Jeu 30 Aoû 2018 - 13:06

Bon hé bien soit la fonction clock ne fonctionne pas, soit je suis une truffe...
Cette fonction wait continue le code sans attendre les centième de seconde qu'on lui demande;

wait(1000) ; (10 secondes) passe directement à l'instruction suivante...
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Dbug le Jeu 30 Aoû 2018 - 13:14

Essaye ca pour voir si ca marche:

Code:
while (1)
{
 printf("Clock:%u",clock());
}

Tout ca c'est du code qui date de la première version du SDK par Fabrice, Alexios and cie... ca n'a pas du être touché depuis 1997, et je ne m'en sert pas vu que la première chose que je fait en général c'est de remplacer les IRQ de la ROM par mes propres fonctions.

_________________

Dbug
Dbug

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

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Ladywasky le Jeu 30 Aoû 2018 - 15:04

hé bien en fait, ton petit bout de code fonctionne. (pas avec %u, mais %d, mais ce n'est pas le soucis)

J'ai cherché, vraiment, et c'est problématique.
Il doit y avoir un problème renvoyé par clock_t(t) puisque si tu l'affecte à une variable :
Code:
TIME0 = clock();
les opérateur + et - semblent inversés : l'addition effectue une soustraction et vice-versa avec un unsigned int, pareil pour les opérateurs de comparaison < et >

donc :
Code:
#include <lib.h>
#include <time.h>

void wait(unsigned int wait_cs);

void main()
{
 printf("start\n");
 wait(1000);
 printf("stop\n");
    get();
 
}
 
 void wait(unsigned int wait_cs)
 {
 clock_t TIME0, TIME1, TIMEOUT;
 
 TIME0 = clock();
 TIMEOUT = TIME0+wait_cs;  // effectue une soustraction !
 while ( clock()<TIMEOUT ){}; //
 
 printf(": %d %d %d\n",TIME0, TIMEOUT, wait_cs);
 }

affichera donc :
Code:
start
:       1   999  1000
stop
et
Code:
void wait(unsigned int wait_ms)
 {
  clock_t TIME0;  
  TIME0 = clock();
  while ( (clock()-TIME0))<wait_cs )  //<-- comparaison qui fonctionne à l'envers et sortie de boucle immediate
  {}
 }

Maintenant, si on essaye de passer par une variable intermédiaire :
Code:
void wait(unsigned int wait_ms)
 {
  clock_t TIME0, TIME1;  
  TIME0 = clock();
  do {TIME1=clock();}
  while ( (TIME1-TIME0))<wait_cs )  //<-- comparaison qui fonctionne à l'envers et sortie de boucle immediate

 }
on aura le même problème avec la comparaison (qui par ailleurs déclenche l'erreur EQ0W que j'ai posté sur defence-force, si on ne l'a pas rajouté dans MACRO.H)

et si on remplace clock_t par unsigned int, les problèmes d'inversion d'opérateur restent là...


Dernière édition par Ladywasky le Jeu 30 Aoû 2018 - 15:13, édité 1 fois
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Dbug le Jeu 30 Aoû 2018 - 15:10

Oh, non, c'est parce que la fonction clock retourne la valeur du compteur de la ROM... qui décrémente probablement.

_________________

Dbug
Dbug

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

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Ladywasky le Jeu 30 Aoû 2018 - 15:14

Sauf que , le résultat qu'on obtient à l'affichage s'incrémente...
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Ladywasky le Jeu 30 Aoû 2018 - 15:21

printf("%d", TIME0);

affiche un entier positif... c'est casse pied

A noter : dans osdk, printf("%u", une_variable); affiche u, la lettre "u" et non pas un entier non signé
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Ladywasky le Jeu 30 Aoû 2018 - 15:46

Au final je m'en sort en utilisant le TIMER3 de l'oric (c'est ballot parce qu'il me semble que ça ne fonctionne pas pour l'oric 1 - rom v1.0) :
Code:
 void wait(unsigned int wait_cs)
 {
   doke(0x0276,wait_cs);
   while ( deek(0x0276)>0){};
 }
 
Ladywasky
Ladywasky

Messages : 213
Date d'inscription : 25/08/2018
Age : 49

Revenir en haut Aller en bas

fonctions supplémentaires pour OSDK Empty Re: fonctions supplémentaires pour OSDK

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

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