Bonne Année 2019 !

Bonjour à tous. Cette année, j'espère pouvoir faire aboutir un projet autour du VG5000µ que j'ai commencé il y a longtemps et que j'avance petit pas par petit pas.

En attendant, je vous souhaite :

10 B$="AAHGGGGGCB00A@GGGGCBCB00998898=<10"
20 LB=LEN(B$)
30 FOR I=1 TO LB STEP 2
40 A=ASC(MID$(B$,I,1))+ASC(MID$(B$,I+1,1))-64
50 PRINT CHR$(A);
60 NEXT I

À essayer sur votre ancienne machine sous BASIC préférée. Ça devrait être portable sur à peu près toutes les machines avec interpréteur BASIC et des capactités par trop limitées sur les chaînes de caractères (adieu ZX81...). Sur certains, il faudra ajouter LET aux lignes 10, 20 et 40 pour les assignations de variable.

Lire la suite →

VG5000µ, ajouter des instructions au BASIC ?

Il y a quelques temps, un message sur le forum Config.cfg demandait s'il était simple ou même possible d'ajouter des instructions supplémentaires à la ROM d'un VG5000µ. C'est une question que je me posais aussi, avec dans l'idée d'ajouter des instructions graphiques utilisant l'implémentation des articles précédents].

J'ai donc continué à étudier la ROM (que je commence à bien connaître maintenant) à la recherche d'une méthode. Et on va voir que ça n'est pas gagné.

Le parseur

Lorsque la touche RET du clavier est appuyée, il se passe plusieurs choses. Tout d'abord, un caractère NUL (valeur 0) est placé dans le buffer d'entrée à l'emplacement du dernier caractère qui n'est pas un espace (adresses $3c4a à $3c56). Le RET à la fin de cette fonction ramène hors de la boucle principal du traitement interactif.

Après un traitement de la protection de programmes qui n'est pas le sujet ici, une …

Lire la suite →

VG5000µ, Schémas de principe

Le schéma de principe scanné depuis la documentation de maintenance trouvée sur le site My VG5000 et reconstitué du VG5000µ m'a souvent aidé à comprendre le fonctionnement de cette machine. Et je remercie l'auteur de ce travail !

Pour contribuer à mon tour à la documentation VG5000µ, j'ai refait les schémas de la platine principale et de la platine k7 au propre, afin d'en augmenter la lisibilité.

Quelques commentaires :

  • j'ai ajouté en précision les broches non branchées du Z80 et de l'EF9345. Cela montre rapidement les choix hardware du VG5000µ qui ne seront pas contournables sans modification du matériel.

  • j'ai utilisé les nomenclatures des datasheets des composants, ce qui change un peu la nomenclature originale.

  • j'ai gardé la disposition générale du schéma, pour ne pas perdre les habitués, mais il peut y avoir quelques changements dans le détail, lorsque je pensais pouvoir améliorer la lisibilité.

  • j'ai modifié les marquages des …

Lire la suite →

VG5000µ, SetPoint en C

Après cette implémentation en assembleur Z80 d'une fonction setpoint qui affiche, de manière assez basique, un point à l'écran, je me pose la question d'utiliser un langage de plus haut niveau... mais pas trop.

J'ai une assez longue expérience du C et la question que je me pose est : qu'est-ce que ça donne de programmer en C pour générer du code sur Z80.

Programmer en C a quelques avantages a priori : c'est nettement plus concis et lisible que de l'assembleur, j'y suis plus habitué et c'est portable sur de nombreuses plateformes. C'est le cas d'autres langages, mais le choix naturel pour moi puisque écrire du C m'est habituel. En tout cas bien plus habituel que d'écrire directement de l'assembleur Z80.

Premier essai

Voici le code C d'un premier essai :

#include <stdint.h> // Afin d'utiliser les types standards

void setpoint(uint16_t x, uint8_t y) // Définition de la fonction
                                     // En entrée …
Lire la suite →

VG5000µ, SetPoint en ASM, afficher le point

À présent que l'on sait diviser par 3, reprenons l'affichage d'un point à l'écran. Pour rappel.

En entrée, nous avons : des coordonnées X et Y, comprises entre 0 et 79 pour X et 0 et 74 pour Y.

En effet de bord, c'est-à-dire en modification de l'état de la machine, nous voulons : le point correspondant à l'écran qui prend la couleur d'encre définie.

Pour cette version, la procédure ne prendra pas d'information de couleur, je me contenterai d'utiliser la couleur d'encre 0 (noir) sur fond 6 (bleu), qui est la combinaison à l'initialisation de la machine.

Les étapes, d'après les articles précédents, sont donc :

  • À partir de X et Y, trouver les coordonnées du caractère à modifier à l'écran
  • À partir de X et Y, trouver les coordonnées à l’intérieur du caractère semi-graphique
  • À partir de coordonnées du caractère, calculer l'adresse mémoire écran correspondante
  • Récupérer les valeurs pour la …
Lire la suite →