Cartouche HECTOR HRX

Tout ce qui concerne le logiciel original et sa sauvegarde avec entre autre la régénération des disquettes ou autres supports physiques.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
ZamZam
Messages : 195
Inscription : 09 nov. 2020 16:10
Localisation : TOUL (54200) Meurthe & Moselle

Re: Cartouche HECTOR HRX

Message par ZamZam »

En modifiant le programme Arduino, maintenant il a l'air de charger quelque chose en mémoire, car l'affichage est modifié, mais je ne suis pas sur du tout du format qu'il faut envoyer, car apparemment il n'interprète pas la longueur du programme que j'envoie.

Quelqu'un aurait-il un dump d'une cartouche pour analyser l'entête ?
ecran_hrx.jpg
ecran_hrx.jpg (249.6 Kio) Consulté 4974 fois

Code : Tout sélectionner

volatile int cptmem = 0;
volatile byte progtab[] = {0x40, 0x00, 0x00, 0x06, 0xCD, 0xCA, 0x10, 0xCD, 0x00, 0x00};

void setup() {
  Serial.begin (9600);
  attachInterrupt(digitalPinToInterrupt (20), avancecpt, FALLING);
  attachInterrupt(digitalPinToInterrupt (21), initialisation, FALLING);
  DDRA = 0xFF;
}

void loop() {
}

void initialisation()
{
  cptmem = 0;
  Serial.println("initialisation");
  PORTA = 0x00;
}

void avancecpt()
{
 if(cptmem > 15) return;
 
 if(cptmem > 0){
  PORTA = progtab[cptmem-1];
  Serial.println(progtab[cptmem-1], HEX);
 }
  cptmem = cptmem + 1;
}
Jean-Luc
yves
Messages : 464
Inscription : 12 sept. 2007 21:32

Re: Cartouche HECTOR HRX

Message par yves »

Je n'ai pas de dump mais si tu as une idée géniale pour dumper une eprom sans dessouder, dis moi j'essaierai.

Yves
Avatar de l’utilisateur
ZamZam
Messages : 195
Inscription : 09 nov. 2020 16:10
Localisation : TOUL (54200) Meurthe & Moselle

Re: Cartouche HECTOR HRX

Message par ZamZam »

Voici une idée, le basic de la cartouche BASIC 3X va peut-être permettre de lire la cartouche BASIC 3X
Dans le BASIC 3X, il y a les instructions INP et OUT qui permettent de lire ou écrire sur les ports du 8255 (doc La pratique du BASIC 3X sur le site hectorvictor.free.fr :wink: page 82 à 85 )
Si avec ces instructions, on peut simuler l'interrogation et la lecture de la cartouche alors on pourrait peut-être lire le contenu de la cartouche

Etape1
Faire un OUT 242, 15 au début du programme pour mettre les 4 bits de poids faible à 1
Faire un OUT 242, 11 et un OUT 242, 15 pour faire une impulsion (à front descendant) de réinitialisation des composants de la cartouche
Etape 2
Faire un OUT 242, 13 et un OUT 242, 15 pour faire une impulsion (à front descendant) de comptage des adresses dans la cartouche
Etape 3
Faire un DONNEE = INP(241) pour lire le port B
Afficher DONNEE
Etape 4
Répéter 3 fois l'étape 2 et 3 pour lire les 4 premiers octets

Si la valeur de DONNEE varie en fonction des impulsions générées par les OUT 242 alors cela indique que la cartouche réagit à ces signaux
Jean-Luc
yves
Messages : 464
Inscription : 12 sept. 2007 21:32

Re: Cartouche HECTOR HRX

Message par yves »

Ca ne reagit pas bcp:
d'un hector mx à partir du basic 3X intégré cela renvoi toujours 255
d'un hector hrx à partir du basic 3X cartouche cela renvoi toujours 0
d'un hector 2hr à partir du basic 3 intégré cela renvoi toujours 64

Yves
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Cartouche HECTOR HRX

Message par gilles »

Petite remarque sur le code arduino, ce n'est peut être pas judicieux d'avoir un serial.println à 9600 bauds dans une interruption car le buffer risque de se remplir rapidement et ça va bloquer.
Patrick
Messages : 2019
Inscription : 16 mai 2009 09:30
Localisation : Clermont-Ferrand

Re: Cartouche HECTOR HRX

Message par Patrick »

Pour aller dans le même sens que Gilles, généralement dans un ISR, soit Interrupt Service Routine, il faut passer le moins de temps possible.
Je te conseille de gérer des drapeaux, booléens ou autre dans tes ISRs puis de réagir à ces drapeaux et de faire le traitement dans loop.
Tu peux utiliser des drapeaux entiers que tu incrémentes dans l'ISR et décrémentes dans le traitement. Si un drapeau dépasse 1, c'est que tu ne traites pas assez rapidement. Le test est rapide :

Code : Tout sélectionner

void loop() {
    ...
    if (drapeau >> 1) { 
        // Je suis trop lent
    }
    ...
}
Patrick
Avatar de l’utilisateur
ZamZam
Messages : 195
Inscription : 09 nov. 2020 16:10
Localisation : TOUL (54200) Meurthe & Moselle

Re: Cartouche HECTOR HRX

Message par ZamZam »

@yves, merci pour les tests
@gilles et @Patrick, merci pour vos conseils et je vais dans votre sens, car hier j'ai testé en mettant que du code "utile" dans les interruptions et ce n'est pas suffisant, je vais essayer par gestion de drapeaux comme l'indique Patrick ou peut être même en polling.

J'ai en projet (commande en cours de composants) une autre façon de faire avec de la RAM statique dualport que j'avais prévu de tester sur une vectrex comme dans le projet montré dans la vidéo suivante :

mais ce n'est pas pour tout de suite !
la RAM statique dualport pourrait remplacer les eproms en y ajoutant les composants de gestion de la mémoire comme dans la cartouche.
Jean-Luc
Avatar de l’utilisateur
ZamZam
Messages : 195
Inscription : 09 nov. 2020 16:10
Localisation : TOUL (54200) Meurthe & Moselle

Re: Cartouche HECTOR HRX

Message par ZamZam »

J'ai fait le dév avec les drapeaux, le verdict est que la Mega 2560 est trop lente pour traiter à temps les interruptions.
Je vais voir si d'autres cartes à microcontrôleur en ma possession pourrait être 5V Tolerant et plus rapide.
Jean-Luc
Avatar de l’utilisateur
gilles
Messages : 2779
Inscription : 07 août 2008 13:44
Localisation : Nantes
Contact :

Re: Cartouche HECTOR HRX

Message par gilles »

Essaye en polling en désactivant les interruptions et en décomposant bien. C'est à dire, par exemple avec

volatile var;

...

var=progtab[cptmem-1]
<boucle de polling>
PORTA=var

(le but c'est d'avoir déjà la valeur dans un registre au bon moment, sans avoir à aller lire de la flash)

un mega c'est 16MHz, on devrait quand même pouvoir faire des trucs avec.

La lecture par l'hector se fait sur le front montant ou descendant d'ailleurs?
Avatar de l’utilisateur
ZamZam
Messages : 195
Inscription : 09 nov. 2020 16:10
Localisation : TOUL (54200) Meurthe & Moselle

Re: Cartouche HECTOR HRX

Message par ZamZam »

J'essaierai le polling dans la semaine au plus tard vendredi.
Avec les interruptions je pense qu'il y a les sauvegardes(et les rétablissements) de contexte qui doivent prendre du temps CPU.
Jean-Luc
Avatar de l’utilisateur
ZamZam
Messages : 195
Inscription : 09 nov. 2020 16:10
Localisation : TOUL (54200) Meurthe & Moselle

Re: Cartouche HECTOR HRX

Message par ZamZam »

J'ai testé le polling sous la forme suivante :

Code : Tout sélectionner

volatile byte var;
volatile unsigned int cpt = 0;
volatile byte progtab[] = {0x00, 0x42, 0x00, 0x00, 0x06, 0xCD, 0xCA, 0x10, 0xCD, 0x00, 0x00};

void setup() {
  Serial.begin (115200);
  DDRA = 0xFF;
  DDRD = 0x00;
  PORTA = 0x00;
  Serial.println("passage setup");
}

void loop() {
  if(PIND==0){
    PORTA=progtab[cpt];
    cpt++;
  }
  Serial.print(cpt);
  Serial.print(" : ");
  Serial.println(progtab[cpt], HEX);
}
et cela donne sur la sortie série les valeurs suivantes :

Code : Tout sélectionner

0 : 0
0 : 0
0 : 0
0 : 0
0 : 0
0 : 0
0 : 0
1 : 42
1 : 42
1 : 42
1 : 42
1 : 42
1 : 42
1 : 42
2 : 0
2 : 0
2 : 0
3 : 0
3 : 0
3 : 0
3 : 0
3 : 0
3 : 0
3 : 0
3 : 0
4 : 6
4 : 6
4 : 6
5 : CD
5 : CD
5 : CD
5 : CD
5 : CD
5 : CD
5 : CD
6 : CA
6 : CA
6 : CA
6 : CA
6 : CA
6 : CA
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
7 : 10
8 : CD
8 : CD
8 : CD
8 : CD
8 : CD
8 : CD
9 : 0
9 : 0
9 : 0
9 : 0
9 : 0
9 : 0
9 : 0
9 : 0
10 : 0
10 : 0
10 : 0
10 : 0
10 : 0
10 : 0
11 : 0
11 : 0
11 : 0
11 : 0
11 : 0
11 : 0
11 : 0
11 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
12 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
13 : 0
14 : 0
14 : 0
14 : 0
14 : 0
14 : 0
14 : 0
14 : 0
14 : 0
14 : 0
14 : 0
14 : 0
14 : 0
15 : 4C
16 : 1
16 : 1
16 : 1
16 : 1
16 : 1
16 : 1
16 : 1
16 : 1
17 : B6
17 : B6
17 : B6
On peut voir que l'on peut détecter les fronts descendants du signal d'incrément des adresses et que la boucle loop est parcouru plusieurs fois avant la prochaine détection même en mettant des instructions d'envoi de données pour la liaison série. Sauf qu'il y a un nombre de générations d'impulsion plus grand que celui que l'on désire (486 dans mes essais au lieu de 10). Soit le programme loupe des lectures d'impulsions même en enlevant l'envoi de données sur le port série (le plus probable), soit le format des données envoyé n'est pas bon dans ce cas il faudrait un dump de cartouche pour valider le format à envoyer, soit l'Hector ne lit pas correctement les données envoyées. Le must serait d'avoir un analyseur logique qui permettrait de voir si le programme loupe des impulsions.
Pour l'instant, je n'ai pas trouvé un équivalent des instructions INP et OUT du BASIC 3X dans le langage Forth PAMPUK pour faire éventuellement un programme qui testerai l'échange du côté Hector avec génération d'impulsion et lecture de port avec le 8255.

PS : dans un éventuel besoin d'optimisation, j'ai regardé la possibilité de faire de l'assembleur dans du code Arduino pour le Mega 2560, voici un exemple minimaliste ci-dessous
asm_arduino.jpg
asm_arduino.jpg (66.92 Kio) Consulté 4791 fois
Jean-Luc
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Cartouche HECTOR HRX

Message par yo_fr »

Bonjour,
Juste un petit passage par ici :P
Attention sur l'HectorDuino j'ai été obligé de passer par des portes TTL pour les mémoires de synchro du port C, la carte Mega étant trop lente.

Sinon, de mémoire, les octets envoyés par la cartouche sont du même acabit que le Disk 2 : @ de chargement, longueur des données suivi des data, ce que je donnais à mon 1 post dans ce fil :
* L'adresse de rangement du contenu de la cartouche, (0x0000 à 0x0001)
* La longueur des data de la cartouche, (0x0002 à 0x0003)
* les Data de la cartouche. (0x0004 à 0x???? )

donc pour une émulations, il suffit d'envoyer les octets les uns à la suite des autres suite au cadencement donné par le port C low qui doit faire des pulses.
Le problème de timing viens du fait que suite au créneaux sur port C low, on lit juste derrière (instruction suivante du Z80, qui est à 5 MHz ! )
JJ
Avatar de l’utilisateur
ZamZam
Messages : 195
Inscription : 09 nov. 2020 16:10
Localisation : TOUL (54200) Meurthe & Moselle

Re: Cartouche HECTOR HRX

Message par ZamZam »

Bonjour,
merci beaucoup pour ces infos. :D
Je vais analyser plus précisément ce qui a été fait sur l'HectorDuino et je vais pouvoir me replonger sur cette émulation de cartouche.
Jean-Luc
Répondre