Extraction ROM du lbc-1100

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Avatar de l’utilisateur
bernouilli92
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4498
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 » 03 mai 2013 11:18

Voici la suite :
https://www.dropbox.com/s/mmteay6po267h ... 0-7FFF.bin

J'ai remplacé le fichier précédent qui couvrait la zone 7000-79FF par celui là qui couvre les 4 Ko de la zone 0x7000.

Je vais également faire le dump de la zone 0000-0FFF histoire de la comparer avec celle faite par razzmoket, on ne sait jamais, il y a peut-être plusieurs version de ROM ?

Sinon, j'ai aussi dumpé les 64 premiers octets de chaque zone de 4Ko, et effectivement il n'y a rien d'autre que ce qui a déjà été signalé par razzmoket :

Code : Tout sélectionner

0000: 54 e5 02 00 dd 00 00 00 48 20 62 00 00 00 00 00 
0010: 64 9b 04 48 20 48 1e 70 1f 94 ff 48 3e 48 2e 48 
0020: 0e 73 48 1e 70 1f 90 ff f2 46 4f 55 4e 44 3a 20 
0030: 00 53 4b 49 50 3a 20 00 2b 2c 78 2c 2b 01 b2 a7 
1000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
1010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
1020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
1030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
2000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
2010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
2020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
2030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
3000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
3010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
3020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
3030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
4000: 54 e0 43 54 59 46 54 44 45 54 c7 55 54 54 45 54 
4010: 73 45 54 51 45 54 77 45 54 79 45 54 7b 45 54 7d 
4020: 45 54 4b 5b 70 2e 41 fc 70 3e 3f fc 70 0e 3d fc 
4030: 70 3f 3d fc 70 2f 3d fc 23 23 70 2e 3d fc 2d 3c
5000: 00 6d 03 48 1c c1 ac 48 3f 70 3e 2a f9 34 fd 4b
5010: bd c2 48 3f 14 3a 6b 00 6a 00 0b 70 79 45 fc 0a
5020: 1b 70 69 45 fc 1a 33 b4 67 00 08 60 ea 08 32 67
5030: 22 e8 41 48 1c f1 66 8c 48 1c c1 ea 60 fa 00 60
6000: 08 32 0a 66 04 48 1a 08 48 2f 48 2f 1a 0c 41 00
6010: 1c 32 c3 b6 48 2f 0c 33 44 09 61 57 08 da 0d 51
6020: 00 1d 0a 67 00 d2 2b 66 2d 48 1c c5 77 fe c9 69
6030: 08 46 04 60 c4 1c 52 00 48 3f 69 01 72 00 48 1c
7000: 2e 48 3e 48 0e b9 48 0e 67 01 44 40 7b 48 0f 48
7010: 0f 48 3f 48 2f 41 00 08 69 01 70 79 e6 fb 48 2e
7020: 48 1a 69 01 69 00 48 0e 70 69 ea fb 67 00 d0 77
7030: 01 ca 69 ff 70 79 ea fb 0a 77 00 52 48 0f c8 48
8000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
8010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
8020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
8030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
9000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
9010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
9020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
9030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
a000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
a010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
a020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
a030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
b000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
b010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
b020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
b030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
c000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
c010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
c020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
c030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
d000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
d010: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
d020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
d030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
e000: 00 18 e0 0a 00 44 f1 0c 00 00 3a 46 f1 44 f3 0f 
e010: 40 3a 8d 20 0d 1b e1 00 2f e0 0f 00 44 f1 0c 00 
e020: 10 3a 46 f1 44 f3 0f 40 3a 8d 20 0d 1b e1 00 46 
e030: e0 14 00 44 f1 0c 00 20 3a 46 f1 44 f3 0f 40 3a 
f000: aa 65 00 ff 00 ff fb b0 2f e0 00 ff 00 ff 8f 80 
f010: cf 40 00 ff 00 ff ff 40 df 94 00 ff 00 ff ef 20 
f020: af 10 00 ff 00 ff bf 00 7f 80 00 ff 00 ff 7f 00 
f030: ff 51 00 ff 00 ff af 00 cf 52 00 ff 00 ff ef 00 
HP, Casio, Sharp, Psion, quelques TI et divers autres

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1785
Inscription : 13 mars 2006 16:39
Contact :

Re: Extraction ROM du lbc-1100

Message par remy » 03 mai 2013 11:37

ok, ça tourne. Il me reste plus qu'à trouver les bons port I/O pour l'écran et le clavier. C'est semble t il complètement différent du PC-2001.
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android

razzmoket
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 580
Inscription : 17 mai 2007 13:21
Localisation : montbeliard (25)

Re: Extraction ROM du lbc-1100

Message par razzmoket » 03 mai 2013 11:46

bernouilli92 a écrit :
Je vais également faire le dump de la zone 0000-0FFF histoire de la comparer avec celle faite par razzmoket, on ne sait jamais, il y a peut-être plusieurs version de ROM ?
bonne idée
le numero de série du mien est 013045

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1785
Inscription : 13 mars 2006 16:39
Contact :

Re: Extraction ROM du lbc-1100

Message par remy » 03 mai 2013 13:52

Bon, ben c'est pas évident. Les puces LCD utilisées ont deux modes de fonctionnement pour communiquer avec le CPU, parallele ou série.
Le NEC PC-2001 fonctionne en mode // alors que le LBC-1100 est en mode série. Je n'avais pas émuler ce mode là et il y a donc un peu de boulot pour comprendre comment ça marche.
en attendant j'arrive à afficher le boot. next step, la gestion du clavier.
Je pense qu'on peut sans beaucoup de risque conclure que le DUMP est OK. BRAVO à vous deux.
Image
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android

Avatar de l’utilisateur
bernouilli92
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4498
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 » 03 mai 2013 16:03

razzmoket a écrit :
bernouilli92 a écrit :
Je vais également faire le dump de la zone 0000-0FFF histoire de la comparer avec celle faite par razzmoket, on ne sait jamais, il y a peut-être plusieurs version de ROM ?
bonne idée
le numero de série du mien est 013045
J'ai fait le dump 0000-0FFF et c'est exactement le même que le tien. Nos deux machines ont la même ROM. Mon numéro de série est 036062
remy a écrit :Bon, ben c'est pas évident. Les puces LCD utilisées ont deux modes de fonctionnement pour communiquer avec le CPU, parallele ou série.
Le NEC PC-2001 fonctionne en mode // alors que le LBC-1100 est en mode série. Je n'avais pas émuler ce mode là et il y a donc un peu de boulot pour comprendre comment ça marche.
en attendant j'arrive à afficher le boot. next step, la gestion du clavier.
Je pense qu'on peut sans beaucoup de risque conclure que le DUMP est OK. BRAVO à vous deux.
Excellent, je sens que dans pas très longtemps il sera fonctionnel ;-)



J'ai également dumpé la zone E000-FFFF même si elle a moins d'intérêt que la ROM, cela peut toujours servir.
On arrive par exemple avec des POKE à modifier les commandes des touches de fonctions. Je ne sais pas comment il faut faire pour assigner à une touche de fonction une commande avec un retour chariot à la fin. Avec un POKE j'y arrive mais il doit y avoir une méthode "normale"
Voici la RAM :
https://www.dropbox.com/s/scu796jnfr85k ... 0-FFFF.bin

Je referai le dump des autres zones avec le checksum juste pour être sûr sûr. Quoique jusqu'à présent, les dumps que j'ai fait après avoir corrigé le problème du checksum n'ont montré aucun erreur.
J'ai trouvé ce qui clochait dans mon code en basic, je faisait un XOR de la valeur A après l'avoir transmise, or la procédure de transmission modifie la valeur de A et une fois que la valeur était transmise, A valait 0.

Et pour finir, voici le code que j'ai utilisé.
Sur le LBC-1100 :

Code : Tout sélectionner

10 D=&HE0000:F=&H0FFF:GOSUB 1000
100 PRINT "FINI";
999 END
1000 MOTOR 0
1010 C=0
1020 LOCATE 0: PRINT RIGHT$("000"+HEX$(D),4);
1030 A=D MOD 256:GOSUB 5000
1040 A=INT(D/256):GOSUB 5000
1050 FOR I=0 TO 15
1060 A=PEEK(D+I):C=C XOR A:GOSUB 5000
1070 NEXT
1080 A=C:GOSUB 5000
1090 D=D+16
1100 IF D<F THEN 1010
1110 RETURN
5000 MOTOR 1:MOTOR 0:MOTOR 1:MOTOR 0:MOTOR 1:MOTOR 0
5010 FOR M=1 TO 8
5020 IF A AND 1 THEN 5040
5030 MOTOR 1:MOTOR 0:GOTO 5050
5040 MOTOR 1:MOTOR 0:MOTOR 1:MOTOR 0
5050 A=INT(A/2)
5060 NEXT
5070 RETURN
Le transfert se fait par groupe de 19 octets : 2 octets pour l'adresse, 16 octets de données et un octet de checksum
Le codage utilisé est : 3 impulsions pour un start-bit, 2 impulsions pour un bit à 1 et 1 impulsion pour un bit à 0

Coté PC: J'ai connecté le câble sur l'entrée ligne de la carte son et j'ai utilisé Audacity pour faire l'enregistrement.
Afin d'économiser un peu la mémoire et la place disque, j'ai utilisé 1000 Hz comme fréquence d’échantillonnage (en 16 bits), c'est suffisant pour ce qu'il y a à faire.
L'export en WAV doit obligatoirement se faire en "Microsoft PCM 8 bits".

Une fois l'export fini, j'obtiens un fichier WAV d'environ 10 Mo pour un dump de 4 Ko (durée du dump : 1h30).

Pour traiter ce fichier WAV et extraire les données sous un format utile, j'ai utilisé ce script bash :

Code : Tout sélectionner

#!/bin/bash
file=$(basename $1)
fn="${file%%.*}"
tail -c+45 $1 | xxd -ps -c2 | cut -c1-1 | sed 's/[0-e]/0/' | awk -f lbc-convert.awk > ${fn}.txt
cat ${fn}.txt | cut -c7-54 | xxd -ps -r > ${fn}.bin
Ce script utilise le fichier lbc-convert.awk que voici :

Code : Tout sélectionner

BEGIN{dist=-1; distref=0; nbF=0; val=0; nbcar=0;}
/f/{ 
	if (dist>0) {
		if (distref==0) {
			distref=1.3*dist;
			nbF=1; 
		}
		nbF++;
	}
	dist=0; 
}
/0/{
	if (distref && dist>distref && nbF>0) {
		if (nbF==3) {val=0; bits=0}
		if (nbF==2) {val+=2**bits; bits++} 
		if (nbF==1) {bits++};
		if (bits==8) {
			nbcar++;
			if (nbcar==1) {checksum=0; addr=val}
			if (nbcar==2) {addr+=lshift(val,8); printf "%04x: ",addr;}
			if (nbcar>=3 && nbcar<=18) {printf "%02x ",val; checksum=xor(checksum,val);}
			if (nbcar>18) {
				if (checksum!=val) 
					printf "- CHEKSUM ERROR calc=%02x read=%02x",checksum,val;
				print ""; 
				nbcar=0;
			}
		};
		nbF=0;
	}
	if (dist>=0) 
		dist++;
}
Exemple d'utilisation :

Code : Tout sélectionner

./lbc-convert.sh lbc-0000-0FFF.wav
Cela produit deux fichiers : lbc-0000-0FFF.txt et lbc-0000-0FFF.bin
Le fichier .bin n'a bien sûr de sens que si les zones dumpées sont contiguës.

Voici une archive qui regroupe tous les fichiers pour ceux que cela intéresse :
https://www.dropbox.com/s/3xolwy28djpo4 ... actROM.rar
Dernière édition par bernouilli92 le 09 mai 2013 15:14, édité 2 fois.
HP, Casio, Sharp, Psion, quelques TI et divers autres

jxano
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 2765
Inscription : 17 févr. 2008 00:34
Localisation : Paris 20ème

Re: Extraction ROM du lbc-1100

Message par jxano » 03 mai 2013 16:32

bernouilli92 a écrit :On arrive par exemple avec des POKE à modifier les commandes des touches de fonctions. Je ne sais pas comment il faut faire pour assigner à une touche de fonction une commande avec un retour chariot à la fin. Avec un POKE j'y arrive mais il doit y avoir une méthode "normale"
Avec la commande KEY comme suit :

Code : Tout sélectionner

KEY 1,"RUN"+CHR$(13)
Le premier argument est un numéro de 1 à 10, selon la touche à affecter.
Programmeur abscons.

Avatar de l’utilisateur
bernouilli92
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4498
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 » 03 mai 2013 16:50

jxano a écrit :
bernouilli92 a écrit :On arrive par exemple avec des POKE à modifier les commandes des touches de fonctions. Je ne sais pas comment il faut faire pour assigner à une touche de fonction une commande avec un retour chariot à la fin. Avec un POKE j'y arrive mais il doit y avoir une méthode "normale"
Avec la commande KEY comme suit :

Code : Tout sélectionner

KEY 1,"RUN"+CHR$(13)
Le premier argument est un numéro de 1 à 10, selon la touche à affecter.
Ben oui, c'était évident. Mais j'ai perdu pas mal de temps à chercher la combinaison de touches qui me permettrait d'obtenir le fameux ^M.
Merci jxano.
HP, Casio, Sharp, Psion, quelques TI et divers autres

cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2341
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .
Contact :

Re: Extraction ROM du lbc-1100

Message par cgh » 03 mai 2013 20:03

Et bien ca, c'est du beau boulot ! Bravo a tous :-D
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque

Avatar de l’utilisateur
bernouilli92
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4498
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 » 24 mai 2013 23:31

J'avais oublié de le préciser, mais j'avais refait le dump de la ROM avec cette fois un checksum fonctionnel.
Le résultat est identique au dump précédent, il n'y avait dont pas d'erreur dans les fichiers utilisés par remy.

J'en ai profité pour mettre à jour l'archive des fichiers :
https://www.dropbox.com/s/3xolwy28djpo4 ... actROM.rar

Par ailleurs, en examinant la ROM avec un éditeur hexadécimal, je me rends compte qu'on ne retrouve pas les mots-clef du basic, il y a en a quelques uns mais très peu. Où sont-ils cachés?
Remy, si tu as une explication, je suis preneur.
HP, Casio, Sharp, Psion, quelques TI et divers autres

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1785
Inscription : 13 mars 2006 16:39
Contact :

Re: Extraction ROM du lbc-1100

Message par remy » 24 mai 2013 23:47

ils sont dans la plage commençant en &41F0
PockEmul, Emulateur de pocket Sharp, Canon, Casio, HP, TI, NEC, Panasonic, Sanco, Seiko, General, National, ....
sur Windows, Linux, OS X et Android

Avatar de l’utilisateur
bernouilli92
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 4498
Inscription : 21 nov. 2012 14:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 » 26 mai 2013 00:18

Oui, je vois. Mais ils n'apparaissent pas tout à fait en ascii, le dernier caractère d'une commande a le bit de poid fort à 1, mais parfois le premier caractère également n'est pas correct.
HP, Casio, Sharp, Psion, quelques TI et divers autres

Répondre

Revenir vers « Tous les Pockets »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 10 invités