[ EXELVISION ] initiation à l'assembleur pour TMS7020

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

Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par 6502man »

:lol: :lol:
Il faudrait essayer pour voir, j'en ai aucune idée.

je viens de faire le test avec TASM, aucun warning ni error :lol: :lol:

Code : Tout sélectionner

88 C2 00 00 	movd %$C200,R0
Il faudrait essayer sur une machine réel par ce que sur DCexel :roll:

Par contre avec R2 ca foncitonneras sans problèmes à mon avis R1-R2, mais sans en faire un test sur machine réel ce n'est que supposition :wink:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par nicolho »

D'après TMS 7000 ASSEMBLY LANGUAGE PROGRAMMER'S GUIDE :
"3.2.2.2 Register File Indirect Addressing: specifies the address of a pair of register file locations which contain the address of the operand. An indirect register file address is written as *Rn (or *expr).

The most-significant byte of the address is contained in register n-1. For example, if an address is contained in registers R4 and R5, "*R5" must be specified to use that address. If R0 (register A) is specified, then R255 is used for the most significant half. (*R0 is undefined for TMS7000 family devices that do not implement R255.)
"

Donc ça dit rien d'autre, seulement que si une instruction pointait vers une paire de registre désignée par *R0 (soit le registre A), cette désignation serait "indéfinie" :| pour le TMS7020 (parce qu'il n'implémente que 128 registres au lieu de 256, sans quoi le registre R255 serait pris en compte...) donc il se passe quoi quand c'est indéfini, l'instruction est ignorée ?
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par 6502man »

Je viens de rajouter un gros pavé sur la mémoire de L'EXL100 :D

Ce n'est peut être pas évident, mais si besoin j'apporterai des éclaircissements :wink:

@Jester: n’hésite pas si tu vois un point que j'aurais omis ou mal expliqué :wink:

Je vous laisse cogiter ça jusqu’à la fin de la semaine ...
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par Papy.G »

La valeur sensée aller dans R255 (qui n'existe pas sur le 7020) sera soit ignorée, soit envoyée en R127, tout comme lors du rappel des valeurs R0 en 16 bits, soit on obtient une valeur "aléatoire", soit celle de R127. comme dit plus haut, il suffit d'essayer sur vraie machine. :wink:
Et ce sera l'occasion pour Daniel de peaufiner ce point dans son émulateur, si besoin. 8)

Par contre, il y a peut-être une différence en terme de temps CPU entre une instruction cherchant à une adresse 16bits contenue dans des registres, une autre cherchant à une adresse 16bits spécifiée directement en opérande (si supporté), et une cherchant dans un espace d'adressage plus restreint (si supporté)?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
nicolho
Messages : 409
Inscription : 10 nov. 2016 16:53

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par nicolho »

Merci Papy d'avoir testé sur une vraie machine, c'est le must 8). Alors d'après tes constatations, ce serait soit l'un (R127), soit l'autre (ignoré), soit encore autre chose (aléatoire), ça dépend... mais de quoi ? c'est indéfini :)

Il y a en effet une différence de temps d’exécution selon le mode utilisé, et pour connaître les cycles par instructions et les différents types d'adressages, tu peux rapidement te rapporter aux tableaux et documents déjà mentionnés à ce propos hier soir :
nicolho a écrit :...en attendant j'ai mis en ligne un petit pdf repétassé/recherchable contenant uniquement les tableaux d'instructions extraits du Data Manual (chapitre 6) : https://www.docdroid.net/9zyUDEM/tms700 ... t.pdf.html
Le reste est bien résumé (et en français) aux pages 1 à 26 (et les modes d'adressages de 90 à 93) de "Programmer en Assembleur sur Exelvision" qui pourra servir de référence pour approfondir, en complément de ton tuto.
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3047
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par Papy.G »

:oops: Euh, je n'ai pas fais avancer le schmilblick, et en plus, je vous ai embrouillé. :?
Je n'ai pas d'EXL, je ne faisais qu'enfoncer des portes en disant qu'il fallait essayer sur vrai machine, mais en aucun cas que j'avais essayé. :(

Je vais dorénavant me taire et me concentrer sur mon projet.
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par jester »

J'avais fait des tests sur les dépassements de registres à une époque (par curiosité) et je n'étais arrivé à rien de concluant... rien d'intéressant en fait.
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par jester »

Voici des résultats de tests discutés sur le forum dcexel de Daniel il y a un moment de ça (merci de l'avoir laissé actif, il y a pleins de trucs dont je n'avais pas souvenirs):
DECD A est équivalent à DEC A dans le résultat.
ni R1, ni R127 ne sont modifiés.
Peut être que le registre le plu significatif est R255 (dont la valeur est $FF et pas $00 comme le renvoie DcExel :o, tous ces registres de R128 à R255 renvoie la valeur $FF ... Daniel tu devrais vraiment vérifie sur Exl100 parfois :D )
Donc finalement C n'est jamais modifié.
J'ai oublié de tester les bits N et Z pour vérifier l'hypothèse de R255... to be continued.

SWAP R1 plante la machine, donc semble équivalent à LDVDP... je n'ai pas testé plus loin si LDVDP a été réalisé effectivement.
SWAP R0 ne plante pas la machine mais R0 contient la valeur $FF après l'opération... je ne sais pas si autre chose se passe mais ça ne semble pas avoir modifié les pointeurs du VDP (sinon le BASIC aurait planté).

Je fais le test pour connaître la valeur Status Register après DECD A:

Code: Tout sélectionner
A DECDA ST
FF FE C0
00 FE C0
01 00 C0
02 01 C0


Donc C=1 N=1 Z=0 dans tous les cas !
Ensuite on a bien vérifié que l'instruction SWAP n'existait plus, mais bel et bien remplacé par des instructions micro-codés pour piloter le VDP... Daniel avait modifié dcexel à partir de ces résultats.
Il y a surement d'autres tests à faire, mais de mémoire je n'avais rien noté car comme déjà dit, rien d'intéressant... d'exploitable.

Quand vous en serez à l'accès au VDP et de l'usage de ses pointeurs, j'ai encore qqs notes sur nos découvertes (non documentées). Et sur qqs désassemblage/analyse de portions de codes exlbasic. Et bien sur, des notes sur l'usage du second CPU (TMS7041) pour accéder à certaines fonctionnalités rigolotes (comme le pilotage d'un second Timer). J'avais du demander à Daniel d'implémenter tout ça pour le fun... mais on sort du cadre "initiation".

Dans l'absolu ne pas oublier que la série TMS7000 est un micro-contrôleur pour l'embarqué (voiture, matos divers, etc.) et donc cela explique pas mal de choix dans son architecture: il se suffit à lui-même avec une ROM pour le code et une petite SRAM pour les calculs/variables, et super simple à coder. Le CPU est prévu pour que ses instructions soient facilement customisable en fonction des besoins (micro-codé) et dipose aussi d'une petite ROM interne pour même éviter une ROM externe.
Le VDP TMS3556 intégré à la série Exl est aussi une idée géniale, il lui manquait juste des fonctions hardware pour être vraiment exploitable (déplacement hardware de blocs mémoires VDP en interne au moins).

Pour m'exciter il suffit de reparler de cette machine... :wink:
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par yo_fr »

à la même époque, je me souviens, il y avait aussi les noeuds au cerveau pour ressortir la rom du TMS7041...
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par jester »

yo_fr a écrit :à la même époque, je me souviens, il y avait aussi les noeuds au cerveau pour ressortir la rom du TMS7041...
Oui mais c'est une autre histoire... ça ne sert pas à grand chose pour développer le truc. Et ça n'a servi à rien (à part le fun) car Daniel n'a pas implémenté l'émulation de ce second CPU, il émule juste les appels de fonctions => la majorité des plantages de l'émulateur vient de la: Pb de synchro dans la comm des deux CPU puisque le bus n'est pas émulé ni le second CPU.
Il faut savoir que pour jouer un sample audio par exemple, le TMS7020 doit demander au 7041 de jouer un sample, lequel va parler avec le TMS5220 (synthe vocal) pour piloter le son en parallèle. Et un échange sous interruption de données va alors s'opérer entre le 7020 et le 7041 : le premier envoyant les données audio lorsque le 7041 les réclame car le 5220 indique à ce dernier que son buffer a été traité.
Sachant qu'en plus le 7041 traite aussi certaines I/O en parallèle pour le compte du 7020 (clavier entre autre)... on peut comprendre qu'une émulation "simples" de fonctions en absence de simulation parfaite de chaque composant puisse entraîner des couacs sur l'émulateur. L'Exl lui ne plante quasi jamais (tester avec double timer intensif + synthé vocal + clavier + gros traitement graphique sur TMS7020) alors qu'il ne faut pas beaucoup insister pour clasher dcexel !

Et oui sur Exl on a le VDP et le synthé vocal qui font leur traitement en parallèle, mais aussi les deux CPUs 7020 et 7041 qui fonctionnement en parallèle... le 7041 réalisant en tâche de fond des traitements d'I/O lourds pour alléger le 7020 qui se trouve déranger au besoin via un traitement d'interruption assez complexe, complété d'une boite aux lettres (sorte de bus de comm entre les deux CPU). dcexel se vautre généralement sur la gestion de la boite aux lettres ... mais en pratique ça suffit largement pour développer dans un confort absolu !

Vous voyez c'est simple :lol: , pas découragé... non... alors vous êtes aussi des grands malades :wink:
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par Daniel »

Faute d'avoir la ROM du 7041 au début du développement de dcexel, j'ai passé des centaines d'heures sur l'émulation "haut niveau" des entrées/sorties. Plus tard, jester a eu une idée diabolique pour dumper la ROM par des méthodes totalement soft. Quand la ROM a été extraite je n'ai pas eu le courage de tout recommencer.

L'émulateur de Gilles a été développé plus tard, alors que la ROM du 7041 était connue, et il l'a utilisée. Si vous voulez une émulation fidèle des entrées/sorties, il vaut mieux abandonner dcexel et utiliser http://www.alternative-system.com/?page=exl100_emulator
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
kikich
Messages : 51
Inscription : 24 oct. 2016 23:19
Localisation : Aube
Contact :

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par kikich »

jester a écrit :Vous voyez c'est simple :lol: , pas découragé... non... alors vous êtes aussi des grands malades :wink:
pour ma part pas encore décourager :wink:
mais je ne pense pas de toute façon pousser la machine a son maximum. si j'arrive déjà, un jour , a sortir quelque ligne de code, je serai déjà content. :D
Avatar de l’utilisateur
kikich
Messages : 51
Inscription : 24 oct. 2016 23:19
Localisation : Aube
Contact :

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par kikich »

Daniel a écrit :Faute d'avoir la ROM du 7041 au début du développement de dcexel, j'ai passé des centaines d'heures sur l'émulation "haut niveau" des entrées/sorties. Plus tard, jester a eu une idée diabolique pour dumper la ROM par des méthodes totalement soft. Quand la ROM a été extraite je n'ai pas eu le courage de tout recommencer.

L'émulateur de Gilles a été développé plus tard, alors que la ROM du 7041 était connue, et il l'a utilisée. Si vous voulez une émulation fidèle des entrées/sorties, il vaut mieux abandonner dcexel et utiliser http://www.alternative-system.com/?page=exl100_emulator
Le tiens reste tout de même le plus complet et simple d'utilisation
Gilles dis la même chose
Gilles a écrit :L'émulateur exelvision le plus abouti à ce jour est l'oeuvre de Daniel, son site DCexel est également une référence
jester
Messages : 2328
Inscription : 01 janv. 2009 23:16
Localisation : Grenoble

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par jester »

Et sur les dernières versions de dcexel, il y a très peu de plantage... et uniquement si on joue trop avec le synthé vocal + clavier. Et justement il plante surtout avec Wizord et Captain Menkar... sûrement un détail qui nous a échappé.
Mais dcexel gère tellement d'options, avec une telle simplicité, et est aussi tellement pratique avec son outil de mise au point en mode dev... sans cet outil génial je n'aurais jamais rien développé sur cette machine.

Mais bon je reste quand même sur ma faim avec tous les secrets qui sont encore dans cette ROM du 7041... :wink:
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [ EXELVISION ] initiation à l'assembleur pour TMS7020

Message par 6502man »

Je vais préparer la partie sur le VDP mais en restant très simple pour ne pas perdre tous le monde en route :wink:

Je fais l'impasse sur le 7041 et la synthèse vocale (on pourra l'aborder directement avec du code d'exemple).

Et ensuite on pourra attaquer la partie pratique de l'assembleur sur Exelvision, après ça le nombre de développeurs sur Exelvision va décupler exponentiellement :lol: :lol:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Répondre