1

Bonjour à tous !!
Comment fonctionne le kit BJL ? C'est à dire comment le boot se fait ? Quel protocole est utilisé ?
Bref, je veux tout savoir !!! fou
Je sais, je peux prendre le programme, le décompilé et regardé le fonctionnement mais c'est pour éviter çà que je pose ces questions !! Il y en a parmis vous qui se sont déjà penché dessus je suppose ?
Merci pour vos aides. boing
avatar
http://irioslabs.over-blog.com/

La connaissance ne vaut que si elle est partagée par tout le monde.
I2C

2

c'est simple : (de mémoire)

- init regs jaguar (le contrôleur mémoire + vidéos)
- init vecteurs d'interruptions (pour récupérer les exceptions et afficher les informations correspondant)
- création du menu du bjl
- init des interruptions pour la vbl
- attente d'informations venant des pads :
*pad 0 : appui sur les boutons du pad et action correspondante
*pad 1 : vérification si une transmission "BJL" est demandé

le protocole BJL est un protocole "bastian" grin donc c'est du fait maison (zerosquare pourra en dire plus sur le protocole tongue)
avatar

3

Ah ouais, ce satané protocole BJL, et sa stabilité digne d'une savonnette en équilibre sur un lavabo trempé grin

Comme le dit SCPCD, c'est pas un truc standard, mais du "fait maison" par Bastian Schick (au cas où, je remets un lien vers son site où tu peux trouver ses sources).

J'ai le source en ASM de la ROM BJL quelque part sur mon disque dur, mais c'est un truc indigeste (et par-dessus le marché, les labels/commentaires/etc. sont en Allemand cheeky).

Voilà comment ça marche en gros :
- c'est une liaison parallèle synchrone avec handshaking.
- les données sont transférées avec les lignes de données du port parallèle du PC (normal wink), configurées en entrée ou en sortie suivant le cas.
- les lignes STROBE et BUSY sont utilisées comme horloge pour cadencer le transfert et faire du handshaking. À chaque étape du transfert, le PC attend un accusé de réception de la Jaguar, et vice-versa.

Là où ça se complique un peu, c'est qu'il existe 2 protocoles différents :

- le "hyper", qui est utilisé une fois qu'on a appuyé sur A ou C (ou que le passage en mode download a été commandé à distance). Il est utilisé exclusivement pour uploader des programmes depuis le PC vers la Jaguar, et le programme transféré est immédiatement lancé une fois le transfert terminé. Avec ce protocole, les lignes de données du port parallèle sont toujours en sortie. Le "bloc élémentaire" transféré est un entier 32 bits, envoyé sous la forme de 4 octets consécutifs (mode 8 bits), ou de 8 quartets consécutifs (mode 4 bits ; dans ce cas, seules les lignes D4 à D7 du port parallèle sont utilisées). Si tu veux une explication détaillée, voilà une description en pseudo-code que j'avais faite à la base pour GT Turbo : tromb Fichier joint : GT_BJL.pdf

- le "normal", qui est utilisé quand on est sur l'écran d'accueil du BJL. Il permet d'exécuter des commande pour faire pas mal de choses (lire et écrire partout en mémoire, récupérer le contenu des registres des processeurs, déclencher le passage en mode download comme si on avait appuyé sur A ou C, etc.). Ce protocole-là est plus tordu, avec des variantes suivant la commande (sens des lignes du port parallèle, "découpage" des entiers en plusieurs paquets, etc.). Le handshaking n'est pas non plus le même qu'en mode hyper. Je m'y étais interessé il y a un certain temps, mais il faudrait que je prenne le temps de m'y replonger pour te donner des exemples "propres". Il faut noter aussi que seule une petite partie de ce protocole (les commandes pour déclencher le download côté Jag) est implémentée dans le loader PC, le reste n'est pas documenté.

En théorie, tout ça devrait marcher super bien, parce qu'avec le handshaking la machine la plus lente attend automatiquement que la plus rapide soit prête.

En pratique, c'est un vrai bordel, parce que Bastian a apparemment implémenté des timeouts dans sa gestion de handshaking. C'est-à-dire que si le programme de la ROM ne détecte pas de transition en entrée pendant un certain temps (autrement dit, que le PC de l'autre côté met un peu trop de temps à réagir), il réinitialise son protocole et que des données sont paumées. Au départ ça ne posait pas de problèmes, parce que c'est assez facile d'avoir des timings déterministes sur un PC sous DOS ou un Atari sous TOS. Sous Windows ou Linux (qui ne sont pas des OS temps réel) par contre, c'est quasiment impossible (à moins de faire de faire des drivers noyau), et du coup la communication n'est pas très fiable.

Pour le mode "hyper", le timeout semble se faire entre les différents octets qui composent un entier 32 bits. Apparemment, on peut attendre autant de temps qu'on veut entre 2 entiers 32 bits.
Pour le mode "normal", apparemment il y a des timeouts beaucoup plus serrés un peu partout, si bien que certaines fonctions sont carrément inutilisables sur PC (trop de latence).

Tu peux regarder le source du loader PC de Bastian Schick que j'ai modifié pour tourner sous Windows (et j'ai corrigé quelques problèmes, au passage) : [url]http://www.jagware.org/index.php?s=&showtopic=37&view=findpost&p=3109 [/url]

Voilà, j'ai sûrement oublié plein de trucs, mais il est tard zzz
N'hésite pas à demander si tu as d'autres questions.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

4

Super !!!!
Je vais pouvoir travailler dessus convenablement et merci pour vos aides !!! top
avatar
http://irioslabs.over-blog.com/

La connaissance ne vaut que si elle est partagée par tout le monde.
I2C