PDA

Voir la version complète : [Test materiel] Une plate forme de programmation de poche



charognard
23/06/2015, 08h14
j'avoue que j'ai des gros doute sur l'intérêt d'un tel article ici, mais sait-on jamais je pourrais en convertir certains ;)
Le SHARP PC 850V
Sortie en 1995, le G850V est le dernier de la lignée des ordinateurs de poche façon 80’s (avec le VS, sorti en 2009, est quasi identique), il reprend le concept ordi/caltoche amorcé par le 1401, repris ensuite par les séries 14xx, E2xx, E5xx, E8xx.
http://fr.normand.free.fr/ordipoche/850v/image002.gif
Il se présente sous la forme d’un boitier anthracite en résine protégé par un couvercle amovible basculable sur la face avant ou la face arrière. A noter que celui-ci permet accès au port RS232 par une découpe judicieuse.
Sur la face arrière, par une trappe ouvrable à la main donne accès aux 4 piles type AAA offrant une très bonne autonomie au PC (plusieurs mois) mais exigeant une épaisseur conséquente du boitier (198x102x27mm avec boitier de protection).
http://fr.normand.free.fr/ordipoche/850v/image001.jpg
Basé sur un processeur Z80 à 8Mhz il est fourni avec 96Ko de ROM (selon le manuel, mais j’ai quelques doutes, une source donnant 336Ko) et 32Ko de RAM (30179 octets aucun doute là).
Outre le port du bus système accessible par l’ouverture d’un cache sur son côté droit, on ne dispose ici d’aucun compartiment d’extension, notamment les extensions de mémoire, au vu des fonctionnalités de la machine c’est une franche déception.
http://fr.normand.free.fr/ordipoche/850v/image008.jpg
De par son processeur et sa philosophie générale, Il est le fils légitime des PC1500 et PC1600 (comme toute la gamme G8xx d’ailleurs), Cependant son Basic, son port RS232 (à gauche), l’absence de TIME … sont hérités la série 12, 13, 14 et suivantes (processeur SC61860 et compatible), une sorte de fusion des deux lignées en somme, un aboutissement.
La coque plastique est l’une des évolutions (si j’ose dire !) les plus visibles, exit donc le beau boitier sensuel en aluminium brossé des versions 80, on est ici dans les années 90 et la réduction des coûts a frappée (TI était précurseur). Le plastique est cependant de bonne qualité (d’un niveau HP48 je dirais) et plutôt bien ajusté sans craquements intempestifs (bref ce n’est pas un FX702P quoi !!).
Le clavier est d’un touché agréable et permet une frappe rapide à deux doigts. Segmenté en deux, sa partie droite est dédiée aux fonctions mathématiques directes et sa partie gauche à l’alphabétique. La saisie de programme ou de texte est facilité par l’apparition d’une touche DEL permettant la bascule entre deux modes de saisie. Soit l’écrasement de caractère, soit l’insertion. On s’embête nettement moins que les séquences interminable de [2nd] et [2nd][DEL] bien connue des possesseurs des générations originelles.
Une touche participant aussi au confort, que l’on trouvait déjà sur le 1600, permet, elle, l’annulation du dernier caractère frappé. Notez que tant les flèches que [BACKSPACE] et [DEL] sont à répétition.
La touche [SHIFT] fonctionne différemment des autres pockets série 12, 13, 14, 15 et 16 et demande son maintien en pression pour l’accès à la fonction (comme sur un ordinateur contemporain en fait), à noter que la touche, côté pavé numérique, [2nd] permet le SHIFTAGE selon la tradition SHARP avec un appui séquentiel.
Les majuscules sont accessibles par [CAPS] en utilisation bascule. Le shiftage des touches alphabétiques, donnant lui, accès à quelques mot clé BASIC (inutile pour moi car le Sharp gère les abréviations) ou caractère spéciaux.
La touche [BASIC] permet soit d’avoir accès au mode BASIC, avec toujours sa déclinaison PRO, dédié à la programmation, et RUN permettant lui l’exécution de programme ou de commande directe, de calcul d’expressions ou de calcul façon caltoche’s 80.
La touche [TEXT] elle appelle l’éditeur de texte intégré qui permet de saisir des sources en C, en CASL, en assembleur ou même en mémo (tubes et autre pense bête illicite) et même en basic (quoique dans ce cas le mode Basic vérifiant la syntaxe sur validation de la ligne est plus approprié), avec un impératif malheureux … les numéros de lignes sont obligatoires !
Les majuscules sont gérées, ainsi que plusieurs jeux de caractères japonais accessibles par l’appui sur la touche idoine (c’est avant tout une machine dédiée au marché japonais avec une cible étudiant en informatique).
A noter aussi le bouton RESET accessible en façade et de diamètre suffisant pour utiliser la pointe d’un stylo.
Le shiftage de la touche [ENTER] donnant accès au mode bien connu des utilisateurs SHARP permettant l’impression sur le CE126P (PRINT=LPRINT ou PRINT=PRINT).
Le mode DEF des anciennes générations, pourtant bien utile, est lui inexistant, il sera pallié en parti par la gestion de fichier intégrée ne prenant pas en charge le MERGE ni le CHAIN malheureusement.
Pas de touches de fonctions (une ligne de touche contre deux lignes d’affichage on va dire).
Pour le jeu de caractères géré il est codé en ASCII sur 8 bits (256 caractères) mais ne dispose d’aucun caractère accentué, pas étonnant vu sa cible mais quand même regrettable.
[B]Un format d’écran inédit
L’écran, avec son contraste réglable par la touche shiftée [ANS], a un rendu impeccable avec des angles de visions très important, (pour un écran des années 90), il dispose de 6 lignes de 24 caractères, soit 144 matrices (NDRL : 24 caractères ça rappelle la série 12,13 et 14 ça !) avec un mode graphique de 144x48 pixels.
http://fr.normand.free.fr/ordipoche/850v/image012.png
Imposant par rapport au 80’s …. Mais avec la pléthore de langages il eu été bon de voir plus grand avec un écran de 6, ou même 8 lignes et 40 caractères (le E500 a bien 4x40=160 caractères lui !! avec un clavier alpha plus conséquent). On se sent très à l’étroit pour une programmation en C ou même en assembleur.
L’écran possède sur sa gauche l’indicateur et [BATT] annonçant un manque d’énergie. Sur la partie droite ce n’est pas moins de 15 notifications différentes annonçant les diverses états du PC.

[B]La caltoche
Le mode calculatrice n’est pas spécifique, contrairement à la série 14 et même à la concurrence (Casio pour être clair), on l’utilise en basic (mode RUN).
La partie droite de la calculatrice agit façon inversée si une valeur numérique est saisie la fonction est appliquée à cette valeur (comme une calculatrice des années 80 en fait). Si aucune valeur n’est saisie, le nom de la fonction apparait sur la ligne de commande pour l’édition d’une expression à calculer avec toutes les possibilités de rappel de changement, bref le traditionnel chez Sharp.
C’est moins spécialisé que 2 modes séparés mais par expérience le mode calculatrice des Sharp PC 14xx n’est pas forcément très exploité, la possibilité de pouvoir réédité son calcul (ou du moins le vérifier) étant nettement privilégié. Ça devient une évidence avec les calculateurs des années 90, 2000 et certainement 2010 au vu de l’évolution actuelle.
Plusieurs originalités sur la partie calculatrice, d’abord la touche [CONST] permettant de mémoriser une opération de +,-, * ou / par un nombre sur validation par [ENTER].
Un exemple simple si je frappe [CLS]*(7/2)[CONST], chaque nombre saisie suivi d’une validation se verra multiplié par 3.5. On sortira de ce mode par [2nd][CA], un indicateur [CONST] apparait dans ce mode sur la partie droite de l’écran.
Ensuite [MDF] fonctionnant en parallèle de [DIGIT] (une sorte de fix) qui permet de tronquer aux décimales non affichées, intéressant par exemple lorsque les calculs intermédiaire sont à tronquer à la xeme décimale.
Variables avec tous les calculs traditionnels mais les menus sont en japonais il faut donc chercher un peu.
Le mode , lui aussi en japonais, permet les conversions et les opérations inter-bases dans les bases 2,10 et 16 (pas d’octal donc) avec gestion du complément à 2.
http://fr.normand.free.fr/ordipoche/850v/image009.png
Ce module se charge dans la zone basic (et donc prévient d’un éventuel écrasement), ça sent un peu l’ajout à la dernière minute leur truc!! Du genre : merde on a oublié les bases et ça part en fab la semaine prochaine, déjà que l’on va être juste pour le module de STAT !!
Les fonctions trigo hyperboliques n’ont pas de touches dédiées il faudra donc frapper directement leurs fonctions respectives (HCS, HSN par exemple en Basic, leur équivalent existant aussi en C).
Notez que la précision interne de calcul est de 12 chiffres avec 10 d’affichés/stockés dans les variables, du traditionnel chez Sharp, pourtant quelques modèles offraient une précision à 20 chiffres en double précision. Je le répète le crédo du Sharp ce n’est pas les maths.
Ne cherchez pas non plus aide aux dérivés, intégrales, calculs financiers et autre études et graphiques de fonctions, ça sera à développer selon besoin.
http://fr.normand.free.fr/ordipoche/850v/image007.png
[B]Alors je programme en quoi ?
Le PCG850V et le plus abouti de la lignée initiée en 1988 par le SHARP PC E200 comprenant entre autre le G815(1993), G820(1996), G830(1996), G850(1996), le G850S(2000) et même le VS en 2009.
Il est avant tout dédié à l’apprentissage de la programmation et pour celui qui veut s’initier, voire s’améliorer, c’est LA machine à posséder.
Avec cinq langages (BASIC, C, CASL, Assembleur, PIC), un moniteur, un éditeur, un mode stat (en japonais), un mode base (en japonais aussi), une gestion de fichiers, un port communiquant RS232 et un port SIO …. Pardonnez du peu.
On peut dire que c’est l’OP le plus complet (son concurrent le Casio Z1GRa voit son C moins puissant, moins rapide et moins standard, pas de PIC…).
Pour aborder la programmation, le Basic est certainement le plus approprié. Il est ici au standard Sharp reprenant les principales fonctionnalités de la série 13 et suivante, avec cependant quelques différences :
[I]• La suppression des GOTO, GOSUB calculés, Le RENUM ne les gérant pas. Par contre les étiquettes peuvent être utilisée sous deux syntaxes différentes soit ‘’ETIQUETTE’’ soit *ETIQUETTE.
Ex. : 20 GOTO *ETIQ …. 100 *ETIQ :suite …
• Pas de piezo intégré donc pas de son malgré l’existence de la l’instruction BEEP (il faudra en effet jouer soit du fer à soudé, soit se reprendre sur le RS232 pour lui donner la parole).
• Un MEM qui devient FRE.
• Le PRINT devient compatible avec le graphisme (auparavant le PRINT effaçait l’ensemble de la ligne sur la serie 13).
• Pas d’AREAD, car pas de DEF
• Gestion du port série différente
• Pas de CLOAD, CSAVE (remplacé par BLOAD et BSAVE).
• Pas de MERGE ni de CHAIN.
• Pour l’ARUN on peut aussi se torch….
Des structures évoluées apparaissent tel que
• WHILE~WEND, exécutant la boucle pendant la véracité de l’expression. Son pendant.
• REPEAT~UNTIL tournant jusqu’à l’expression.
• Le sélecteur SWITCH~CASE~DEFAULT~ENDSWITCH offrant une alternative au traditionnel ON~GOTO ou ON~GOSUB et traitant en plus les variables alphanumériques.
• Ainsi qu’un IF THEN ELSE ENDIF multi ligne, mais sans possibilité d’utiliser ELSEIF. Offrant ainsi l’accès à la programmation dite structurée.
Les boucles FOR~TO~STEP NEXT, gérant du décimal au niveau du STEP, acceptent le NEXT sans désignation de variables.
Le GOSUB est le seul accès aux sous-programmes mais avec une profondeur de pile de 10 (pour la récursivité on utilisera le C).
Pour les fonctions et procédures utilisateurs, on passe son chemin, ici ni de DEFFN, ni de variables locales. Il est clair qu’ici le basic n’est pas la partie centrale de la machine.
Une gestion graphique complète avec
• GPRINT (sans filtre binaire like PC 1600 malheureusement) acceptant toujours une chaine de caractères ou une suite de valeurs numériques séparées par des points virgule.
• POINT retournant 0 ou 1 suivant l’état d’un point de la matrice.
• Le couple PSET et PRESET allumant ou éteignant un point. GCURSOR positionnant le curseur graphique.
• LINE (syntaxe 13xx) pour les lignes, les rectangles vides ou pleins avec paramétrage du type de trait.
• CIRCLE, les cercles pleins ou vides et type du trait.
• Et, nettement plus inédit, PAINT permettant de colorier une surface de 6 motifs différents.
Étonnant toutes ces fonctions sur un si petit écran ! (quoique le X07 à l’époque ait ouvert le bal avec un CIRCLE en 120x32 points).
Des fonctions binaires complètes avec AND, OR, NOT bien sur mais aussi XOR et même INP, nettement moins courant mais sans leur équivalent logique, il faudra donc faire attention pour l’adaptation de programme.
La plage de fonctions mathématiques à orientation scientifique est complète avec les logarithmes en base e et 10 et leurs inverses, la trigonométrie et inverse dans sa version normale et hyperbolique, les permutations et les arrangements, conversions diverses …. Etc., manque à l’appel des fonctions statistiques.
Ses autres domaines de compétences sont le traitement des chaines de caractères (on reste sur le minimum syndical ici, pas de INSTR, SUB…), la gestion des E/S (RS232 et SIO), Les conversions d’unités (Base, sexagésimal, Système repérage.), le langage machine avec POKE, PEEK, IMP, OUT, CALL sans paramètre autre que l’adresse malheureusement (oh qu’il est bien mon PC1600).
La gestion des Variables est dans le type de la série 125* et suivantes, variables 7 bits pour les variables fixes A~Z avec un choix imposé numérique ou alpha.
Variables 16 bits pour les textuelles bi-lettres (ab, ac…) avec uniquement deux caractères significatifs, ça fait un peu léger mais sur un pocket y a-t-il besoin de plus ?
Pour les variables chaines plus conséquentes c’est avec l’habituelle déclaration de tableau chaine DIM VA(x)*y que l’on procède, VA étant le nom de la variable, x le nombre d’éléments et y le nombre de caractères -1 réservés dans la chaine avec un maxi de 256 caractères (c’est quand même mieux que les 80 habituel). Tableaux, au passage, gérant jusqu’à 2 dimensions. J’ajoute que les variables BASIC sont permanentes et mémorisées après extinction.
Pour la rapidité du basic il se situe dans le haut du pavé avec la traditionnelle boucle FOR~NEXT à 10000 s’exécutant en 10,5s soit deux fois plus rapide qu’un E500, à relativiser pour les fonctions mathématiques bien sur, et jeu égal avec le 890P pour ce test, mais il écrase son concurrent 16 bits sur 90% des autres tests.
L’éditeur basic est ici pleine page (contrairement à la série 13 mais comme le 1600) il gère les abréviations, vérifie la syntaxe sur validation de la ligne et accepte même les minuscules qui seront converties, les lignes vont jusqu’à 255 caractères.
La saisie et correction est largement facilité par la présence de cette touche et les modes d’insertion et superposition précédemment évoqués.
Il ne lui manque que le copier/coller (ça existe bien sur le Casio 850P et suivant par le MEMO).
Les possibilités de renommer les lignes et de les numéroter automatiquement sont présentent par les fonctions RENUM et AUTO.
Le TRON et TROFF font parti du jeu pour le débogage, secondé par une notification automatique de l’erreur en pointant sur la ligne en question, il manque par contre la gestion des erreurs (pas de ON ERROR, ERR, RESUME NEXT et consort).
http://fr.normand.free.fr/ordipoche/850v/image011.gif
Instructions Basic
^ &H ABS ACS AHC AHS AHT AND AS ASC ASN ATN APPEND AUTO BEEP BLOAD BLOAD M BLOAD ? BSAVE BSAVE M CALL CHR$ CIRCLE CLEAR CLOSE CLS CONT COS CUB CUR DATA DEG DEGREE DELETE DIGIT DIM DMS DMS$ E ND EOF ERASE EXP FACT FILES FIX FOR~TO~NEXT~STEP FRE GCURSOR GOSUB~RETURN GOTO GPRINT GRAD HCS HDCOPY HEX$ HSN HTN IF~THEN~ELSE IF~THEN~ELSE~ENDIF INP INKEY$ IMP INPUT INPUT# INT KILL LCOPY LEFT$ LEN LET LFILES LINE LIST LLIST LN LNINPUT# LOAD LOCATE LOF LOG LPRINT MID$ MDF MOD MON NCR NEW NOT NPR ON OPEN OR OUT OUTPUT PAINT PASS PEEK PI PIOGET PIOPUT PIOSET POINT POKE POL PRESET PRINT PRINT->LPRINT PRINT# PSET RADIAN RANDOMIZE RCP READ REC REM RENUM REPEAT~UNTIL RESERVED RESTORE RIGHT$ RND RUN SAVE SGN SIN SPIN SPOUT SQR SQU STOP STR$ SWITCH~CASE~DEFAULT~ENDSWITCH TAN TEN TROFF TRON USING VAL VDEG WAIT WHILE~WEND

[B]Éditeur
L’éditeur intégré est accessible par la touche. Plus qu’un éditeur c’est une gestion de fichier complète permettant bien sur de générer des fichiers mais aussi de les sauvegarder en les nommant, de les imprimer, de les envoyer ou recevoir sur le RS232, de les sauvegarder en les nommant de passer des sources entre l’éditeur et le Basic et même la gestion d’un RAMDISK il devient rapidement évident que les 32 Ko de RAM non extensible ne suffiront pas et qu’il faudra utiliser à outrance la connexion RS232.
http://fr.normand.free.fr/ordipoche/850v/image015.png
À noter qu’un cordon PCG850/USB existe et permet de plus d’avoir du son.
Un système de menu et sous menu dont la fonction est appelable par la lettre en majuscule du mot clef permet d’avoir accès à 17 fonctions.
L’éditeur proprement dit est accessible par le menu principal en appuyant sur la touche E, c’est un éditeur pleine page avec pour seule contrainte, et non des moindres … d’avoir des numéros de ligne. Après avoir essayé de trouver une explication rationnelle à ce fait et une quelconque utilité il s’avère que c’est d’une inutilité totale (le Casio 890P sans sort très bien sans) mais de plus ça fait consommer de la RAM inutilement et pourtant il y en a peu (j’insiste il est vrai, mais 32Ko c’est 10ko de développement C maxi se répartissant entre la sauvegarde, le source et le compilé).
L’éditeur à outre les fonctions d’édition de l’éditeur basic, avec le mode insertion et superposition, quelques fonctions intégrées :
• A[xx],[yy] pour l’auto numérotation des lignes.
• Lxx pour le listage.
• R[xx],[yy],[zz] pour la renumérotation.
• Dxx,[yy] pour l’effacement.
• Cxx,yy,zz pour la copie d’une ou plusieurs lignes.
• S[0|1],’’chaine’’ pour la recherche d’une expression.
• E[0|1], ’’chaine1’’, ’’chaine2’’ pour le remplacement d’une chaine par un autre.
Par exemple un simple C100, 300, 2000 permettra de copier les lignes de 100 à 300 sur la ligne 2000 et suivantes … pas mal quand même et inexistant sur l’éditeur Basic.
Ou un simple E’’Varia’’,’’va’’ permettra de changer la chaine sur l’ensemble du source.
A noté aussi la touche [TAB] pour l’indentation non automatique des sources assembleur et CASL, pour le C l’écran est trop petit on utilisera des espaces (d’où ma remarque précédente sur les 40 caractères souhaités). La suppression du source est possible dans le menu principal de la touche [TEXT].
L’impression est possible sur CE-126P se connectant sur le port I/O.
Avec le sous menu SIO c’est les communications que l’on gère paramétrable à souhait :
Baud de 300 à 9600
Nombre de bits, Bit de stop, parité, fin de ligne, fin de fichier, numéro de ligne, protocole.
Avec la possibilité d’envoi ou de réception de fichier depuis ou vers l’éditeur.
La gestion de fichier intégrée est accessible depuis le menu File permettant de sauvegarder, de charger, d’effacer et de lister les fichiers existant. Notez que cette zone n’est pas fixe mais dynamique empiétant de ce fait sur la zone programme, éditeur, compilation.
Basic le pont indispensable entre l’éditeur et le basic, avec si la mémoire est insuffisante lors de la copie, d’en proposer le transfert.
La dernière option Rfile permet la création d’un fichier de données de taille fixée, donc attention lors du paramétrage on peut se retrouver avec un manque de place. Ce fichier (ces fichiers devrais-je dire car il peut en avoir plusieurs) est accessible par programmation, en basic et en C, avec les fonctions OPEN, PRINT# et INPUT# pour le basic.
On peut aussi à travers ce menu les sauvegarder, les charger, les effacer et les lister.
On entend par sauvegarde et chargement une relation directe avec l’éditeur, mais il est évident que ces RFILE ne sont pas dédié à la sauvegarde des sources mais bien à la sauvegarde de données, d’ailleurs l’extension implicite .DAT ne trompe pas. Le passage par l’éditeur est justifié pour une éventuelle impression ou communication RS232.
GESTION DES RFILES
Après un INIT RFILES, FRA.DAT
En Basic

5 A=5
10 OPEN "E:FRA.DAT" FOR OUTPUT AS #2
20 PRINT #2,A
30 A=2
40 CLOSE
50 OPEN "E:FRA.DAT" FOR INPUT AS #2
60 INPUT #2,A
70 PRINT A
80 END

En C

10 void print(char nom,int x,int y){
20 printf("%c %d %d¥n",nom,x,y);
30 }
40 main(){
50 char nom=125;
60 int x=1,y=2;
70 FILE * sortie, * entree;
80 sortie=fopen("FRA.DAT","w");
90 fprintf(sortie,"%c%d %d¥n",nom,x,y);
100 nom=145,x=17,y=18;
110 print(nom,x,y);
Le C
Le langage C sur un ordi de poche c’est peu courant, en fait en dehors du japon c’est même inédit. Le C embarqué dans le Sharp PCG850V est le plus puissant embarqué sur ordipoche, il est aussi le plus rapide et le plus standard (j’insiste et je vise en particulier le concurrent de chez Casio).
Si le Basic avait une amorce de structure ici avec le C on est en plein dedans, variables globales, locales, constantes, pointeurs, fonctions, procédures. Tout le C standard y est, même les structures absentes du Casio (j’ai re-dis Casio ???).
En plus des fonctions C standard Sharp à ajouter des fonctions mathématiques (en bleu dans le tableau) et des fonctions graphique (en rouge) et même, planqué en vert, le son si la modification précédemment cité est posé.
Pour qui veut se mettre au C c’est vraiment l’outil idéal. Petit, boot instantané, compilation instantané. Le G850V vous permettra de vous entrainer à la pratique du C tant dans le métro que durant la pause de midi, ou même en vacances (surtout en vacances).
Le manuel, en japonais au demeurant, est très bien fait et didactique, même sans aucune connaissance de la langue du pays du soleil levant on s’en tire bien, quelques outils de traduction peuvent lever l’ambigüité sur certains points.
Les premiers pas sur ce langage pour le non habitué, tel que moi, c’est d’essayé de retrouver ses nouveaux points de repère.
Pas si évident que cela pour celui qui pense Basic, et envisage la traduction mot à mot. Le but est d’apprendre à penser C (je n’aurais pas voulu la rater celle-là)!
Certaines structures comme IF~ELSE, FOR, DO~WHILE … oups je parle en majuscule là, C’est sensible à la casse !! (La sale bête), je disais donc, certaines structures comme if~else, for, do~while, switch ont leur analogie Basic, les fonctions, procédures et portée des variables ont leur équivalent Pascal reste les pointeurs qui ne pose que peu de problème de compréhension à celui qui a déjà pratiqué le langage machine ou l’assembleur. Reste donc à assimilé la syntaxe propre au C et surtout oublier les autres langages pour apprécier à sa juste valeur ce dialecte. Et on se prend vite au jeu, à tel point que le C pourrais être le langage du pocket par excellence.
Aller on se lance, pour la programmation en C on doit d’abord taper son source dans l’éditeur de texte vue précédemment. Ensuite la procédure est de le compiler.
Pour cela il y a la touche shiftée qui donne accès à quatre options (voir graphique complet page suivante:
• La compilation du source.
• Le mode trace une exécution pas à pas.
• Le lancement du programme compilé.
• La désignation du périphérique standard de sortie.
La compilation du source ne pose pas de problème majeur.
Un simple appui sur ‘C’ le compile. Les directives #define, #include, #if~$ elid~# else~$ endif et #ifdef $ ifndef sont impeccablement gérées.
Si un problème intervient lors des passes du compilateur le numéro de ligne contenant l’erreur sera indiqué ainsi que une explication sommaire mais suffisamment explicite de celle-ci.
Exemple : ‘(870) undefine : x’ pour problème à la ligne 870, variable x non déclarée.
Un retour rapide sur l’éditeur, un Lxxx (aller à la ligne xxx) et une correction réglera rapidement le problème (enfin dans le meilleur des mondes). J’attire l’attention sur un oubli du point-virgule (courant pour les habitués du Basic) sur la fin de ligne donnera un message d’erreur sur la ligne suivante.
Le mode Trace permet l’accès à plusieurs options par la lettre majuscule.
• [ENTER] Ligne suivante
• C pour continu en mode breakpt et retour au pas à pas en trace.
• A pour le retour au menu principal.
• T pour le retour au pas à pas.
• N pour l’exécution de la suite du programme en mode normal.
• D pour visualiser le contenu d’une variable, ça c’est bien pratique !
Le Go est simplement l’exécution du compilé et si besoin la compilation du source, si un breakpt() est rencontré on atteint un menu permettant au besoin de continuer.
La dernière option : Stdout, faute du périphérique adéquat (CE 126P), je ne puis tester mais ça paramètre le périphérique de sortie par défaut (si une âme charitable m’en passe une je pourrais compléter ce point).
Le C étant compilé (just in time) avant son exécution il faudra, indépendamment des variables déclarées, près de deux fois plus de mémoire que la taille du programme source pour son exécution. Autant dire que lorsque l’on bosse sur la création d’un programme en C avec sa sauvegarde, c’est vers 10Ko que l’on commence à avoir des problèmes. 0n pourra toujours ruser par un #INCLUDE. Sachant en plus que de 10 à 20% du source du programme passe en espaces et numéros de ligne, on se sent très à l’étroit.
Le source est donc frappée sous l’éditeur, que l’on a vu précédemment. Ici, contrairement au mode BASIC, ne cherchez pas une vérification syntaxique à la validation de ligne. Les éventuelles erreurs seront signalées qu’à la compilation.
Un programme C est une suite de déclaration de fonctions et de procédures avec une désignation précise des variables d’entrées et du retour dans le cas d’une fonction. La procédure est une fonction particulière qui ne retourne rien (précédé de void).
Une procédure essentielle à l’exécution du programme est la procédure main() servant au lancement, Sans elle pas d’exécution possible, votre programme ne sera qu’une bibliothèque de fonction ‘Mergeable’ avant compilation avec un autre avec la directive #include.
Les variables apportent aussi plein de nouvelles notions par rapport au Basic. On retrouve bien sur les variables numériques, les variables alphanumériques (avec une notion très différente du Basic) et leurs déclinaisons tabulaires. Mais en C ça devient beaucoup moins souple. Elles doivent être déclarées et ont une portée soit limitée à une fonction, soit à l’ensemble du programme.
Pour les variables numériques c’est plus de 10 types différents que l’on peut gérer en comptant leurs déclinaisons signées, non-signées et les types présent pour la compatibilité.
[I]TYPE étendue
char -128 ~ +127
unsigned char 0 ~255
short -32768 ~ +32767
Unsigned short 0 ~ 65035
Int -32768 ~ +32767
Unsigned int 0 ~ 65035
Long -2147483648 ~ +2147483647
Unsigned long 0 ~ 4294967295
Float ±1E-99 ~ ±9.999E+99
double ±1 E-99 ~ ±9.999999999E+99
Long double ±1 E-99 ~ ±9.999999999E+99
Bien sur les fonctions de conversion inter-type sont implémentées.
On peut aussi gérer des constantes, des variables non modifiables en somme (étrange ….), et des statiques qui reste à leur valeur après la sortie de fonction, avec const et static.
La trame d’un programme simple sera :

Main(){
Déclaration variables locales
…code…
}Les fonctions et procédures peuvent être décrites avant ou après le main(), mais dans le cas d’un codage postérieur, une déclaration au sein du main() sera obligatoire (le terme est prototype).
Exemple déclaration de fonctions et procédures (void en tête = procédure)

50 main(){
60 unsigned char code,ascii;
70 /*prototype*/
80 double val(char*);
90 unsigned int key(unsigned char*,unsigned char*);
100 char* stredit(char str[],unsigned char asc);
110 void calcul();
120 char fonction(unsigned char);
130 void pile(char);
140 void interf();
150 void affpile();Fonction et procédures peuvent accepter des paramètres. Ces paramètres peuvent être des variables (char fonction(unsigned char)) ou des tableaux de variables (stredit(char str[],..) déjà connu en BASIC et même des pointeurs permettant de faire du référentiel (key(unsigned char*,unsigned char*)) .
L’objet est présent sous la forme des structures et des unions (pas sur le Casio Z1 ça).
Comparaison
a==b égalité
a !=b Différent
a<b Strictement inférieur
a>b Strictement supérieur
a<=b Inférieur ou égal
a>=b Supérieur ou égal
Affectation
a=b Affectation de la valeur b à a
a+=b Ajout à a de b (a=a+b)
a-=b Soustrait de a, b (a=a-b)
a*=b Multiplie a par b (a=a*b)
a/=b Divise a par b (a=a/b)
a%=b Modulo de a par b (a=a%b)
Logique
a&&b Et logique
a||b Ou logique
!a Not logique
Binaire
A&b Et binaire
a|b Ou binaire
aˆb Ou exclusif binaire
~a Not binaire
a<<b Décalage binaire à gauche de b bits
a>>b Décalage binaire à droite de b bits



Instructions C
#define #include #if~$ elid~# else~$ endif #ifdef $ ifndef ++ -- & && | || ! ^ ~ << >> ? abort abs acos acosh angle asin asinh atan atanh auto beep break breakpt call calloc char circle clearerr clrscr const cos cosh continue do~while double enum exp exit extern fclose feof fflush fclose fgetc fgets flof fopen fprintf free fputc fputs fscanf float for gcursor getc getchr getchar gets goto gotoxy gprint if if~else inport int isalnum isalpha iscntrl isdigit isgraph islower islower isprint ispunct issapace isupper isxdigit kbhit line log log10 long main malloc miniget miniput outport paint peek pioget pioput pioset poke point pow preset printf pset put putchar puts register return scanf sscanf signed sin sinh sizeof sprintf sqrt static strcat strchr strcmp strcpy strlen struct switch~case~default~break tan tanh tolower toupper typedef union unsigned void volatile while
Comparaison syntaxique BASIC/C sur le même programme avec une programmation BASIC type non-structurée.
En C le INKEY$ a été réalisé en assembleur car la fonction n’existe pas, l’appel étant réalisé par CALL avec passage de paramètres, fonction sans équivalence BASIC.
La fonction RND est aussi inconnue en C et seule la création d’une routine de génération de nombre pseudo-aléatoire pourra résoudre ce manque.
A noter aussi la vitesse ralentie par la ligne 260 en C car ça va trop vite.
Avec nouvelles commandes BASIC WHILE~WEND, IF~ENDIF on pourrait, comme le programme en C, se passer des GOTO déstructurant et avoir un code similaire.
http://fr.normand.free.fr/ordipoche/850v/image020.png
BASIC

10 CLS
20 S=1
30 PRINT "SCORE:0"
40 DIM VI$(5)*80
50 RA$="0207070707070200
60 FOR A=1 TO 5
70 VI$(A)=VI$(A-1)+RA$
80 NEXT
85 VI$(0)="0000000000000000
90 GCURSOR (2,18)
100 GPRINT VI$(5)
110 LINE (59,0)-(59,30)
120 LINE (135,0)-(135,30)
130 LINE (60,0)-(134,3),BF
140 LINE (60,6)-(134,9),BF
150 LV=5:SC=0
160 BX=96:OBX=BX
170 Y=10:OX=X:OY=Y:RX=-3:RY=2:RX=(2* RND (2)-3)*RX:X=99-RX*( RND (6)+4)
180 LINE (BX,30)-(BX+8,30)
190 X=X+RX:Y=Y+RY
200 IF X<60 OR X>132 BEEP S,10,10:RX=-RX:X=X+2*RX
210 IF Y<30 THEN 250
220 IF (BX<=OX) AND OX<BX+9 BEEP S,20,10:RY=-RY:Y=OY+RY:GOTO 250
230 IF (OX+RX=BX) OR X-RX=BX+9 BEEP S,20,10:RY=-RY:RX= RX:Y=OY+RY:X=OX+RX: GOTO 250
240 GOTO 410
250 IF Y=-2 BEEP S,20,10:RY=-RY:Y=OY+RY
260 IF POINT (X,Y)=0 THEN 310
270 BEEP S,10,10
280 SC=SC+5:LOCATE 6,0:PRINT STR$ SC
290 LINE (X-RX,Y)-(X-RX+2,Y+1),R,B
300 Y=Y-2*RY:RY=-RY
310 GOSUB 360
320 LINE (OX,OY)-(OX+2,OY+1),R,B
330 LINE (X,Y)-(X+2,Y+1),B
340 OX=X:OY=Y
350 GOTO 190
360 A$= INKEY$ :A= ASC A$
370 BX=BX+6*(A=13)*(BX<123)-6*(A=32)*(BX>63)
380 LINE (OBX,30)-(OBX+8,30),R:LINE (BX,30)-(BX+8,30)
390 OBX=BX
400 RETURN
410 LINE (OX,OY)-(OX+2,OY+1),R,B
420 LINE (X,Y)-(X+2,Y+1),B
430 LV=LV-1
440 GCURSOR (2,18):GPRINT VI$(LV);"00000000000000"
450 FOR P=1 TO 255 STEP 3:BEEP S,P,2:NEXT
460 LINE (X,Y)-(X+2,Y+1),R,B
470 LINE (BX,30)-(BX+8,30),R
480 IF LV>0 FOR P=1 TO 1000:NEXT :GOTO 160
490 ENDC remarquez l'injection LM pour la gestion du INKEY

10 #define M 65535
20 #define VIT 200
30 #define INKEY call((int)ink,0)
40 void vie(int nbr)
50 {
60 int b;
70 gcursor(2,18);
80 for(b=1;b<=nbr;b++)
90 gprint("0207070707070200");
110 gprint("0000000000000000");
120 }
130 main()
140 {
150 char *ink="\xCD\x53\xBE\x6F\x26\x00\xC9";
160 int vi=5,sc=0,x=96,y=10,ox=x,oy=y,rx=3,ry=2,bx=x,obx=x ,b;
170 printf("Score:0");
180 line(59,0,59,30,0,M,0);
190 line(135,0,135,30,0,M,0);
200 line(60,0,134,3,0,M,2);
210 line(60,6,134,9,0,M,2);
220 vie(vi);
230 do
240 {
250 line(bx,30,bx+8,30,0,M,0);
260 for(b=1;b<VIT;++b){}
270 x+=rx;y+=ry;
280 if(x<60|x>132)
290 {
300 beep(10,10,1);
310 rx=-rx;x+=2*rx;
320 }
330 if(y>=30)
340 {
350 if(bx<=ox&&ox<bx+9)
360 {
370 beep(10,20,1);
380 ry=-ry;y=oy+ry;
390 } else if (ox+rx==bx||x-rx==bx+9)
400 {
410 beep(10,20,1);
420 ry=-ry;rx=-rx;y=oy+ry;x=ox+rx;
430 } else {
440 line(ox,oy,ox+2,oy+1,1,M,1);
450 line(x,y,x+2,y+1,0,M,1);
460 vie(--vi);
470 for(b=1;b<256;b+=3)
480 {
490 beep(2,b,1);
500 }
510 line(x,y,x+2,y+1,1,M,1);
520 line(bx,30,bx+8,30,1,M,0);
530 x=96;y=10;ox=x;oy=y;rx=3;ry=2;bx=x;obx=x;
540 }
550 } else {
560 if(y==-2)
570 {
580 beep(10,20,1);
590 ry=-ry;y=oy+ry;
600 }
610 if (point(x,y))
620 {
630 beep(10,10,1);
640 sc+=5;
650 gotoxy(6,0);printf("%d",sc);
660 line(x,y,x+2,y+1,1,M,1);
670 y-=ry;ry=-ry;
680 }
690 b=INKEY;
700 bx=bx+6*(b==34)*(bx<123)-6*(b==33)*(bx>63);
710 line(obx,30,obx+8,30,1,M,0);
720 line(bx,30,bx+8,30,0,M,0);
730 obx=bx;
740 line(x,y,x+2,y+1,0,M,1);
750 line(ox,oy,ox+2,oy+1,1,M,1);
760 ox=x;oy=y;
770 }
780 }
790 while(vi>0);
800 } 
LE CASL
L’apprentissage de l’assembleur n’étant pas franchement facile, l’idée des écoles japonaises, en collaboration avec le ministère de l’industrie japonais, était de faire un cahier des charges d’un processeur fonctionnant dans un environnement protégé, avec un jeu d’instructions établi une fois pour toute. De cette façon aucun plantage de la machine sur une éventuelle erreur n’est possible et la mise en place de travaux pratiques types par les écoles est plus facile.
Le Comet étant implémenté sur plein d’ordinateur de poche différent, dont le G850V.
Directives
START Début du programme
END Fin du programme
EXIT Sortie du programme
IN Entrée clavier
OUT Sortie écran
WRITE Affichage des registres et attente d’une touche
DC Définition d’une constante
DS Définition d’un stockage
Registre
LD GR,adr[,XR] Chargement d’une valeur pointée
ST GR,adr[,XR] Sauvegarde d’une valeur dans une adresse
LEA GR,val[,XR] Chargement d’une valeur
ADD GR,adr[,XR] Addition d’une valeur pointée
SUB GR,adr[,XR] Soustraction d’une valeur pointée
Logique
AND GR,adr[,XR] Et binaire
OR GR,adr[,XR] Ou binaire
EOR GR,adr[,XR] Ou exclusif binaire
Comparaison
CPA GR,adr[,XR] Comparaison arithmétique
CPL GR,adr[,XR] Comparaison logique
Décalage
SLA GR,adr[,XR] Décalage à gauche arithmétique
SRA GR,adr[,XR] Décalage à droite arithmétique
SLL GR,adr[,XR] Décalage à gauche logique
SRL GR,adr[,XR] Décalage à droite logique
Saut
JPZ adr[,XR] Saut sur positif ou nul
JMI adr[,XR] Saut sur négatif
JNZ adr[,XR] Saut sur non nul
JZE adr[,XR] Saut sur 0
JMP adr[,XR] Saut inconditionnel
Pile
PUSH adr[,XR] Mise sur la pile
POP GR Prise d’une valeur sur la pile
Routine
CALL adr[,XR] Appel d’une routine
RET Sortie d’une routine
Exemple

10TEST START
20 IN CAR,NBR
30 LEA GR1,0
40FOR LD GR0,CAR,GR1
50 ST GR1,COD
60 ADD GR0,COD
70 ST GR0,CAR,GR1
80 ADD GR1,INC
90 CPA GR1,NBR
100 JMI FOR
110 OUT CAR,NBR
120 EXIT
130INC DC 1
140COD DS 1
150CAR DS 24
160NBR DS 1
170 ENDL'assembleur
passé le stade du Comet autant finir les mains dans le cambouis. Là plus de garde-fou, la moindre erreur sera sanctionnée par dans le mieux un léger blocage, dans le pire un reset total…
Le cœur du G850V est un Z80 donc pas de surprise, c’est de l’archi connu, une connaissance de la structure mémoire de la machine est cependant indispensable pour ne pas taper dans la RAM système, RAM source et basic ou la zone de variable.
Pour cela il faut définir une zone protégé par l’instruction USER saisie sous le MONiteur (voir plus bas) ça permet de réserver une zone non écrasable dédié au LM, cette zone commence à &H100, par exemple un USER200 réservera un zone de &H100 à &H200.

Un exemple de code Toujours mon casse brique ;)

10 ORG 0100H
20GRAPH EQU 093CBH
30PRINT EQU 0BFF1H
40 JR START
50SC: DB 0,0,0,0
60X: DB 0
70Y: DB 0
80OX: DB 0
90OY: DB 0
100RX: DB 0
110RY: DB 0
120PROV:DB 0,0
130TXT1:DB 'SCORE:'
140START:CALL CLS
150 LD B,6
160 LD DE,0000H
170 LD HL,TXT1
180 CALL PRINT
190 LD HL,59
200 LD DE,0
210 LD IX,135
220 LD IY,30
230 LD A,1
240 LD B,1
250 CALL LINE
260 LD HL,60
270 LD DE,0
280 LD IX,134
290 LD IY,3
300 LD A,1
310 LD B,2
320 CALL LINE
330 LD HL,60
340 LD DE,6
350 LD IX,134
360 LD IY,9
370 LD A,1
380 LD B,2
390 CALL LINE
400 LD A,0
410 LD (SC),A
420 LD A,48
430 LD (SC+1),A
440 LD (SC+2),A
450 LD (SC+3),A
460 LD A,99
470 LD (X),A
480 LD (OX),A
490 LD A,10
500 LD (Y),A
510 LD (OY),A
520 LD A,-3
530 LD (RX),A
540 LD A,2
550 LD (RY),A
560REP: LD A,(RY)
570 LD B,A
580 LD A,(Y)
590 ADD A,B
600 LD (Y),A
610 LD A,(RX)
620 LD B,A
630 LD A,(X)
640 ADD A,B
650 LD (X),A
660 CP 60
670 JR C,OK1
680 CP 133
690 JR C,SU1
700OK1: LD A,(RX)
710 NEG
720 LD (RX),A
730 ADD A,A
740 LD B,A
750 LD A,(X)
760 ADD A,B
770 LD (X),A
780SU1: LD A,(Y)
790 CP 30
800 JR NC,OK2
810 CP -2
820 JR NZ,SU2
830OK2: LD A,(RY)
840 NEG
850 LD (RY),A
860 LD B,A
870 LD A,(OY)
880 ADD A,B
890 LD (Y),A
900SU2: LD A,(X)
910 LD E,A
920 LD A,(Y)
930 LD D,A
940 CALL POI
950 CP 1
960 JR NZ,SU3
970 LD A,(SC)
980 ADD A,5
990 LD (SC),A
1000 CALL SCOR
1010 LD B,3
1020 LD DE,0006H
1030 LD HL,SC+1
1040 CALL PRINT
1050 LD A,(X)
1060 LD H,0
1070 LD L,A
1080 ADD A,2
1090 LD (PROV),A
1100 LD IX,(PROV)
1110 LD A,(Y)
1120 LD D,0
1130 LD E,A
1140 ADD A,1
1150 LD (PROV),A
1160 LD IY,(PROV)
1170 LD A,0
1180 LD B,1
1190 CALL LINE
1200 LD A,(RY)
1210 LD B,A
1220 LD A,(Y)
1230 SUB B
1240 LD (Y),A
1250 LD A,(RY)
1260 NEG
1270 LD (RY),A
1280SU3:LD A,(X)
1290 LD H,0
1300 LD L,A
1310 ADD A,2
1320 LD (PROV),A
1330 LD IX,(PROV)
1340 LD A,(Y)
1350 LD D,0
1360 LD E,A
1370 ADD A,1
1380 LD (PROV),A
1390 LD IY,(PROV)
1400 LD A,1
1410 LD B,1
1420 CALL LINE
1430 LD A,(OX)
1440 LD H,0
1450 LD L,A
1460 ADD A,2
1470 LD (PROV),A
1480 LD IX,(PROV)
1490 LD A,(OY)
1500 LD D,0
1510 LD E,A
1520 ADD A,1
1530 LD (PROV),A
1540 LD IY,(PROV)
1550 LD A,0
1560 LD B,1
1570 CALL LINE
1580 LD A,(X)
1590 LD (OX),A
1600 LD A,(Y)
1610 LD (OY),A
1620 LD A,(SC)
1630 CP 205
1640 JP C,REP
1650 RET
1660CLS: LD A,020H
1670 LD B,144
1680 LD DE,0
1690 CALL 0BFEEH
1700 RET
1710POI: LD H,0
1720 LD L,E
1730 LD E,D
1740 LD D,0
1750 CALL PNT
1760 AND C
1770 RET Z
1780 LD A,1
1790 RET
1800PNT: CALL GRAPH
1810 DB 0EH
1820 DW 0CA08H
1830PSET:LD H,0
1840 LD L,E
1850 LD E,D
1860 LD D,0
1870 LD (7967H),HL
1880 LD (7969H),DE
1890 LD IX,0FFFFH
1900 LD (777DH),IX
1910 LD (777FH),A
1920 CALL GRAPH
1930 DB 0DH
1940 DW 0C595H
1950 RET
1960LINE:LD (7967H),IX
1970 LD (7969H),IY
1980 LD IX,0FFFFH
1990 LD (777DH),IX
2000 LD (777FH),A
2010 LD A,B
2020 CP 1
2030 JR C,LIN
2040 JR Z,BOX
2050FBOX:CALL GRAPH
2060 DB 0DH
2070 DW 0C4CBH
2080 RET
2090LIN: CALL GRAPH
2100 DB 0DH
2110 DW 0C595H
2120 RET
2130BOX: CALL GRAPH
2140 DB 0DH
2150 DW 0C442H
2160 RET
2170SCOR:LD A,(SC+3)
2180 CP 48
2190 JR Z,SCO1
2200 LD A,(SC+2)
2210 CP 57
2220 JR Z,SCO2
2230 INC A
2240 LD (SC+2),A
2250 LD A,48
2260 LD (SC+3),A
2270 RET
2280SCO1:LD A,53
2290 LD (SC+3),A
2300 RET
2310SCO2:LD A,48
2320 LD (SC+2),A
2330 LD (SC+3),A
2340 LD A,(SC+1)
2350 INC A
2360 LD (SC+1),A
2370 RET
POUR INFO : Le programme de mon cru qui ma servi à l'extraction des écran
http://fr.normand.free.fr/ordipoche/850v/image024.gif
avec comme extracteur

1000 void hardcpy(){
1010 int a,b;
1020 FILE * sortie;
1030 sortie=fopen("stdaux","w+");
1040 for(b=0;b<48;b++)
1050 for(a=0;a<144;a++)
1060 fprintf(sortie,"%d",point(a,b));
1070 fclose(sortie);
1080 }
8000 OPEN "COM1:"
8010 FOR B=0 TO 47
8020 FOR A=0 TO 143
8030 PRINT #1, STR$ POINT (A,B);
8040 NEXT
8050 NEXT
8060 CLOSE#1
8070 RETURN

weedkiller
23/06/2015, 21h24
Euuuh, bonjour. Je dîne avec des amis mercredi soir, ca te dirais de venir :smile: ?

On pourra parler plus en détail du Z80 (http://www.righto.com/search/label/Z-80) ;) . En tout cas, je pense qu'avec un tel op (j'ai pas tout lu), tu pourras obtenir aisément ton badge pour la partie hardware advanced du forum. Quoique dans ton cas, la barbe doit être déjà un passe universel :lol: .

XWolverine
24/06/2015, 09h13
Je préfèrerais qu'on parle du 6502 (plus précisément de sa déclinaison 6510), bien plus scalable (et intéressant) que le Z80 :ninja:

Sinon j'ai pas lu non plus l'OP, hein, me suis arrêté à la TI 57 II, moi :ninja:

znokiss
24/06/2015, 13h12
J'ai tout lu en ne captant qu'une phrase sur quatre, mais le bousin, là, ça rappelle les anciennes caltos TI sur laquelle je jouait à Tétris et SuperMario et rien que pour ça, c'est classe.

charognard
24/06/2015, 19h05
En fait les ordinateurs de poche son vraiment une classe à part. j'avais fait un graphique
Celui-ci est un peu le dernier existant et toujours vendu au japon.
http://fr.normand.free.fr/ordipoche/chrono2.gif

Darkath
24/06/2015, 19h07
Ca fait limite un peu flipper ce topic :O

Sekigo Le Magnifique
24/06/2015, 22h42
Ca fait limite un peu flipper ce topic :O
Pourtant, on y parle de calculatrices.

charognard
25/06/2015, 00h03
En fait même pas ! ;)
D'ordinateurs de poche ... bref quelques chose que les moins de quarante ans ne peuvent pas connaitre

Hem
25/06/2015, 04h30
Moi j'ai trouvé ça intéressant. J'ai aucune idée de pourquoi ce topic ni pourquoi tester un truc pareil en 2015 en revanche.

charognard
25/06/2015, 07h32
Il y a encore quelques passionnés de programmation qui aiment bien se prendre la tête sur des algo. optimisés.
Avec un OP comme ça tu peux programmer ou bon te semble et jouer à optimiser

Par exemple pas plus tard que deux jours je me posais ce problème

Soit un nombre réel positif avec sa partie entière et décimale
on inverse en un minimum de pas de programme son chiffre des unités et sa première décimale.

Ex : 123.987 --> 129.387
ou 10.10 --> 11.00

pour toute bonne optimisation c'est en LMS en RPN que je pars
ça donne cela

ENTER
ENTER
INT
10
MOD
LASTX
R[HAUT]
FRC
*
INT
-
,9
*
-

Nous avons des fois des truc de plus complexe, mais vu que la chasse à l'octets n'est pas aussi facile on peux passer plusieurs jours dessus

Møgluglu
25/06/2015, 10h53
Sympa ce topic.

Parlons technique. C'est quoi la représentation interne des nombres ? C'est 12 chiffres décimaux significatifs et 2 d'exposant OK, mais c'est codé comment en mémoire ? Si c'est du BCD on doit pouvoir faire nettement plus rapide que ton code.

XWolverine
25/06/2015, 11h42
Mouais.
Je suis bien d'accord (en qualité de vieux con) que l'optimisation de code est une vertu devenue très rare (mémoire et stockage énorme, CPU qui mouline, on s'en fout, dans la plupart des cas, on ne voit plus la différence), mais de là à rester ancré sur des vieux machins comme ça, je ne vois pas trop l'intérêt.

Pourquoi ne pas mettre ton énergie sur de l'appli mobile, des routines critiques sur PC, ou sur du 4K dans le monde du demo making ?

J'ai kiffé optimiser à mort mes 486 pas de programme sur ma Casio fx 6000G ou le code 6510 sur mon C64 pour gagner de précieux cycles, mais bon, aujourd'hui, si je devais coder quelque chose, je le ferai sur des machines modernes, dans un vrai but.

newbie06
25/06/2015, 12h02
Je préfèrerais qu'on parle du 6502 (plus précisément de sa déclinaison 6510), bien plus scalable (et intéressant) que le Z80 :ninja:
Ha ouai en plus de l'Amiga, t'as aime le C64, c'est moche, tu veux en parler ? :p

En tout cas, topic super interessant, merci !

---------- Post added at 12h02 ---------- Previous post was at 11h58 ----------

Dans le genre chasse a l'octet, je me souviens de la ROM du X07. Il y avait des sauts sur l'octet immediat d'une instruction pour gagner quelques octets.

charognard
25/06/2015, 12h24
c'est codé en DCB avec mantise et exposant mais pas sur que ce soit plus court que 17 octets
Pour faire de l'algo en fait il n'y a besoin que d'un papier crayon

XWolverine
25/06/2015, 13h44
Ha ouai en plus de l'Amiga, t'as aimé le C64, c'est moche, tu veux en parler ? :p
Y'avait pourtant un indice dans mon avatar ;)

Møgluglu
25/06/2015, 14h13
c'est codé en DCB avec mantise et exposant mais pas sur que ce soit plus court que 17 octets
Pour faire de l'algo en fait il n'y a besoin que d'un papier crayon

Si on va par là il n'y a pas besoin d'ordinateur de poche non plus...

Je voulais juste savoir si le format flottant était documenté ou reverse-engineeré quelque part, s'il y a des valeurs spéciales, si les opérations de calcul suivent la norme IEEE-854, etc. On trouve des infos pour HP, TI et parfois même Casio, mais j'ai rien vu sur le format de Sharp.
Enfin vu qu'on peut attaquer le PC en C, c'est pas dur d'écrire quelques double en mémoire et les relire comme un tableau de char pour voir ce qu'ils ont dans le ventre.

charognard
25/06/2015, 14h49
En fait il y a de nombreuses doc sur le OP, détaillant aussi le codage des variables.
sur le G850V pas d'info mais sur d'autres oui
PC 12--
PC 13--
PC 14--
PC 15--
PC 16--
CANON X07
...
certains on même en basic VARPTR pour alors le pointeur mémoire de la VAR
d'autres on leurs variables A~Z à des adresse mémoire fixes.
Sur le PC1600 un CALL adr,VAR transmet sur la pile lifo le pointeur de la variable (ça peut servir de pont BASIC <--> LM)


à partir du moment ou l'on à le pointeur l'étude par PEEK est une formalité (ou pas)