Logicielsmoto.com

Nous sommes le 19 Mar 2024, 04:07

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 
Auteur Message
MessagePosté: 13 Jan 2023, 20:03 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Bonjour

Une routine assembleur (fonctionnant ici aussi bien en 6809 qu'en 6309) qui peut être bien utile pour basculer en mode natif du 6309 s'il est détecté. Vu dans la doc PDF du 6309 à la page 207 (je l'ai un peu modifié).

Code:
* Determine whether processor is 6309 or 6809
* Returns Z clear if 6309, set if 6809
VAL309 EQU $9000 ; Valeur 6809 ou 6309
 org $8000
CHK309 PSHS D ;Save Reg-D
 FDB $1043 ;6309 COMD instruction (COMA on 6809)
 CMPB 1,S ;not equal if 6309
 BNE CHK301
 LDD #6809
 BRA CHK302
CHK301 *
 LDD #6309
CHK302 *
 STD VAL309
 PULS D ;exit, restoring D
 RTS


Et après avoir sauvegardé ça en fichier CHK309.BIN il suffit d'écrire ce code Basic
Code:
10 CLEAR ,,,&h7FFF:LOADM"CHK309":EXEC &h8000
20 A=PEEK (&H9000)*256+PEEK(&H9001):cls:?a


Enfin, pour basculer en mode NATIF 6309 et FIRQ 6309, une simple instruction:
Code:
 LDMD #3

Suffit! (Mais cette instruction ne fonctionne que pour le 6309. Le Codeop de cette instruction LDMD étant "113D" (au cas où vous souhaiteriez juste l'écrire dans une routine BASIC

Je sais que bcp d'entre vous êtes des experts du 6809/6309, mais vu qu'il n'y a pas de sujet à ce propos, pour justement pouvoir basculer automatiquement dans le mode natif du 6309 et profiter de l'augmentation de la vitesse de 30%...

Par contre, dans le commentaire du FDB, je ne pige pas bien ce qu'ils ont voulu dire, vu que COMA en 6809 est le codeop 43 (et pas 1043) et comment ça peut fonctionner avec le 6809 puisqu'apparemment, les codeopération "inutilisés" dans le 6809 sont sensés être interdites. En tous cas, ça marche sous DC Moto.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 13 Jan 2023, 21:37 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
Les codes non documentés du 6809 ne sont pas interdits.
Il font tous quelque chose, et beaucoup ont été décrits précisément.
Par contre ils font rarement la même chose que les mêmes codes sur 6309.

Dcmoto émule au mieux les codes non documentés en fonction des informations connues,
c'est un bon début mais ce n'est pas parfait ni garanti.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 14 Jan 2023, 00:48 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Daniel Coulom a écrit:
Les codes non documentés du 6809 ne sont pas interdits.

Citation du manuel assembleur 6809 pour TO8/TO9 page 172 "Note : tous les codes opérations inutiisés sont indéfinis et interdit"

Daniel Coulom a écrit:
Par contre ils font rarement la même chose que les mêmes codes sur 6309.

Je ne sais pas ce que tu as voulu écrire là, mais tous les codeop du 6809, quand ils existent, font exactement la même chose que pour 6309 (et je viens de véfifier pour tous les codeop du 6809 enre 00 et 3F), ça me parait évident, sinon, il n'y aurait pas de compatibilité. Cependant, il y a des codeop qui ont disparu du 6809/6800 et sont rajouté dans le 6309. De plus; il y a des codeop supplémentaire pour les codeop commençant par 10 et 11 sur le 6309. Dont ce 1043 ici...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 14 Jan 2023, 01:27 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1800
Localisation: Brest
C'est pas parce que c'est écrit dans un bouquin que c'est vrai, en particulier quand le manuel n'entre pas dans les détails. Les manuels ont des erreurs et parfois simplifient un peu trop.

Un opcode interdit n'a fondamentalement pas de sens: le CPU fait quelque chose quand il les rencontre. Mais quelque chose de non spécifié. Le comportement est alors lié à l'implementation finale de bas niveau (masques et micro-codes).

Or depuis le temps, les masques du 6809 sont figés. Il n'y a plus de surprise. Les gens ont trouvés ce que faisaient ces "undocumented opcodes". qui sont devenu à présent tout à fait documentés:
* http://dragon32.info/info/undocops.html
* https://www.6809.org.uk/dragon/illegal-opcodes.shtml
* https://github.com/hoglet67/6809Decoder ... Behaviours
(Bien peu sont utile, sauf peut-être le CLR qui n'efface pas la retenue.)

L'explication du comportement du $1043 se trouve dans le bouquin de Burke:
Citation:
The following subroutine determines which processor is present:
* Determine whether processor is 6309 or 6809
* Returns Z clear if 6309, set if 6809
Code:
CHK309 PSHS D ;Save Reg-D
 FDB $1043 ;6309 COMD instruction (COMA on 6809)
 CMPB 1,S ;not equal if 6309
 PULS D,PC ;exit, restoring D

The subroutine relies on the 6809 treating undefined instructions as 1-byte NOPs. When executed on a 6809, the subroutine complements A, but not B; the result of the comparison will be that B equals its saved value. When executed on a 6309, the subroutine complements both A and B; the result of the comparison will be that B does not equal its saved value. The subroutine preserves all register values.
Donc $1043, n'existant pas sur le 6809, le prefix $10 est traité comme un NOP suivi par un COMA ($43).

_________________
Good morning, that's a nice Tnetennba


Dernière édition par Samuel Devulder le 14 Jan 2023, 09:50, édité 1 fois.

Haut
 Profil  
Répondre en citant le message  
MessagePosté: 14 Jan 2023, 09:17 
Hors ligne

Inscription: 21 Fév 2020, 11:38
Messages: 366
Samuel Devulder a écrit:
Or depuis le temps, les masques du 6809 sont figés. Il n'y a plus de surprise. Les gens ont trouvés ce que faisaient ces "undocumented opcodes". qui sont devenu à présent tout à fait documentés:
* https://www.6809.org.uk/dragon/illegal-opcodes.shtml

Vachemebnt intéressant ce lien! On y apprend qu'on peut faire un TFR X,B mais pas directement (mais en utiisant FDB dans le cas de "Dream" (je ne sais pas ce que c'est mais au vu du contexte, ça doit être l'Assembleur du Dragon, par conséquent, je me demande si l'Ass 3.0 sur Thomson produira la même erreur ou pas ?)

Ce TFR X,B copiera les bits de poids faibles de X dans B sans que ça ne touche le A. Dans l'exemple donné, il parlent d'écran, qui, dans le dragon fait 128x192 ou 256x192, donc l'exemple donné pour les dragon ne peut être utile dans les Thoimson (160 ou 320 pxl de large). Cette instruction permet de gagner au moins 1 instruction (le A n'est pas touché). Mais dans l'immédiat je ne vois pas en quoi ça peut servir (pas on verra à l'usage).

Samuel Devulder a écrit:
L'explication du comportement du $1043 se trouve dans le bouquin de Burke:


C'est ce bouquin là qui m'a servi de référence pour le sujet du message...


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 14 Jan 2023, 17:23 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
Les codes opération non documentés émulés par dcmoto sont à la dernière page de ce livre : http://dcmoto.free.fr/documentation/6x0 ... index.html


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com