Forum Oric
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Derniers sujets
» rs
fonctions supplémentaires pour OSDK EmptyDim 31 Mar 2024 - 14:35 par kenneth

» Bla Bla général du Jury
fonctions supplémentaires pour OSDK EmptyJeu 21 Mar 2024 - 8:51 par Dom50

» carte mère Oric (re)tracée
fonctions supplémentaires pour OSDK EmptyMar 5 Mar 2024 - 18:54 par kenneth

» Meurtre à Grande Vitesse
fonctions supplémentaires pour OSDK EmptyDim 25 Fév 2024 - 5:09 par Iurius

» ORIC-1 sur LE BON COIN
fonctions supplémentaires pour OSDK EmptyVen 23 Fév 2024 - 23:01 par Mcar

» ORIC ATMOS sur LE BON COIN
fonctions supplémentaires pour OSDK EmptyDim 4 Fév 2024 - 12:06 par kiwilevrai

» Problème d'affichage des couleurs avec un Oric Atmos
fonctions supplémentaires pour OSDK EmptySam 27 Jan 2024 - 1:26 par pierbail

» Bienvenue dans le Forum des Oriciens
fonctions supplémentaires pour OSDK EmptyMar 9 Jan 2024 - 12:33 par Dom50

» Rencontre avec Laurant Weill, co-fondateur de Loriciel, et mon garçon de 12 ans
fonctions supplémentaires pour OSDK EmptyVen 29 Déc 2023 - 14:13 par Arcade-des-Monts

» Bonnes fêtes
fonctions supplémentaires pour OSDK EmptyMar 26 Déc 2023 - 10:21 par Dom50

» Murders in Venice / Meutres à Venise
fonctions supplémentaires pour OSDK EmptySam 18 Nov 2023 - 22:44 par retroric

» Un clavier PS/2 pour tester un ORIC
fonctions supplémentaires pour OSDK EmptyDim 27 Aoû 2023 - 9:49 par Voyageur

» Disquette 3" Sedoric
fonctions supplémentaires pour OSDK EmptyMar 1 Aoû 2023 - 14:22 par AtomeX

» faire un 6502 avec des phototransistor
fonctions supplémentaires pour OSDK EmptyDim 16 Juil 2023 - 17:26 par Voyageur

» Oricutron linux et DSK
fonctions supplémentaires pour OSDK EmptyJeu 29 Juin 2023 - 18:34 par Voyageur

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

Nos membres ont posté un total de 8922 messages dans 811 sujets
Sites Sympas

> Culture Club


Le Deal du moment :
Funko POP! Jumbo One Piece Kaido Dragon Form : ...
Voir le deal

fonctions supplémentaires pour OSDK

2 participants

Aller en bas

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

Message par Ladywasky 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 : 240
Date d'inscription : 25/08/2018
Age : 53

Revenir en haut Aller en bas

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

Message par Dbug 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 : 248
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 Mer 29 Aoû 2018 - 18:27

OK grand chef !
Very Happy
Ladywasky
Ladywasky

Messages : 240
Date d'inscription : 25/08/2018
Age : 53

Revenir en haut Aller en bas

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

Message par Dbug 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 : 248
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 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 : 240
Date d'inscription : 25/08/2018
Age : 53

Revenir en haut Aller en bas

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

Message par Dbug 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 : 248
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 Mer 29 Aoû 2018 - 22:01

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

Messages : 240
Date d'inscription : 25/08/2018
Age : 53

Revenir en haut Aller en bas

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

Message par Ladywasky 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 : 240
Date d'inscription : 25/08/2018
Age : 53

Revenir en haut Aller en bas

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

Message par Dbug 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 : 248
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 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 : 240
Date d'inscription : 25/08/2018
Age : 53

Revenir en haut Aller en bas

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

Message par Dbug 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 : 248
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 Jeu 30 Aoû 2018 - 15:14

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

Messages : 240
Date d'inscription : 25/08/2018
Age : 53

Revenir en haut Aller en bas

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

Message par Ladywasky 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 : 240
Date d'inscription : 25/08/2018
Age : 53

Revenir en haut Aller en bas

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

Message par Ladywasky 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 : 240
Date d'inscription : 25/08/2018
Age : 53

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 ne pouvez pas répondre aux sujets dans ce forum