Cross Assembleur pour PC 1500

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

Répondre
Avatar de l’utilisateur
Alainza
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 158
Inscription : 19 sept. 2009 06:59
Localisation : Seattle

Cross Assembleur pour PC 1500

Message par Alainza » 29 déc. 2013 19:46

Hello,
hier matin, j'ai fait un peu de recherches sur Internet pour essayer de trouver un compilateur C pour le PC 1500....
Evidemment, je suis bredouille : la meilleure piste que j'ai trouvée est SDCC. En creusant un peu, j'ai vu que lui et un autre "petit" compilateur (zcc096) s'appuyaient sur la même famille de cross assembleurs assez générique ASXXXX.
Du coup, la première étape est donc d'adapter ce cross-assembleur au LH 5801

=> Voilà une première version (exécutable Win32 compilé avec VS 2013, sources ajoutés à ASXXXX pour LH 5801 et exemples asm).

Elle a forcément encore des bugs et je dois aussi rationaliser le code de génération que j'ai écrit essentiellement opcode par opcode plutôt que par famille (et nettoyer des trucs qui traînent de la version Z80).
En tout cas, je peux assembler les exemples donnés dans le PC 1500 Technical Reference avec assez peu de modifications.

=> il y a des bizarreries / incohérences dans ce manuel: si vous avez d'autres documentations sur l'assembleur du LH 5801... basées sur les mêmes mnémoniques, je suis preneur (je vais essayer entre temps de m'appuyer sur les docs de l'OP pour mieux comprendre certains opcodes)
=> je suis aussi preneur de tous exemples de code assembleur pour PC 1500 pour chasser les bugs car je n'ai pour l'instant validé que les exemples de code du Technical Reference.

A suivre...
_______________________________________________________________
Tandy PC2, TI 59, Sharp PC G850VS, Apple ][... et bien d'autres

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

Re: Cross Assembleur pour PC 1500

Message par cgh » 29 déc. 2013 20:24

Les mnemoniques "officielles" du LH5801 ont ete publiees par SHARP dans son TRM. Apres, elles ont ete plus ou moins reprises par La Revue du SHARPENTIER (a partir du numero 7 et il y a un dossier a partir du numero 8 page 12) et peut-etre LIST. Les mnemoniques Z80-like restant les plus utilisees; d'autant plus que certains logiciels etaient deja disponibles: PC-MACRO, XMON, l'ASSEMBLEUR de Micro-Systemes.
Il y a eu de memoire un seul logiciel publie utilisant ces mnemoniques: SOFT-MONITOR. J'ai vu des pubs et des essais, ainsi qu'une demo en 1985 dans mon ecole d'inge. Mais, il ne m'interessait pas car il ne possedait pas de debugger LM. D'ailleurs, si quelqu'un possede une image et le manuel de SOFT-MONITOR, je serais preneur...
En plus du TRM, tu as une serie d'articles publies pour le PC-2.

Je possede plein de trucs en assembleur, mais c'est en Z80-like. Ceci-dit, on peut traduire... ou developper un script shell pour convertir.

Je comptais (mais je n'ai pas eu le temps pendant les fetes) terminer mon petit assembleur qui sera inclus dans les LHTOOLS. Ceci dit, il faudrait que j'integre a l'occasion la capacite d'utiliser (desassembleur et assembleur) les mnemoniques officielles.
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

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

Re: Cross Assembleur pour PC 1500

Message par cgh » 29 déc. 2013 20:33

Alainza a écrit :hier matin, j'ai fait un peu de recherches sur Internet pour essayer de trouver un compilateur C pour le PC 1500....
Evidemment, je suis bredouille : la meilleure piste que j'ai trouvée est SDCC. En creusant un peu, j'ai vu que lui et un autre "petit" compilateur (zcc096) s'appuyaient sur la même famille de cross assembleurs assez générique ASXXXX.
Pour un compilateur C, Remy nous avait montre l'integration d'un compilateur C dans PockEmul. Bon, ce n'etait pas pour le LH5801, mais, cela devrait etre possible de l'integrer...
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 de l’utilisateur
phe78
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 764
Inscription : 22 avr. 2011 19:08
Localisation : Var

Re: Cross Assembleur pour PC 1500

Message par phe78 » 29 déc. 2013 21:06

@cgh, j'ai commence a gratter mes premieres lignes du kernel Forth :)
quelques feedbacks / suggestions d'amelioration (ou alors, c;est un defaut de comprehension de ma part..):
- serait-il possible d'inclure a la fin du fichier LST la table des symboles
- toujours dans le LST, il serait bien de conserver les lignes de commentaires (les lignes commencant par ";" sont ignorees)
- les noms de fichiers et flags sur la ligne de commande sont case sensitive,je pense qu'il serait plus simple d eles passer en caps (bon, c'est un detail....)
Par ailleurs, je cherche souvent la correspondance entre Z80 et LH, pour les mnemoniques c'est OK et d'ailleurs beaucoup plus simple que les mnemoniques Sharp, par contre je ne trouve pas a quoi correspondent les registres MN ? BC, DE, HL correspondent resp a X,Y,U mais a quoi correspond MN ? l'instruction INC MN est bien reconnue par lhasm et genere 0x74 que je n'est pas trouve dans la tech ref (INC BC / DE / HL generent bien 0x44 / 54/ 64 comme INC x / Y / U )
A+

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

Re: Cross Assembleur pour PC 1500

Message par cgh » 29 déc. 2013 21:40

phe78 a écrit :@cgh, j'ai commence a gratter mes premieres lignes du kernel Forth :)
quelques feedbacks / suggestions d'amelioration (ou alors, c;est un defaut de comprehension de ma part..):
Merci pour ces retours :-D
phe78 a écrit :- serait-il possible d'inclure a la fin du fichier LST la table des symboles
Il faut ajouter .SYMBOLS: a la fin du source, apres le .END. Cela permet de generer un .LST "a la carte".
phe78 a écrit :- toujours dans le LST, il serait bien de conserver les lignes de commentaires (les lignes commencant par ";" sont ignorees)
J'y avait pense, mais j'avais peur que cela surcharge trop le .LST. Bon, je note, quitte ajouter une option pour forcer ou enlever les commentaires du .LST.
phe78 a écrit :- les noms de fichiers et flags sur la ligne de commande sont case sensitive,je pense qu'il serait plus simple d eles passer en caps (bon, c'est un detail....)
Unix quand tu nous tiens... :-D Les OS Linux et NetBSD (et *BSD) sont case-sensitives cote FS. Donc pour les noms de fichiers ce sera pas possible. Pour les options/flags, personnellement, je prefere la "philo Unix" avec des flags en 1 lettre et case sensitive. Aujourd'hui, on voit apparaitre les options longues (--mon-option). Mais cela reste case sensitive... A voir, mais pas d'avis favorable...
phe78 a écrit :Par ailleurs, je cherche souvent la correspondance entre Z80 et LH, pour les mnemoniques c'est OK et d'ailleurs beaucoup plus simple que les mnemoniques Sharp, par contre je ne trouve pas a quoi correspondent les registres MN ? BC, DE, HL correspondent resp a X,Y,U mais a quoi correspond MN ? l'instruction INC MN est bien reconnue par lhasm et genere 0x74 que je n'est pas trouve dans la tech ref (INC BC / DE / HL generent bien 0x44 / 54/ 64 comme INC x / Y / U )
Le registre MN est un "registre de scratch" non documente mais decrit dans un OI, un TRACE ou un SHARPENTIER et defini comme suit:
- M contient le dernier poids fort accede,
- N vaut toujours 0.
Mais SHARP ne l'a jamais officiellement reconnu...
D'ailleur la macro CLA (code &34) equivaut a LDA N et met A a 0 en une instruction. De meme pour CPA N, ADC N, AND N, etc...
La pseudo-instruction NOP est codee &38, c'est a dire STA M, qui bien sur ne fera rien.
Ce 4eme registre explique les colonnes &3x et &7x qui sont manquantes.
Quand on execute des POP MN et PUSH MN sous un debuggeur pas a pas, ainsi que des LD BC,MN, on voit bien ce qui se passe:
- LD BC,MN laisse B inchange mais met 00 en C.
- PUSH MN va mettre en pile &ss00 avec ss le poids fort de l'adresse fixee dans SP.
- POP MN se contentera de "poper" dans le vide et peut etre tres interessante...
Dernière édition par cgh le 29 déc. 2013 21:45, édité 1 fois.
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 de l’utilisateur
phe78
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 764
Inscription : 22 avr. 2011 19:08
Localisation : Var

Re: Cross Assembleur pour PC 1500

Message par phe78 » 29 déc. 2013 21:45

Merci Christophe pour le retour rapide ! J'avais l'espoir que MN corresponde a l'equivalent d'un IX ou IY du Z80... bon, je ferai sans...
semaine prochaine en voyage, donc pas trop de temps pour continuer, je m'y remets en revenant...
A+

Avatar de l’utilisateur
Alainza
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 158
Inscription : 19 sept. 2009 06:59
Localisation : Seattle

Re: Cross Assembleur pour PC 1500

Message par Alainza » 29 déc. 2013 22:26

cgh a écrit :Les mnemoniques "officielles" du LH5801 ont ete publiees par SHARP dans son TRM. Apres, elles ont ete plus ou moins reprises par La Revue du SHARPENTIER (a partir du numero 7 et il y a un dossier a partir du numero 8 page 12) et peut-etre LIST. Les mnemoniques Z80-like restant les plus utilisees; d'autant plus que certains logiciels etaient deja disponibles: PC-MACRO, XMON, l'ASSEMBLEUR de Micro-Systemes.
Il y a eu de memoire un seul logiciel publie utilisant ces mnemoniques: SOFT-MONITOR. J'ai vu des pubs et des essais, ainsi qu'une demo en 1985 dans mon ecole d'inge. Mais, il ne m'interessait pas car il ne possedait pas de debugger LM. D'ailleurs, si quelqu'un possede une image et le manuel de SOFT-MONITOR, je serais preneur...
En plus du TRM, tu as une serie d'articles publies pour le PC-2.

Je possede plein de trucs en assembleur, mais c'est en Z80-like. Ceci-dit, on peut traduire... ou developper un script shell pour convertir.

Je comptais (mais je n'ai pas eu le temps pendant les fetes) terminer mon petit assembleur qui sera inclus dans les LHTOOLS. Ceci dit, il faudrait que j'integre a l'occasion la capacite d'utiliser (desassembleur et assembleur) les mnemoniques officielles.
Merci pour ta réponse détaillée. Effectivement, quand j'avais fait un peu d'assembleur dans le temps sur mon PC2, j'avais utilisé les mnémoniques Z80; je vais regarder les revues citées pour essayer de résoudre les ambiguïtés du TRM et finir ce truc. Ensuite, on verra: refaire l'exercice avec les autres mnémoniques ne prendrait probablement pas très longtemps.
_______________________________________________________________
Tandy PC2, TI 59, Sharp PC G850VS, Apple ][... et bien d'autres

Avatar de l’utilisateur
Rom1500
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 701
Inscription : 29 nov. 2013 17:24
Localisation : Pas très loin de Lyon
Contact :

Re: Cross Assembleur pour PC 1500

Message par Rom1500 » 30 déc. 2013 12:10

Ah, ça bouge !
J'avais jeté un coup d'oeil a ce type d'assembleur à l'époque où je m'intéressais au Intel 8096BH.
Je regarde ton adaptation et te ferai remonter bugs et remarques.
Pour les exemples de code tu peux t'inspirer des ROMs du 1500 avec mon outil Rom1500
(Il y a un petit fichier texte pour l'utilisation mais n'hésites pas à m'envoyer un MP en cas de question)
A adapter si besoin pour les mnémoniques. Je travaille sur une version pour celles utilisées par CGH.
Toutes les infos : http://www.pc-1500.info
PC-1500+CE-150 : EU PC1500, PC1500A / JP PC1500, PC1500D, PC1501 / HU PTA4000, PTA4000+16 / US TRS80 PC2 / BR PC-1500RP, PC-1500RP2 / CN PC-1500, PC-1500A, Nanfeng PC-1500A
PC-1600 : PC-1600K V2, CE-1600M, CE-1604L, CE-515P, module 32Ko, module 512Ko
Extensions en boite : CE-150/151/152/153/154/155/156/157/158/159/160/161/162E/163 sans boite

Avatar de l’utilisateur
Alainza
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 158
Inscription : 19 sept. 2009 06:59
Localisation : Seattle

Re: Cross Assembleur pour PC 1500

Message par Alainza » 30 déc. 2013 12:25

Rom1500 a écrit :Ah, ça bouge !
J'avais jeté un coup d'oeil a ce type d'assembleur à l'époque où je m'intéressais au Intel 8096BH.
Je regarde ton adaptation et te ferai remonter bugs et remarques.
Pour les exemples de code tu peux t'inspirer des ROMs du 1500 avec mon outil Rom1500
(Il y a un petit fichier texte pour l'utilisation mais n'hésites pas à m'envoyer un MP en cas de question)
A adapter si besoin pour les mnémoniques. Je travaille sur une version pour celles utilisées par CGH.
J'ai corrigé pas mal de trucs ce matin => je poste une nouvelle version d'ici quelques minutes.
Merci de ton aide !
_______________________________________________________________
Tandy PC2, TI 59, Sharp PC G850VS, Apple ][... et bien d'autres

Avatar de l’utilisateur
Alainza
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 158
Inscription : 19 sept. 2009 06:59
Localisation : Seattle

Re: Cross Assembleur pour PC 1500

Message par Alainza » 30 déc. 2013 12:49

Nouvelle version disponible
J'ai corrigé un certain nombre de bugs, nettoyé les adressages des registres 16 bits (c'est là que le manuel semble incohérent... mais c'est peut-être lié à la qualité du scan) et ajouté le retour des nombres de cycles des instructions (quand celui-ci est fixe).
Dans ce .zip, il y a aussi un petit programme C générant le programme Basic pokant le programme binaire: ça m'a parmis de vérifier une (petite) partie de mon code à travers la chaîne suivante:
  • (PC) Assembleur => fichier .rel contenant le binaire
  • (PC) Génération du programme basic à partir du .rel
  • (CE 158) Transfert du programme Basic
  • (PC 1500) Exécution du programme Basic pour installer le binaire
_______________________________________________________________
Tandy PC2, TI 59, Sharp PC G850VS, Apple ][... et bien d'autres

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

Re: Cross Assembleur pour PC 1500

Message par cgh » 30 déc. 2013 20:52

Alainza a écrit :Nouvelle version disponible
Merci ! Je viens juste d'essayer. Super :-D
Il faut changer le nom getline() en xxgetline() dans shared/asxxxx.h shared/aslex.c et shared/asmain.c pour que cela compile et soit utilisable sous Linux. En effet, la glibc (stdio) contient elle aussi une fonction getline() avec un prototype different.
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 de l’utilisateur
Alainza
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 158
Inscription : 19 sept. 2009 06:59
Localisation : Seattle

Re: Cross Assembleur pour PC 1500

Message par Alainza » 31 déc. 2013 09:47

cgh a écrit :
Alainza a écrit :Nouvelle version disponible
Merci ! Je viens juste d'essayer. Super :-D
Merci ! Version avec les mnémoniques Z80-like en cours...
Il faut changer le nom getline() en xxgetline() dans shared/asxxxx.h shared/aslex.c et shared/asmain.c pour que cela compile et soit utilisable sous Linux. En effet, la glibc (stdio) contient elle aussi une fonction getline() avec un prototype different.
intéressant... Je n'ai pas regardé quelles étaient les plates-formes supportées par la distribution initiale et ces fichiers en font partie (i.e. je n'y ai pas touché car ils sont identiques pour tous les processeurs supportés).
Peut-être un feedback à faire à l'auteur du package initial ? Je lui enverrai un mail et les sources de mes adaptations une fois que cela sera un peu stabilisé. Il en fera ce qu'il voudra.
Si Linux n'est pas dans ses plates-formes et ne demande que ce changement, je suppose qu'il devrait le prendre en compte !
_______________________________________________________________
Tandy PC2, TI 59, Sharp PC G850VS, Apple ][... et bien d'autres

Avatar de l’utilisateur
Alainza
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 158
Inscription : 19 sept. 2009 06:59
Localisation : Seattle

Re: Cross Assembleur pour PC 1500

Message par Alainza » 01 janv. 2014 13:31

Nouvelle version disponible: http://www.zanchetta.net/pc1500/Misc/as ... 1_1200.zip

Celle-ci supporte les mnémonique Z80-like, il suffit d'ajouter la directive .z80 dans le fichier ASM.

Bon, il y a forcément encore pas mal de bugs (le comptage des cycles a été bâclé dans cette version) mais les petits exemples traduits manuellement donnent les mêmes fichiers .rel et je corrigerai petit à petit au fur et à mesure que j'avancerai dans la (re)lecture du bouquin de Rodney Zaks.

Pour finir, j'ai créé un repository sur github pour ce développement: https://github.com/alainza/aslh5801, ce qui ouvre la porte aux contributions.
_______________________________________________________________
Tandy PC2, TI 59, Sharp PC G850VS, Apple ][... et bien d'autres

remy
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2086
Inscription : 13 mars 2006 16:39
Localisation : Issy
Contact :

Re: Cross Assembleur pour PC 1500

Message par remy » 13 mars 2014 15:48

salut.
Es tu allé jusqu'au bout de la chaîne avec un SDCC fonctionnel sur LH-5801 ?
Cela m’intéresserai grandement de pouvoir intégrer cela dans PockEmul.
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

Répondre

Revenir vers « Tous les Pockets »