Un nouveau modèle, le Casio PB-1000

Voilà, ça y est, je peux le dire officiellemment maintenant que le pocket boote et que le coeur de l’émulateur fonctionne bien :
PockEmul est heureux d’accueillir son premier CASIO le PB-1000.
Cela n’aurai jamais été possible sans le travail incroyable de Piotr Piatek (http://www.pisi.com.pl/piotr433/index.htm#pb1000) qui a réussi à dumper la ROM du CPU et a fait un super émulateur. Je me suis contenté de m’appuyer sur son travail (en Delphi, la traduction est pas évidente).
Après le X-07, c’est le second pocket non Sharp émulé dans PockEmul et j’espère pas le dernier.
Pour l’instant je vais m’arréter là pour les nouveaux modèles et les paufiner afin qu’ils se retrouvent au niveau des Sharp.

Un nouveau modèle, le PC-E500

Alors, oui je sais, je m’éparpille mais de temps en temps il faut se changer les idées. Et comme je suis un peu bloqué sur l’émulation du port série du Canon X-07, je me suis lancé dans le E-500.
Alors c’est vrai, comme me disait Woddstock (un ami du forum Silicium) , un plastic dans PockEmul, tout fout le camps.
Mais Gege (un autre de silicium) me le réclamait et j’ai donc décidé de me pencher sur ce modèle.
Je reconnais être très heureusement surpris par les capacités de ce pocket que je ne soupconnais pas. Un grand écran, un adressage mémoire sur 20bits (1Mo), un vrai UART… Belle bête.
Chose marante, pour ce qui concerne l’émulation de l’écran , c’est quasi la copie conforme du hardware du PC-1600. Comme j’avais émulé le HD61102 pour le pc-1600 et que le E500 est équipé de 2 HD61202 (j’ai pas analysé en profondeur, mais il ne semble pas y avoir de différence significative), j’ai directement repris l’objet et roule ma poule, 2 ou 3 réglages et ça marche.
Finalement, je commence à avoir une bibliothèque d’objet réutilisable dans PockEmul qui font gagner beaucoup de temps.

Un nouveau modèle, le Canon X-07

Bonjour,
J’ai toujours rêvé de ne pas limiter PockEmul aux pocket Sharp, mais comme je n’ai que des Sharp, je n’ai jamais pu m’étendre à d’autres marques.
Lors d’un rassemblement d’amateurs de Pockets, un ami m’a procuré un Canon X-07. Aprés quelques recherches sur le Net , il m’est apparu que ce serai une machine intéressante à émuler, surtout avec toute ses extensions.
Voilà, je suis donc reparti des sources de Jacques BRIGAUD et j’ai fait rentrer tout ça dans le Framework PockEmul.
Bon , il y a encore un max de chose à modifier mais pour l’instant, j’ai le boot et le port // est émulé. Il faut que je m’attaque maintenant au port série.

PockEmul sur Android

Voilà quelques temps, je découvert qu’il existait un portage de Qt sur Android.
Qt est la librairie que j’utilise afin de rendre PockEmul compatible multi-plateformes (Linux, Mac, Windows).
Aprés une simple recompilation, voici PockEmul disponible sur Android. Bien sûr j’ai du ajoutés quelques petites directives de compilation afin de prendre en compte la spécificité d’un tel OS, principalement en enlevant le menu pour le remplacer par quelques icones,  en affichant le menu contextuel par un Tap and Hold, et en gérant le pinch pour le zoom
J’en ai également profité pour changer l’écran de choix du pocket afin de le mettre un peu plus à la mode TouchScreen.

Continuer la lecture de « PockEmul sur Android »

Un compilateur C dans PockEmul

Il y a quelques temps, j’ai commencé à intégrer dans PockEmul un compilateur C rudimentaire. J’ai traduit en C++ LittleC compiler développé par Simon (http://www.lehmayr.de/) en Delphi. C’est un compilateur assez simple qui m’a permis de mieux comprendre le principe de fonctionnement d’un tel module.
Le compilateur produit du code ASM qui est ensuite transformé en code machine par un Assembleur également développé par Simon. Continuer la lecture de « Un compilateur C dans PockEmul »

un petit binaire pour ceux qui veulent jouer un peu

Je passe mon temps à ajouter de nouvelles fonctionnalités en repoussant toujours à plus tard la sortie d’une release. Avec tout cela, les derniers binaires publiés sont la 0.9.2.1 qui datent énormement.
Je vous propose donc en téléchargement la 0.9.3.0 courante pour Windows que je vais m’attacher à peaufiner.
Il y a plein de truc non documentés et pas trés intuitifs, alors n’hésitez pas à me demander des précisions.

Connexion directe entre deux Pockets (suite 2)

L’utilisation d’un timer à la nanoseconde afin de gérer la communication entre deux pocket n’est pas satisfaisante d’un point de vue performance. Je suis donc revenu à l’ancien système calé par tranche de 1ms.
J’ai un peu réfléchi et en fait la solution est assez simple. Tout en gardant un étalonnage de la vitesse toute les 1ms, je lance l’execution de chaque pocket pour un nombre de cycles correspondant à 1/8000ème de seconde. Cela fait que les Pockets sont suffisament synchronisés pour la fréquence de 4Khz utilisée pour le transfert K7.
Cela semble fonctionner mais je n’ai pas encore tout testé.

Connexion directe entre deux Pocket

Depuis les premiers pas de PockEmul dans la multi-émulation, je rêvais de faire fonctionner le câble EA-128C permettant de relier directement deux pocket pour un CSAVE/CLOAD sans stockage K7 intermédiaire. La synchronistion m’a toujours posé problème mais j’ai tout de même fait un essai avec un petit succés:

Le premier coup, j’ai eu une ERROR 8 et au second essai c’est passé. Chose bizarre, il y a eu le dernier caractère qui n’est pas conforme. Je pensais qu’il y avait un checksum évitant les erreurs de transmission… Il faut que je regarde ça plus en détail.
De toute façon, j’avais une chance de faire marcher ce transfert car les deux pockets sont à la même fréquence d’horloge, mais avec un 576Khz d’un côté et un 768Khz de l’autre il n’y a aucune chance pour que cela marche en l’état…

Le chaînage des périphériques

Bonjour à tous,
J’ai maintenant le CE-140F qui est quasi complètement émulé et en faisant mes tests, je me suis aperçu que le système de gestion des connecteurs entre pocket et périphériques était trop limité pour pouvoir supporter le chaînage de plusieurs périphériques sur le même port. J’ai donc remis un peu à plat cette gestion et mes premiers essais sont concluant.

Je vais maintenant faire l’expérience avec une ce-126P branchée sur le ce-140F… mais sans la ce-120p…
Edit: Eh bien ça marche aussi 🙂

Détail de l'instruction ROM du PC-1251

L’instruction ROM permet de charger directement en mémoire à l’adresse &B831 un programme BASIC ou Langage Machine.
Le système de communication est un simple échange série sur les broches D_IN et D_OUT, régulé par les broches ACK et BUSY.
Le Pocket envoie le code &7C et charge les données qui suivent. Les datas doivent être envoyés par paquet de 8 Bytes, chaque paquet étant suivi d’un Checksum. Le Checksum se calcule de la manière suivante :
On additionne les 4bits de poids fort puis les 4 bits de poids faible. S’il y a un Carry suite à l’addition des poids faibles on ajoute 1.
Si le dernier bloc de 8 Bytes commence par &75 alors les 7 bytes suivants du bloc correspondent au password.
Pour ce qui est du LM, il suffit de coder un prog BASIC du genre :
10 CALL &B841 suivi des codes machine,
et donc envoyer les codes : E0 10 C9 1F 52 48 44 40 00 FF xx xx xx xx xx xx ….. 37 (xx correspondant aux codes du prog LM).
La commande ROM se charge de mettre correctement à jours les pointeurs de début et fin de prog.
voilà, je suis un peu déçu qu’il n’y ai pas d’autorun … ou alors je ne l’ai pas encore trouvé.