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 du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5230
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 »

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 : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Extraction ROM du lbc-1100

Message par remy »

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
Available now on the Google Play Store and the Apple Store
razzmoket
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 420
Enregistré le : 17 mai 2007 13:21
Localisation : montbeliard (25)

Re: Extraction ROM du lbc-1100

Message par razzmoket »

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 : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Extraction ROM du lbc-1100

Message par remy »

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
Available now on the Google Play Store and the Apple Store
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5230
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 »

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
Modifié en dernier par bernouilli92 le 09 mai 2013 15:14, modifié 2 fois.
HP, Casio, Sharp, Psion, quelques TI et divers autres
jxano
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2362
Enregistré le : 16 févr. 2008 23:34
Localisation : Paris 20ème

Re: Extraction ROM du lbc-1100

Message par jxano »

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 du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5230
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 »

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 : 2142
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Extraction ROM du lbc-1100

Message par cgh »

Et bien ca, c'est du beau boulot ! Bravo a tous :-D
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
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 du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5230
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 »

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 : 2218
Enregistré le : 13 mars 2006 15:39
Localisation : Issy
Contact :

Re: Extraction ROM du lbc-1100

Message par remy »

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
Available now on the Google Play Store and the Apple Store
Avatar du membre
bernouilli92
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 5230
Enregistré le : 21 nov. 2012 13:03
Localisation : Ile de France

Re: Extraction ROM du lbc-1100

Message par bernouilli92 »

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

Retourner vers « Tous les Pockets »