Mes applications MSX

J'ai appris à programmer en Basic lors d'une activité extrascolaire à mon école primaire (ARCE) au cours des deux dernières années avec Juan Carlos, un enseignant venu de Salvador Batlle.

Plus tard, j'ai acheté un ordinateur MSX (un Sony Hit Bit 501P (Sony HB-501P)) et, avec un ami, nous avons exploré les possibilités de la machine, en passant des après-midi entiers à taper des programmes qui sont venus écrit sur papier dans certains magazines MSX de l'époque.

L'étape suivante, après avoir relevé le défi de mon professeur de mathématiques, était d'apprendre à programmer en langage d'assemblage MSX (processeur Z-80).


Sur ce site, j'ai l'intention de partager quelques-unes des meilleures applications que j'ai programmées à l'époque au format.cas:

  • Flûte: Un programme pour un concours à mon école secondaire (IB Gabriel Ferrater), quand j'étais en première année de BUP (en BASIC).
  • Design: Un graphiste, pour concevoir les graphismes des jeux qu'il allait programmer à l'avenir (dans Assembler Z-80).
  • Zodia: Un jeu de vaisseau spatial, avec défilement vertical inclus (dans Assembler Z-80).
  • Habla: Une application de synthèse vocale pour l'espagnol. (Une combinaison de Z-80 Assembler et BASIC).
  • Tetris: Ma version du jeu populaire Tetris. (dans Assembler Z-80).
  • Ristu: La graine de ce qui était censé être un jeu de labyrinthe, inspiré par Le labyrinthe de Galious de Konami. J'ai manqué de mémoire... (dans Assembler Z-80).
  • Je partage également les codes sources des applications dans Assembler, ainsi que l'assembleur Hisoft que j'ai acheté dans la journée, et que je partage parmi les fichiers.cas dans le téléchargement (pas tous fonctionnent).


Je vais également partager quelques modifications que j'ai apportées à l'application d'interface en ligne de commande wav2cas, programmée par Vincent van Dam.

Il existe maintenant une fonction optionnelle pour vider le signal traité par wav2cas dans un csv, entre autres nouvelles fonctionnalités.

Je partagerai également une série de scripts complémentaires pour travailler avec.cas, ou avec le nouveau.csv des échantillons de signaux wav2cas :

  • histogram.py : Script pour obtenir des valeurs d'histogramme à partir d'échantillons.
  • .
  • split_msx_tapes_into_singular_files.py : Divise les fichiers.cas en fichiers.cas contenant des fichiers individuels. Gère les types de fichiers casdir, ainsi que les fichiers sources asm (HiSoft Assembler).
  • .
  • extract_msx_sources.py : Il vous permet d'extraire un fichier.txt avec chaque fichier source à partir d'un fichier.cas (ascii et asm). Cela ne fonctionne pas très bien, mais cela peut être un début.
  • .

La Flûte noire (1987)

Regarder vdeo

Designer graphique (1989)

Regarder vdeo

Zodia (1987-1989)

Regarder vdeo

Synthétiseur (1991)

Regarder vdeo

L'homme aux poings (1992)

Regarder vdeo

L'homme qui parle (1991)

Regarder vdeo

Ristu (1990-1992)

Regarder vdeo

Session avec l'assembleur

Regarder vdeo

Description du programme

image
image

Le programme Flauta a été créé pour participer à un concours de logiciels à mon école secondaire (IB Gabriel Ferrater), quand j'étais en première année de lycée.

Il est destiné à être une application pour examiner la position du doigt pour jouer chaque note sur une flûte.

Le programme est une excuse pour afficher une interface utilisateur en mode graphique.

Vous pouvez voir une vidéo du programme de travail Vidéo de démonstration

image
image

L’idée du graphiste (Disea) était d’avoir un outil pour pouvoir concevoir correctement les graphismes des jeux qu’il allait programmer à l’avenir.

Il est programmé dans l'Assembleur Z-80.

J'ai fini de le programmer après deux mois de développement intensif.

C'est le programme le plus rentable que j'ai programmé, grâce à son utilité et au nombre de fois que je l'ai utilisé.

Avec elle, vous pouvez concevoir des écrans de présentation, des sprites et des personnages de jeu.

Vous pouvez voir une vidéo du programme de travail Vidéo de démonstration


Il y a aussi une démo montrant les meilleures captures d'écran et graphiques que j'ai conçus avec: Vidéo des meilleurs écrans

image
image

J'ai programmé le jeu de vaisseau spatial Zodia inspiré par les jeux de vaisseau spatial défilants de Konami.

Il est programmé dans l'Assembleur Z-80.

Il est dédié à mon professeur de mathématiques (J. R. M. - José Ramn Molina), pour m'avoir donné l'idée d'apprendre assembleur.

Le jeu est sur SCREEN 1, avec des graphismes plus légers que SCREEN 2.


Pour vous donner une idée de ce que c'était...

Évidemment, à un moment donné, le score obtenu par le joueur a dû être imprimé...

Les nombres étaient soit équivalents à uint8 ou uint16

Pour le tableau de bord, j'ai choisi le type uint16 (il ne pouvait pas dépasser 65535)

Pour imprimer les chiffres, le nombre devait être converti en Base-10, ce que j'ai fait en divisant par 10 n fois, en prenant les modules et les quotients.

Mais... le Z-80 n'avait pas d'instructions dans Assembler pour se multiplier ou se diviser!! Et maintenant quoi?

Eh bien, c'est facile... nous divisons, soustrayant le diviseur du dividende N fois, et nous augmentons le quotient tant que le résultat ne déborde pas...

Comme c'est collant!

Eh bien, c'était comme ça que les choses se passaient...


Il y a une vidéo qui montre le défilement complet (avec quelques erreurs): Déroulement complet de la vidéo


Vous pouvez voir une vidéo du programme de travail Vidéo de démonstration

image

Après avoir terminé mes études secondaires, je voulais réessayer mes compétences en programmation en langage assembleur.

L'objectif était de programmer un synthétiseur adapté à la puce sonore MSX (à trois voix, et d'appliquer des effets de réverbération (changeant rapidement (manuellement) la fréquence émise pour chaque note pressée), et d'éteindre la note lorsque la touche a été relâchée.

L'état de trois touches de synthétiseur pressées en même temps (les trois voix de la puce) a été rappelé.

Je voulais également utiliser les fréquences associées à chaque note, que j'ai trouvées codées en dur dans une zone de la ROM MSX lors d'une recherche.

Pour effectuer la recherche, j'ai procédé, connaissant simplement la fréquence de la note A ((fourchette de réglage) 400 Hz, et appliquant un facteur racine-douze de 2 (2 (1/12)) (une octave, douze demi-tons)).

Et puis la recherche des éléments correspondants dans la ROM, avec uint16 numéros de type.


Vous pouvez voir une vidéo du programme de travail Vidéo de démonstration

image

Pendant l'été, entre ma dernière année d'études secondaires et ma première année de Teleco (1991), j'ai travaillé intensivement comme serveur au Bar Argente à Salou.

J'ai pris le bus d'avant en arrière, et sur le chemin du retour, avant de rentrer chez moi, je m'arrêtais devant une arcade pour jouer à quelques jeux du fabuleux Tetris...

Après plus de 60 jeux de ce jeu, je suis devenu un expert, et j'ai adoré trouver ce jeu quand le destin m'a emmené par hasard à un endroit où il y avait des machines d'arcade.


En 1992, j'ai décidé de programmer ma version de Tetris, dans Assembler Z-80 et dans le temps record de trois jours.

A cette époque, j'avais déjà un peu flirté avec la numérisation des sons (à partir de la bande MSX), et sur l'écran de veille du jeu, une chanson est jouée par le haut-parleur (l'émulateur openMSX émule parfaitement ce détail).


Vous pouvez voir une vidéo du programme de travail Vidéo de démonstration

image

Je ne me souviens pas quand je suis tombé sur la possibilité de numériser les sons de la bande MSX.

Mais je me souviens que je ne savais même pas à quelle fréquence j'étais échantillonné... je viens de mettre une boucle de retard entre les échantillons pour la numérisation, et la même boucle de retard pour la lecture par le haut-parleur.

J'ai constaté que lorsque ce retard était trop important, le son ne se reproduisait pas bien. Plus tard, j'ai appris par la théorie de l'échantillonnage que cet effet était connu sous le nom d'aliasing.


D'une série télévisée que j'ai aimée, j'ai eu l'idée qu'un ordinateur pouvait "prononcer" une phrase choisie par l'utilisateur.

Ainsi, avec le nouveau jouet de la numérisation, j’ai entrepris d’obtenir tous les phonèmes en numérisant ma propre voix.

L’étape suivante serait de parcourir les lettres d’une phrase, de la séparer en phonèmes et d’émettre chaque phonème à son tour.

Ouais, un peu collant... mais ça n'a pas donné plus...

J'ai programmé les règles de la phonétique espagnole dans une application Assembler Z-80, avec l'interaction avec l'utilisateur en demandant la phrase en BASIC.


Avec l'émulateur openMSX, vous pouvez parfaitement émuler l'exécution de ce petit programme.


Vous pouvez voir une vidéo du programme de travail Vidéo de démonstration

image

Eh bien, après avoir passé d'innombrables heures à jouer au Labyrinthe de Galious, j'ai décidé de créer un jeu de labyrinthe inspiré de celui-ci, et avec une apparence visuelle très similaire (avec mes limites).

Le programme était à nouveau dans Assembler Z-80.

J'ai créé les écrans (dans une matrice d'écran 14 x 12) basés sur des blocs de caractères 4x4 qui ont été combinés comme un puzzle.

Ainsi, un écran a occupé 5 x 8 40 octets, bien qu'une occupation de mémoire fixe ait dû être ajoutée pour définir les 4 x 4 blocs.


J'ai sauvé plusieurs implémentations pour déplacer le personnage à travers le monde, bien que la plus complète ("PERFEC"), je n'ai pas pu le faire fonctionner dans l'émulateur.

Je pense que cela a à voir avec le fait que le code source dans l'assemblage a pris trop de place, et en conflit avec les données de base de la zone, et l'assembleur, dans ces conditions, a refusé d'assembler le programme.

Je me souviens qu'un jour, j'ai dû faire l'astuce de déplacer la zone de mémoire BASIC plus haut (avec quelques pokes merveilleux dont je ne me souviens plus).

Et sans eux, il n'y a aucun moyen de faire fonctionner cette implémentation (bien que ce code source ait été correctement extrait dans le.cas).


Vous pouvez voir une vidéo du programme de travail Vidéo de démonstration

image

L'assembleur est un élément fondamental du développement de l'assembleur Z-80.

J'ai acheté le devpack chez hisoft et j'en ai tiré le meilleur parti, en l'utilisant de manière intensive.

Il y avait aussi un moniteur, mais je n'ai jamais su comment le faire fonctionner...


Dans la vidéo, vous pouvez voir un exemple d'une session avec l'assembleur Vidéo de démonstration

Vidéos

Téléchargements