Je parle pas vraiment de la ROM, mais du CAS Erable (la librairie de calcul quoi). Je m'y connais pas en ASM ni en C d'ailleurs, mais, je crois que l'extrait du CAS est bien écrit en C++ (c'est écrit en haut), je présente une toute petite partie du CAS qui gere le mode RPN (juste pour cette fonction y a env. 22000 lignes (je compte pas le tout début) de code, et y 96 fichiers (bon, pas aussi gros))
// -*- mode:C++ ; compile-command: "g++ -I.. -g -c rpn.cc" -*-
#include "first.h"
/*
* Copyright (C) 2001 B. Parisse, Institut Fourier, 38402 St Martin d'Heres
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
using namespace std;
#include "rpn.h"
#include "symbolic.h"
#include "unary.h"
#include <algorithm>
#include "prog.h"
#include "usual.h"
#include "identificateur.h"
#include <unistd.h>
#include <stdio.h>
#include <dirent.h>
#ifndef NO_NAMESPACE_GIAC
namespace giac {
#endif // ndef NO_NAMESPACE_GIAC
vecteur history_in,history_out;
bool rpn_mode=false;
string enmajuscule(const string & s){
string res;
string::const_iterator it=s.begin(),itend=s.end();
for (;it!=itend;++it){
if ((*it>='a') && (*it<='z'))
res += *it-32;
else
res += *it;
}
return res;
}
string printasconstant(const gen & feuille,const string & sommetstr){
return sommetstr;
}
gen symb_rpn(const gen & args){
return symbolic(at_rpn,args);
}
gen _rpn(const gen & args){
rpn_mode=true;
return symb_rpn(args);
}
const string _rpn_s("rpn")
unary_function_unary __rpn(&_rpn,_rpn_s,&printasconstant);
unary_function_ptr at_rpn (&__rpn);
gen symb_alg(const gen & args){
return symbolic(at_alg,args);
}
gen _alg(const gen & args){
rpn_mode=false;
return symb_alg(args);
}
const string _alg_s("alg")
unary_function_unary __alg(&_alg,_alg_s,&printasconstant);
unary_function_ptr at_alg (&__alg);
void roll(int i,vecteur & v){
if (i<2)
return;
iterateur it=v.begin(),itend=v.end();
if (itend-it<i)
return;
it=itend-i;
gen save=*it;
for (;

{
++it;
if (it==itend)
break;
*(it-1)=*it;
}
*(it-1)=save;
}
Si vous voulez vous pencher sur la question:
http://perso.wanadoo.fr/bernard.parisse/
En plus, ça peut être utile si vous voulez l'utiliser pour la Dioxygène (parce que avant d'avoir le CAS de la 89, vous pouvez vous accrocher et puis honnetement, si vous le faites vous mm, y en a pour un moment avant de le finir (Bernard Parisse à mis 7 ans pour faire le CAS des HP)