DCMOTO - Emulateur universel Thomson 8 bits : Forum - Programmation - patcher la mémoire dans dcmoto
Retour : Accueil » Programmation
Pages : 1 - 2
Auteur Message
Fool-DupleX
Visiteur
Date : 25/05/2005 à 13h04
Au fait sur le mo5, petit rappel, y'a pas d'extension memoire par defaut... valable uniquement sur mo5nr et mo6.

Fool
en haut - en bas
Orion_
Visiteur
Date : 25/05/2005 à 18h19
Fool-DupleX > en effet ta technique fonctionne mais il faut aussi decaler n de 6 vers la gauche et le mettre dans B :)
(n ne depasse pas 24 dans mon programme)
au final ça me donne ça:
; B = n
TFR B,A
LSRA
LSRA
ABA
LSLB
LSLB
LSLB
LSLB
LSLB
LSLB ; D = n * 320
en haut - en bas
Orion_
Visiteur
Date : 25/05/2005 à 18h30
mmh j'avais trouvé plus petit mais visiblement RORB ce comporte comme LSRB sur dcmoto :|
TFR B,A
LSRA
LSRA
ABA
RORB
RORB
ANDB #192
en haut - en bas
Daniel
Visiteur
Date : 25/05/2005 à 19h43
DCMOTO traite RORB et LSRB comme le 6809. Le bit 7 reçoit la retenue pour l'un et zéro pour l'autre. Sinon il n'y aurait aucun espoir de booter la machine, et encore moins de faire tourner un jeu

Rappel : la bible du 6809 est le MC6809 programming manual. Il donne la description détaillée de toutes les instructions, et ne laisse aucune ambiguité, à une exception près : le DAA (tous les cas de figure ne sont pas décrits explicitement). Pour les autres, c'est une référence indispensable.

Remarques :
- la méthode proposée par Fool-DupleX est beaucoup plus astucieuse que la mienne. Quand il parle d'un décalage à droite de 2, il s'agit du registre D, donc LSRA suivi de RORB (2 fois).
- les deux programmes du post précédent sont faux : ABA n'est pas une instruction 6809, les deux LSRA perdent les 2 bits de poids faible de A, les 6 LSLB perdent les 6 bits de poids fort de B, et les RORB sont très surprenants ici
- LSL est un mnémonique qui génère le même code qu'ASL, mais ce n'est pas l'usage de l'employer. Il est préférable d'utiliser ASL, comme la grande majorité des désassembleurs.

Daniel
en haut - en bas
Orion_
Visiteur
Date : 25/05/2005 à 23h04
grumhf, moi ch'ui désolé mais un ROR ou ROL sur 68000 ça ça fait un roulement des bits, et LSL / LSR ça met la retenue, c'est quoi ce processeur ralala
bon bref :D
heu ABA oui j'ai remarqué ça dans DCMOTO mais bizarrement c'est supporté par mon assembleur (et a la limite tant mieux parceque j'aurais pas trouvé l'astuce tout seul en fait il fait un PSHS B ; ADDA ,S+ )

"Quand il parle d'un décalage à droite de 2, il s'agit du registre D, donc LSRA suivi de RORB (2 fois)."
ah ben voila, c'est une methode que je cherchais pour transferer les bits d'un registre a l'autre, merci pour la precision ^^
en haut - en bas
Orion_
Visiteur
Date : 26/05/2005 à 00h33
ah j'en profite pour poser la question, j'ai lu quelque part sur le forum quelqu'un avait brancher la prise magnétophone du mo5 sur un port parallele de PC, ça marche comment concretement ? le mo5 envoi des données binaire ou du son ??
parceque j'ai essayer de faire un cable carte son du pc <-> magnétophone mo5
mais en vain :(
je reçoit bien le son en mode lecture du magnétophone mo5, mais en mode ecriture il veut rien entendre :(
(et le son reçu du magnétophone mo5 est inéxploitable puisque aucun des convertisseurs dcmoto ou emul5 ne fonctionnent :/ )
en haut - en bas
Daniel
Visiteur
Date : 26/05/2005 à 07h18
Pour la liaison MO5-PC, les signaux envoyés et reçus par la prise magnétophone sont au niveau TTL. Ca marche avec un port parallèle (mais je ne l'ai jamais fait), ou avec la carte son, dans les deux sens. J'ai écrit plusieurs posts sur le sujet (Connexion directe du MO5 et du PC, 11/09/2004) dans la section "Machines et périphériques" du forum. Dans le sens PC vers MO5, il faut mettre un circuit de mise en forme TTL (il suffit d'une simple porte NAND, ou NOR, ou d'un inverseur).

Le programme de multiplication avec les 2 LSRA et les 6 LSLB n'est finalement pas si faux qu'il en à l'air, car les 6 LSLB rétablissent les 2 bits perdus par les LSRA. Mais ce n'est pas la bonne manière de faire. Pour décaler le registre D de 2 bits vers la droite, il suffit de :

LSRA
RORB
LSRA
RORB

Edit(9h30): Je crois que Fool-DupleX a fait la liaison par le port parallèle. Il pourra en dire plus. Mais c'est sûr que ça marche, car j'ai écrit un programme de lecture/écriture sur le LEP par l'intermédiaire du port parallèle. Il pourrait peut-être fonctionner en l'état en connectant le MO5 à la place du magnétophone. Seul problème : il ne marche que sur sur un 386SX16, car il utilise une boucle du programme pour la temporisation (j'étais un très mauvais programmeur PC en 1990. Heureusement, j'ai fait des progrès depuis...).

Daniel
en haut - en bas
Fool-DupleX
Visiteur
Date : 26/05/2005 à 10h39
Citation :
la méthode proposée par Fool-DupleX est beaucoup plus astucieuse que la mienne.


Merci Daniel pour cet enorme compliment J'ai vu passer des TFR et des PSHS, je mentionne juste au passage que j'evite ces instructions pour des petits transferts, car elles sont tres couteuses en cycles. De meme que l'indirection sur PC, tres puissante mais lourde en cycles egalement. Par contre, je recommande l'emploi des deux piles pour les gros transferts memoire a memoire, c'est ultra-rapide.

Notez d'ailleurs que le MUL fait 11 cycles et que finalement, tous les decalages de bits finissent par arriver presque au meme resultat a peut-etre 2-3 cycles pres (ce qui peut etre precieux dans certaines situations, je l'admets!). Si c'est critique, j'ai tendance a privilegier un precalcul avec des tables astucieusement composees, pour autant que ca ne bouffe pas trop de memoire. Tu dis que n ne depasse pas 24 : utilise une table de 48 octets precalculee, et ca regle ton probleme !

LEP sur port parallele : je confirme les dires de Daniel. C'est du TTL ca s'interface tres bien. J'ai ecrit un bout de code qui pilote aussi le moteur, sous Windows 2000/XP. Mais je n'ai aucun merite: ca consiste essentiellement a utiliser une DLL speciale pour attaquer le port parallele et l'instruction Sleep (En C) qui est assez precise sous windows, le tout scotché a l'automate que j'avais ecrit pour recuperer les cassettes avec Emul5.

C'etait d'ailleurs la grande force du LEP Thomson. C'etait probablement le meilleur sur le marche, car il contenait toute une electronique tres propre pour filtrer le signal K7 et sortir les donnees en TTL. La concurrence attaquait en general directement une I/O de l'unite centrale avec le signal K7 a travers un condo (pour filtrer la composante continue), ce qui faisait qu'il fallait toujours regler le volume sonore de la cassette et avoir un tres bon cable pour esperer relire ses donnees. La non-compatibilite entre les K7 TO et MO par contre etait largement artificielle.

Fool
en haut - en bas
Orion_
Visiteur
Date : 26/05/2005 à 11h00
etant donné que pour l'instant je n'ai aucun moyen de transferer un programme depuis mon pc sur le mo5 (a par le clavier et mes main ), j'ai changer de politique temporairement et je privilegie la taille du programme :))
je ne suis pas super doué en electronique (mais je mis met un peu ces derniers temps)
j'ai trouvé un circuit TTL a porte NAND (74LS00) je suppose que c'est ça qu'il faut utiliser mais comment ? :D
basiquement, comment le brancher ?
et je vous entend parler de LEP tout le temps, qu'est ce que c'est exactement ?
ça designe le magnétophone mo5 ou alors la prise magnetophone sur le mo5 ?
cette prise la sort-elle un signal sonore ou binaire brute ? le mo5 fait il une mise en forme speciale k7 a partir de ce signal ou ne fait-il qu'enregistrer le signal brute sur k7 ?
ça fait déja 2 cable mo5 que je réalise a partir du shema sur le site emul5 et ça ne fonctionne pas du tout, je commence a désespérer de voir tourner mes programmes sur vrai mo5 :/

pour ma routine actuellement j'ai ça:
PutMario: ; A = Xpos, B = Ypos
PSHA ; Save Xpos

PSHB ; Push B to add it after to A with ADDA ,S+
TFR B,A
LDB #0
LSRA
RORB
LSRA
RORB
ADDA ,S+ ; D = Ypos * 320

TFR D,X ; D->X
PULB
ABX ; Add Xpos to X -> X = screen pos
en haut - en bas
Fool-DupleX
Visiteur
Date : 26/05/2005 à 12h41
LEP signifie Lecteur-Enregistreur de Programmes, c'est le lecteur de cassette. comme je l'ai indique plus haut, il sort directement un beau signal TTL tres propre, ce qui etait sa grande force par rapport a la concurrence, mais le rendait totalement incompatible avec tout.

Le port parallele etant compatible TTL, un simple fil (blinde quand meme) suffit pour relier le LEP au port parallele d'un PC. Tout est ensuite dans le logiciel.

Le codage sur la k7 est realise par le MO5, il s'agit d'un MFM a 1200 bauds. Les donnees sont groupees en blocs de 255 octets + entete.

Pour ta routine, honnetement, fait peter la pile. En utilisant une variable en RAM avec le pointeur DP (Direct Page), tu double deja la performance, avec le meme code (un PSH ou un PULS prend 6 cycles, alors qu'un LD < prend 3 cycles, sans compter cet horrible ADDA ,S+). Le TFR D,X - PULS B - ABX peut etre avantageusement remplace par un simple STB > ADDD > ce qui fait seulement 9 cycles contre 15 - mais je pense qu'on peut faire encore bien mieux en revoyant la routine de fond en comble.

Tout cela me donne envie de sortir un utilitaire et une doc pour brancher le LEP sous Windows... Sauf que j'ai pas le temps, mais je rajoute ca a ma longue liste, promis

Fool
en haut - en bas
Yoann
Visiteur
Date : 26/05/2005 à 12h42
Un petit commentaire vite fait, la syntaxe de la pile S est :

PSHS B (et non PSHB)
PULS B (et non PULB)

De meme pour la pile U

PSHU B
PULU B
en haut - en bas
Daniel
Visiteur
Date : 26/05/2005 à 13h39
Orion_ a écrit :
j'ai trouvé un circuit TTL a porte NAND (74LS00)

C'est parfait ! Tu trouveras son schéma sur internet.
Le + et le - doivent être reliés respectivement au +5V et à la masse de la prise du crayon optique. Une seule des 4 portes NAND est utilisée (peu importe laquelle). Les 2 entrées du NAND sont reliées entre elles et à la sortie de la carte son, la sortie du NAND est reliée à l'entrée données de la prise magnétophone du MO5.
Si tu n'as pas de câble blindé pour la liaison avec la carte son, ce n'est pas grave. J'ai utilisé une rallonge 220V de 5 mètres sans aucun problème.

PS: ce circuit est très simple, mais pas très orthodoxe. Il faudrait le compléter par des résistances pour ne pas laisser l'entrée et la sortie "en l'air", une diode pour protéger l'entrée des tensions inverses, un condensateur pour éliminer une éventuelle composante continue. Mais comme ça marche dans cette version dépouillée, et que mon seul but était de prouver la faisabilité, je n'ai pas été plus loin.

Daniel
en haut - en bas
Orion_
Visiteur
Date : 04/06/2005 à 20h39
petite question, quelle sont les broches + et - de la prise crayon optique ?
j'ai pas trouver dans le manuel technique et mon testeur est HS :/
en haut - en bas
Orion_
Visiteur
Date : 04/06/2005 à 22h30
j'vais devenir fou.
apres avoir galerer 1h a faire ce satané cable, je test et evidement ça marche pas ...
je suis vraiment pas doué pour l'electronique ...
j'ai réussi a trouver une alim de 5V pour le circuit TTL
donc je branche et tout, et rien, je verifie donc avec mon testeur (qui finalement fonctionne, une fois sur dix )
et la quand je lance un son depuis le PC j'ai:
0V entre le fil relier a la sortie son et ça masse, et 0V aussi en sortie du TTL
par contre j'ai 1.39V entre la sortie son et la masse du TTL, et 0.14V entre la sortie du TTL et la masse du TTL.
faut il relier la masse du TTL a la masse de la sortie son ??
en haut - en bas
Orion_
Visiteur
Date : 05/06/2005 à 00h23
bon j'ai bien du 5v a la sortie du ttl (j'avais mal mesurer)
même en reliant les 2 masses ça fait rien -> erreur 60 ...
j'abandonne ... sinon j'vais peter un boulon.

quelqu'un aurait le brochage des cartouches memo5 ? j'ai pas trouver dans la doc, j'espere que j'aurais plus de chance avec les eeprom.
en haut - en bas
Daniel
Visiteur
Date : 05/06/2005 à 22h03
Le brochage de la cartouche MEMO5 est sur le site Christophe's Lair
La connexion directe PC --> MO5 par la prise magnétophone fonctionne. Je peux le garantir car j'ai fait l'expérience moi-même.
S'il y a du +5V à la sortie de la porte NAND, et qu'elle est bien connectée sur l'entrée data de la prise magnétophone du MO5, l'erreur 60 ne doit pas se produire.

Daniel
en haut - en bas
FoolDupleX
Visiteur
Date : 05/06/2005 à 22h04
Heu... sans mechancete aucune, je crois que tu devrais arreter la les experiences a la Frankenstein... au mieux tu grilleras tes interfaces et ca ne te menera pas tres loin xxp

tu peux trouver le brochage en question un peu partout, notamment dans les doc techniques, ainsi que sur le lair : lair.thomsonistes.org

Fool
en haut - en bas
Orion_
Visiteur
Date : 11/06/2005 à 00h17
bon
j'ai fait une tentative avec une eeprom. enfin c'est une mémoire flash, c'est peut etre pour ça que ça marche pas :/
si quelqu'un pouvais m'eclairer parceque je desespere :D
(pourtant dans le datasheet c'est marqué qu'elle agit comme une EPROM, donc :/ )

ça c'est ma mémoire flash (a gauche), et ce que j'en ai deduis de l'eprom mo5 a droite (d'une cartouche memo5 eventrée)


et ça c'est mon montage, a l'exterieur c'est les connecteurs mo5, a l'interieur, le support eeprom flash

(l'interrupteur c'est pour changer de bank)
en haut - en bas
Daniel
Visiteur
Date : 11/06/2005 à 07h43
As-tu cablé la connexion pour désactiver le Basic ? Sinon, le MO5 ignore la cartouche.

Daniel
en haut - en bas
Fool-DupleX
Visiteur
Date : 13/06/2005 à 10h33
du cote connecteur mo5, ca ressemble pas tellement a un connecteur de mo5 sur ton schema.... et daniel a raison pour le prcart.

Voir ici pour la nomenclature officielle du brochage : http://lair.thomsonistes.org/doc2/conmemmo5.htm

et la flash fonctionne parfaitement en regle generale avec les thomson.

Hope this helps...

Fool
en haut - en bas
Pages : 1 - 2