Question BASIC MO5

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

Toutes ces adresses sont décrites dans le différents manuels techniques. Le site de Pulko résume aussi tout ca: https://pulkomandy.tk/wiki/doku.php?id= ... ions:start
https://pulkomandy.tk/wiki/doku.php?id= ... art#system
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Question BASIC MO5

Message par Daniel »

A la fin du Manuel du MO5 v2, pages 237 et suivantes, il y a un chapitre intitulé "Le Moniteur du MO5". Il donne pas mal d'adresses pouvant faire l'objet de POKE en BASIC, mais aussi les codes interprétables (page 246), les séquences utilisateur (page 247), les séquences d'échappement (page 248).

La documentation disponible donne beaucoup moins d'informations sur le BASIC, il faut les reconstituer. Un allemand a fait un énorme travail pour désassembler et commenter la ROM BASIC du MO5E, ce qui permet en particulier de retrouver la signification des vecteurs du BASIC en RAM.
Daniel
L'obstacle augmente mon ardeur.
nouvelhermes
Messages : 400
Inscription : 22 juil. 2020 20:56

Re: Question BASIC MO5

Message par nouvelhermes »

Je suis preneur pour ce désassemblage de la rom basic, elle se trouve sur le site de dcmoto ?

Sinon deux remarques d'ordre général pour tout le monde :
* on trouve pas mal d'info sur le basic dans le livre L'interpréteur Basic du TO7-70, ce livre existe-t-il sur MO5 ?
* pour bien utiliser les routines et adresses du moniteur, pour ceux qui sont à la recherche d'info, je ne peux que trop conseiller la lecture de 50 programmes en assembleur, le livre n'est pas pédagogique du tout, il ne faut absolument pas chercher à le parcourir dans l'ordre, et la deuxième moitié du livre est plus accessible que la première moitié (et finalement on apprend beaucoup sur l'utilisation des routines du moniteur). Je suis à la recherche de la cassette, quelq'un la possède-t-il ?

Une dernière question, le projet de la faq Thomson est-il toujours d'actualité ? Merci beaucoup par avance
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Question BASIC MO5

Message par Daniel »

Voici le désassemblage de la ROM du MO5E par Edilbert Kirk :
MO5E.zip
(81.95 Kio) Téléchargé 42 fois

Il n'y a pas de version MO5 du livre sur l'Interpéteur Basic du TO7-70.

Depuis trente ans j'essaie de créer une FAQ, mais c'est un exercice très difficile car chaque utilisateur a des questions nouvelles. La doc MO5 de Pulkomandy est un bon début (lien donné par __sam__). Mais j'arrive à la conclusion qu'il vaut utiliser le forum pour les questions sans réponse dans la documentation. Il y a ici les meilleurs spécialistes Thomson et ils sont toujours prêts à répondre.
Daniel
L'obstacle augmente mon ardeur.
nouvelhermes
Messages : 400
Inscription : 22 juil. 2020 20:56

Re: Question BASIC MO5

Message par nouvelhermes »

Merci pour la ROM

La FAQ ce n'est pas tant les questions pointues mais les questions souvent posées dont la réponse n'est pas forcément évidente.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

En fait sur Thomson il n'y a pas vraiment de questions sur les pokes.

Contrairement aux machines avec un basic moins riche où on doit faire des peek/poke/sys pour faire des trucs sympa (e.g. C64), le basic thomson permet de faire a peu près tout sans entrer dans du bas niveau avec des peek/poke/exec. Les adresses des registres d'IO ou les points d'entrée en ROM ne servent vraiment que lorsqu'on fait de l'Assembleur.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Question BASIC MO5

Message par Asic512 »

J'ai une question pour ceux qui ont regardé et compris le désassemblage de la ROM du MO5 : quels sont les algorithmes utilisés pour le calcul des fonctions transcendantes (sinus, exponentielle, logarithme) ? On calcule un bout du développement de Taylor ou c'est plus rusé ?
Asic512
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

Les fonctions sinus/cosinus ne sont pas dans la ROM du MO5 qui ne contient que des primitives d'entrées/sorties (afficher un caractère, lire un caractère, etc).

Les fonctions SIN/COS sont dans la ROM basic qui n'a pas été (à ma connaissance) désassemblée.

Je ne pense pas que Taylor soit utilisé. Il ne converge pas super vite et n'a pas une erreur homogène sur l'ensemble de l'intervalle considéré. Par contre ce qu'il se faisait à l'époque c'était les algos CORDIC qu'on retrouve dans toutes les calculettes.

De nos jours les bibliothèques logicielles se basent sur le Handbook of Mathematical Functions by Abramowitz & Stegun qui utilise les approximants de Padé (ou apparentés) pour donner d'excellents polynômes approximant les fonctions mathématiques. Ces polynomes ont l'avantage de converger assez vite, et surtout ils ont une erreur max meilleure que Taylor sur l'intervalle d'approximation.

Tu peux zieuter les algorithmes modernes par là: http://www.netlib.org/fdlibm/, exemple pour le sinus, on a un truc aussi simple que:

Code : Tout sélectionner

static double 
half =  5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */
S1  = -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */
S2  =  8.33333333332248946124e-03, /* 0x3F811111, 0x1110F8A6 */
S3  = -1.98412698298579493134e-04, /* 0xBF2A01A0, 0x19C161D5 */
S4  =  2.75573137070700676789e-06, /* 0x3EC71DE3, 0x57B1FE7D */
S5  = -2.50507602534068634195e-08, /* 0xBE5AE5E6, 0x8A2B9CEB */
S6  =  1.58969099521155010221e-10; /* 0x3DE5D93A, 0x5ACFD57C */
double __kernel_sin(double x, double y, int iy) {
	double z,r,v;
	int ix;
	ix = __HI(x)&0x7fffffff;	/* high word of x */
	if(ix<0x3e400000)			/* |x| < 2**-27 */
	   {if((int)x==0) return x;}		/* generate inexact */
	z	=  x*x;
	v	=  z*x;
	r	=  S2+z*(S3+z*(S4+z*(S5+z*S6)));
	if(iy==0) return x+v*(S1+z*r);
	else      return x-((z*(half*y-v*r)-y)-v*S1);
}
(il y a plein de constantes magiques, mais au final très peu d'opérations).

Si tu recherches une bibliothèque Math pour le 6809, en voici une: https://github.com/6809/sbc09/blob/mast ... fbasic.asm, bien évidement il utilise les tables du Handbook of Mathematical Functions.
Dernière modification par __sam__ le 05 juin 2022 17:17, modifié 3 fois.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
nouvelhermes
Messages : 400
Inscription : 22 juil. 2020 20:56

Re: Question BASIC MO5

Message par nouvelhermes »

L'autre jour Daniel avait donné un fichier de désassemblage d'une ROM BASIC Thomson, je ne sais plus dans quel message, donc je la reposte ici
Pièces jointes
MO5E.zip
(81.95 Kio) Téléchargé 34 fois
nouvelhermes
Messages : 400
Inscription : 22 juil. 2020 20:56

Re: Question BASIC MO5

Message par nouvelhermes »

Il me semble aussi que l'ouvrage http://dcmoto.free.fr/documentation/int ... index.html traite superficiellement la question
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Question BASIC MO5

Message par Daniel »

Le désassemblage de la ROM Basic MO5 est ici : viewtopic.php?f=25&t=13260&start=18
L'évaluation des fonctions trigonométriques est dans la routine Series_Evaluation (je n'ai pas eu le temps de l'analyser).

Code : Tout sélectionner

****************
FUNC_SIN ; $d7b5
****************

          JSR   Cast_ACA_Real
          LDA   ACA_EX
          CMPA  #$77          ; low exp ?
          BLO   EvSe_Ret      ; -> value = argument
          LDX   #Two_Pi_Rev
          BSR   Jmp_ACA_Mult_X
          JSR   ACA_TO_ACB
          JSR   FUNC_INT
          JSR   ACB_MINUS_ACA
          LDX   #Real_0_25
          JSR   X_MINUS_ACA
          LDA   ACA_SI
          PSHS  A
          BPL   SIN_10
          BSR   ACA_Plus_0_5
          LDA   ACA_SI
          BMI   SIN_20
SIN_10    JSR   Negate_ACA
SIN_20    LDX   #Real_0_25
          BSR   Jmp_ACA_Plus_X
          LDA   ,S+
          BPL   SIN_30
          JSR   Negate_ACA
SIN_30    LDX   #VAR_SIN
          BRA   Series_Evaluation
Daniel
L'obstacle augmente mon ardeur.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

Oh punaise je suis passé à coté de ce désassemblage. :oops:
Daniel a écrit : 05 juin 2022 17:11 L'évaluation des fonctions trigonométriques est dans la routine Series_Evaluation (je n'ai pas eu le temps de l'analyser).
C'est une évaluation de polynômes à la Horner sur une valeur x entre 0 et 1 (le nombre en entrée est ramené dans cet intervalle en prenant la partie fractionnaire de (input/2pi)). Les coefs sont adaptés pour réduire l'erreur sur cet intervalle je présume.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Daniel
Messages : 17288
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Question BASIC MO5

Message par Daniel »

Dans la pratique, les fonctions trigonométriques sont lentes en Basic.
Pour tracer un cercle, il ne faut jamais les utiliser. Un algorithme beaucoup plus simple, par exemple Bresenham, est beaucoup plus rapide.
Lorsqu'on utilise un nombre restreint de valeurs d'angles, par exemple pour afficher les aiguilles d'une horloge sur un cadran rond, il est préférable de mettre les valeurs dans une table pour ne les calculer qu'une seule fois en début de programme, ou mieux utiliser des constantes pré-calculées.
Daniel
L'obstacle augmente mon ardeur.
nouvelhermes
Messages : 400
Inscription : 22 juil. 2020 20:56

Re: Question BASIC MO5

Message par nouvelhermes »

Je me suis trompé d'ouvrage.

On trouve beaucoup d'infos intéressantes à ce sujet dans les livres la face cachée (du to7 et du mo5), à la fin du livre.

Pour le tracé de cercle (et l'utilisation d'une table) voir le livre 50 programmes en assembleur, qui explique comment faire.
__sam__
Messages : 7909
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Question BASIC MO5

Message par __sam__ »

Pour le tracé de cercle il y a bien mieux que Bresenham. On en a parlé dans un autre forum.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Répondre