ROM Alice 32 : Désassemblage et commentaires

Les bouquins, les scans, les pdf ou les liens qui vont bien... ici c'est la bibliothèque.

Modérateurs : Papy.G, fneck, Carl

Seilebost
Messages : 42
Inscription : 27 juil. 2015 23:24

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Seilebost »

Bonjour.

Voici deux sources :
La v0.4 correspond à la version précédente V0.13 compilable via dasm (le fichier généré s'appelle res) :
dasm rom_ALICE32_V0.3_CLEAN_ALL.asm -f3 -ores -v2

La v0.5 correspond à la v0.4 où les constantes ont été transformées en constantes symboliques ainsi que les commentaires et corrections ont été apportées.
Compilation via dasm (le fichier généré s'appelle res)
dasm rom_ALICE32_V0.5_CLEAN_ALL.asm -f3 -ores -v2

La v0.5 représente la version la plus aboutie du désassemblage de la rom de l'ALICE 32 avant sa modification

En chantier : une version v0.9 (et oui un gros saut) qui va apporter diverses améliorations :
1 - Routine CHRGET plus rapide
2 - Transformation des divisions par un nombre en multiplication par l'inverse du même nombre : les fonctions SINUS et LOG en bénéficieront grandement
3 - Modification de la routine de création des tableaux pour plus de rapidité
4 - Remplacement des jsr+rts par des jmp si nécessaire
5 - Amélioration des appels à CHRGET ou CHRGOT (actuellement c'est effectué par jsr.w CHRGET au leu de jsr CHRGET)
6 - etc.

Il y a beaucoup d'optimisations à faire donc vous aurez droit aux versions 0.9x :-)

En parallèle, j'ai constaté que quelqu'un (voir le blog "A BitBanger's Blog") avait déjà commencé à optimiser la rom du TANDY MC-10 (donc l'ALICE premier du nom) et donc vous trouverez des grandes similitudes avec ... mes améliorations. De toute façon, ces améliorations sont déjà évoquées pour les versions Z80 et 6502 du BASIC MICROSOFT

Olivier.
Pièces jointes
rom_ALICE32_V0.5_CLEAN_ALL.asm.zip
(132.28 Kio) Téléchargé 196 fois
rom_ALICE32_V0.4_CLEAN_ALL.asm.zip
(130.31 Kio) Téléchargé 180 fois
Avatar de l’utilisateur
Franckb78
Messages : 133
Inscription : 12 janv. 2020 20:55
Contact :

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Franckb78 »

Daniel a écrit : 08 janv. 2020 13:11 Commenter la ROM d'un ordinateur est un travail difficile, long et ingrat.
Il a été réalisé par SEILEBOST, bien connu dans le monde Oric, mais également passionné par l'Alice.
Je me souviens que ce taf à été fait pour Oric vers1984, du temps de la revue "Micr'Oric" puis "Théoric". Cela a été publié sous forme de livre si je ne m'abuse. A cette époque j'ai passé l'été à Boissy Saint Léger en 'stage' chez l'importateur (Mr Taïeb) à ouvrir et ouvrir des dizaines d'Oric pour ajouter le transistor permettant de passer en secam et de temps en temps changer des bank mémoires HS.
Avatar de l’utilisateur
Patrice
Messages : 1516
Inscription : 14 janv. 2008 10:42
Localisation : https://www.ville-saintes.fr/
Contact :

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Patrice »

Merci Seilebost, pour ton super boulot d'analyse et d'améliorations ainsi que ces deux nouvelles mises à notre disposition.
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Daniel »

Merci pour le partage !
C'est une motivation supplémentaire pour ressortir nos Alice 32, et ça explique en particulier l'activité du fil de discussion sur leur réparation :wink:
Daniel
L'obstacle augmente mon ardeur.
Seilebost
Messages : 42
Inscription : 27 juil. 2015 23:24

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Seilebost »

Bonjour.

Voici une nouvelle fournée :

- V0.60 correspond à quelques corrections mineures de la V0.5. La V0.60 correspond à une rom "stock" donc sans optimisations

- V0.90 correspond à la V0.6 + le début des améliorations et optimisations : à la louche 6% d'optimisations sans aucune modification en profondeur !
C'est à dire :
1 - remplacements de jsr+rts par jmp
2 - remplacement des accès longs en accès directs pour certaines variables situés dans les adresses mémoires < à 0x0100
3 - remplacement des appels vectorisés par les appels directs aux routines : j'ai considéré que les adresses vectorisées sont à utiliser par les programmes externes et non par le BASIC lui même.
Les modifications sont visualisables dans la zone commentaire par ; Oxx avec xx : le numéro de l'optimisation appliquée . Plusieurs optimisations peuvent s'appliquer au même endroit.

Seilebost.
Pièces jointes
rom_ALICE32_V0.9_CLEAN_ALL.asm.zip
(133.45 Kio) Téléchargé 183 fois
rom_ALICE32_V0.6_CLEAN_ALL.asm.zip
(132.25 Kio) Téléchargé 183 fois
Seilebost
Messages : 42
Inscription : 27 juil. 2015 23:24

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Seilebost »

Bonjour.

J'ai changé aussi la numérotation des versions. 0.5 --> 0.50

Seilebost.
Seilebost
Messages : 42
Inscription : 27 juil. 2015 23:24

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Seilebost »

Bonjour.

Je livre une version 0.90b car la version 0.9 contenait une coquille au niveau de l'étiquette ASS_MAIN_ENTRY.

La prochaine version 0.91 sera une évolution de la 0.9 avec la récupération des octets gagnés suite aux optimisations (actuellement les octets gagnés sont remplacés par des nop).

Seilebost.
Pièces jointes
rom_ALICE32_V0.90b_CLEAN_ALL.asm.zip
(133.43 Kio) Téléchargé 193 fois
Avatar de l’utilisateur
Patrice
Messages : 1516
Inscription : 14 janv. 2008 10:42
Localisation : https://www.ville-saintes.fr/
Contact :

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Patrice »

Bonjour,

Je viens de lire la dernière version 0.90b mise à notre disposition et j'y ai relevé une coquille concernant la zone $B000 à $BFFF dont le volume
est 4096 octets et non 1024 octets comme indiqué!
Erreur Zone $B000 à $BFFF 4096 octets et non 1024 octets version 0.90b.PNG
Erreur Zone $B000 à $BFFF 4096 octets et non 1024 octets version 0.90b.PNG (6.93 Kio) Consulté 8795 fois
128 octets pour la zone mémoire de $0000 à $007F.
Erreur_2 Zone_Mémoire_version_0.90b_Zone_$0000-$007F.PNG
Erreur_2 Zone_Mémoire_version_0.90b_Zone_$0000-$007F.PNG (11.24 Kio) Consulté 8794 fois
et inversion des 2 commentaires concernant la définition vidéo pour le registre TGS.
Erreur_3_version_0.90b_Variables_pour_le_registre_TGS.PNG
Erreur_3_version_0.90b_Variables_pour_le_registre_TGS.PNG (5.28 Kio) Consulté 8794 fois
Seilebost
Messages : 42
Inscription : 27 juil. 2015 23:24

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Seilebost »

Bonjour.

Merci pour vos retours.
Je vais reporter les remarques dans les prochaines versions des fichiers.

Cordialement.

Olivier.
Seilebost
Messages : 42
Inscription : 27 juil. 2015 23:24

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Seilebost »

Bonjour.

Voici une fournée de 3 fichiers sources avant les congés :

- V1.0 : rom_ALICE32_V0.70_CLEAN_ALL.asm : ce fichier est le désassemblage de la rom sans modification.
La rom générée par un assembleur est l'équivalent de la rom initiale. Cette version sert de référence pour les autres fichiers.
Ce source va évoluer au gré des découvertes de mes erreurs ou bien de vos retours.

- V1.1B : rom_ALICE32_V0.91_CLEAN_ALL.asm : ce fichier est la dernière version optimisée du source originale. Elle n'apporte pas de nouvelles
fonctionnalités. Les seules modifications sont des corrections de bon sens (remplacement de jsr + rts par jmp, etc.).
La rom générée par un assembleur n'est donc plus l'équivalent à la rom initiale. Elle est compatible avec les sources et les programmes
du commerce (je l'espère). Elle a comme version V1.1B. Le source de cette rom sera modifiée au gré des découvertes de mes erreurs
ou bien de vos retours. Ces modifications concerneront surtout les commentaires erronés.

- V2.0 : rom_ALICE32_V0.93_CLEAN_ALL_WIP.asm : ce fichier casse la compatibilité avec les sources (=listing) et les programmes binaires (=lecture de programme existant sur K7). La version de la rom est donc la 2.00. Elle introduit des incompatibilités car :
- ajout de nouvelle commande basic (HIRES,TEXT,LORES,CORLOR,PAPER,INK,DRAW,FILL,CURSET,CURMOV,ASS,RESUME,EDIT,CARG,PLOT) qui provoquent des changements des numéros de token alloués. Par conséquent, les anciens programmes sauvés avec la version V1.0 ne seront plus visibles correctement à partir de la V2.xx.
- récupération, réduction en 2 endroits de tout l'espace mémoire possible. Par conséquent, les programmes commerciaux qui utilisaient des points d'entrées de la rom sont susceptibles de ne plus fonctionner. Seuls certains points d'entrées ont été gardés pour que la rom puisse fonctionner avec l'émulateur DCALICE
- la fonction INKEY$ ne fonctionne plus du fait de la présence de la nouvelle commande INK.

Présentation des nouvelles commandes
source d'inspiration : ORIC ATMOS, VG5000 et d'ALICE quand même ...
- HIRES : ORIC : équivalent à terme à CLS80 et CLS81 en mode programme / STATUT : WIP
- TEXT : ORIC : équivalent à terme à CLS40 / STATUT : WIP
- LORES : ORIC : équivalent à terme à CLS32 / STATUT : WIP
- COLOR : ORIC : équivalent à terme à SET* C1,C2,C3 / STATUT : WIP
- INK : ORIC : change la couleur de l'encre / STATUT : WIP
- PAPER : ORIC : change la couleur du fond d'écran / STATUT : WIP
- FILL : ORIC : remplit une zone rectangulaire avec une couleur / STATUT : A DEVELOPPER
- DRAW : ORIC : trace un trait / STATUT : A DEVELOPPER
- CURSET : ORIC : équivalent à SET X,Y,c d'ALICE / STATUT : WIP
- CURMOV : ORIC : positionne le curseur relativement à sa dernière position / STATUT : WIP
- PLOT : ORIC : écrit une chaine de caractère à la position X,Y / STATUT : WIP
- CARG : VG5000 : équivalent à SETG afin de définir un caractère en mode quadrichrome / STATUT : WIP
- EDIT : ALICE : remplace la commande * 10 pour éditer la ligne 10 / STATUT : TERMINE
- ASS : ALICE : remplace la commande & pour lancer l'assembleur / STATUT : TERMINE
- RESUME : ALICE : remplace la commande % pour revenir dans l'assembleur / STATUT : TERMINE

La version V2.00 de la rom est fonctionnelle (à part la commande basic INKEY$). Ainsi les nouvelles commandes
fonctionnent mais la plupart ne font pas de vérification de validité des paramètres ou bien ne fonctionnent pas
dans tous les modes graphiques.
Au vu de ce qui reste comme mémoire (environ 320 octets) et du travail à faire pour finaliser les commandes au statut WIP
et des deux commandes à développer, il va falloir sacrifier l'assembleur pour terminer le travail.

Remarques techniques :
1 - le MC6801 ne se prête pas du tout à l'exercice de la recopie de zone mémoire car pour aller très vite,
il faut utiliser le pointeur de pile S (comme source ou cible) et interdire les interruptions ==> Ah le mode indirect du 6502 fait du bien ... (et son deuxième registre index Y aussi).
2 - Le VDP EF9345 est une plaie pour les programmeurs ...

Les prochaines étapes seront :
V2.1 : fichier V0.94 (pour septembre 2020)
- finalisation du codage des nouvelles commandes BASIC au statut WIP
- correction du problème du conflit entre INKEY$ et INK
- Nettoyage du source pour supprimer toutes les commentaires inutiles
- Statuer sur le double emploi des commandes SET et CURSET
- Statuer sur le double emploi des commandes COLOR et PAPER et INK

V2.2 : fichier V0.95 (à partir d'octobre 2020)
- Développement des nouvelles commandes BASIC DRAW et FILL
- Écrire une démo pour montrer les possibilités offertes par les nouvelles commandes
- etc.

V2.3 : fichier V0.96 (pas de planification)
- Ajout de la notation hexadécimale
- Ajout des variables de type INTEGER
- Autres ...

Ces nouvelles rom nécessitent une version spécifique de DCALICE : au 03/07/2020, demande en cours pour la mise à disposition par son créateur (Daniel COULOM)

Seilebost
Pièces jointes
rom_ALICE32_V0.93_CLEAN_ALL_WIP.zip
(140.8 Kio) Téléchargé 174 fois
rom_ALICE32_V0.91_CLEAN_ALL.zip
(134.58 Kio) Téléchargé 172 fois
rom_ALICE32_V0.70_CLEAN_ALL.zip
(132.74 Kio) Téléchargé 176 fois
Seilebost
Messages : 42
Inscription : 27 juil. 2015 23:24

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Seilebost »

Bonjour à tous.

Voici de nouvelles versions :

ROM V1.0 : fichier V0.70 V2 : c'est une mise à jour des sources de la rom originale avec les dernières découvertes durant le développement de la V0.94.

ROM V2.0 : fichier V0.94 WIP V7 : c'est une évolution de la rom V2.0 (fichier V0.93) : HIRES, TEXT, LORES, PLOT, RESUME, ASS, PAPER, INK, CURSET, CURMOV, EDIT, FILL.Ces commandes sont toujours au statut "WIP" c'est à dire toujours en développement.
La commande BASIC INKEY$ a été remplacé par GETA$ qui a le même rôle. Car le basic n'arrive pas à faire la différence entre INK et INKEY$. Au lieu d'ajouter une rustine au BASIC pour détecter ce cas-là, je l'ai renommé !

Le développement des commandes DRAW et CARG va être effectué durant le dernier trimestre 2020 et premier trimestre 2021.

La prochaine évolution de la ROM V2.0 (fichier V0.95) contiendra :
- suppression des hooks : ils seront rétablis plus tard pour permettre des extensions sans modifier la rom
- optimisation de la commande DIM
- optimisation de la commande SIN (sinus) : remplacer la division par une constante par une multiplication par 1/constante
- développement de CARG et DRAW.

Ces nouvelles rom V2.0 nécessitent une version spécifique de DCALICE : les version datées du 04/08/2020 et suivantes sont à utiliser pour profiter pleinement de la rom V2.0.

Seilebost.
Pièces jointes
rom_ALICE32_V0.94_CLEAN_ALL_WIP_V7.asm.zip
(134.36 Kio) Téléchargé 165 fois
rom_ALICE32_V0.70_CLEAN_ALL_V2.asm.zip
(133.05 Kio) Téléchargé 163 fois
Seilebost
Messages : 42
Inscription : 27 juil. 2015 23:24

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Seilebost »

Bonjour.

Dernier ajout : la version de l'émulateur DCALICE datée du 04/08/2020 permet de corriger un bug trouvé dans la gestion de l'EF9345 . Ce bug a été trouvé durant le développement de la commande BASIC FILL de la rom BASIC V2.0.
Ce bug existe aussi dans l'émulateur MAME : à ma connaissance, personne a remonté ou corrigé ce bug.

Seilebost.
Notator
Messages : 1286
Inscription : 09 août 2015 20:13

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Notator »

Ce sujet est très intéressant, et merci d'être si assidu à le tenir à jour. :)

Cependant, un passage m'interroge :
Seilebost a écrit : 03 juil. 2020 20:41 Remarques techniques :
1 - le MC6801 ne se prête pas du tout à l'exercice de la recopie de zone mémoire car pour aller très vite,
il faut utiliser le pointeur de pile S (comme source ou cible) et interdire les interruptions ==> Ah le mode indirect du 6502 fait du bien ... (et son deuxième registre index Y aussi).
Pourquoi ces mentions des 6801 et 6502, alors que l'Alice 32 est équipé d'un 6803 ? :?
Dernière modification par Notator le 08 oct. 2020 08:09, modifié 1 fois.
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Patrick
Messages : 2019
Inscription : 16 mai 2009 09:30
Localisation : Clermont-Ferrand

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Patrick »

Parce que ce sont des variantes du même microcontrôleur.
Patrick
Notator
Messages : 1286
Inscription : 09 août 2015 20:13

Re: ROM Alice 32 : Désassemblage et commentaires

Message par Notator »

C'est bon, je crois avoir trouvé : c'est parce que le 6801 est très proche du 6803, et qu'il est mieux documenté... :)
Notator est le nom d'un programme séquenceur Midi et notation musicale pour Atari ST(e) (puis Mac).
Répondre