Aplicacions meves de MSX

Vaig aprendre a programar en Basic, a una activitat extraescolar del meu col.legi de primària (a l'escola ARCE) durant l'últim parell d'anys amb Juan Carlos, un professor que venia del Salvador Batlle.

Més tard em vaig comprar un ordinador MSX (un Hit Bit de Sony 501P (Sony HB-501P)) i, junt a un amic, vam explorar les possibilitats de la màquina, passant tardes senceres teclejant programes que venien escrits en paper a algunes revistes de MSX de l'època.

El següent pas, tras recollir el guant del meu professor de matemàtiques, va ser aprendre a programar en llenguatje ensamblador del MSX (processador Z-80).


En aquest lloc web, vull compartir algunes de les millors aplicacions que vaig programar a aquella època en format .cas:

  • Flauta: Un programa per a un concurs del meu institut de secundària (I.B. Gabriel Ferrater), quan estava a primer de BUP (en BASIC)
  • Diseña: Un dissenyador gràfic, per a disenyar els gràfics dels jocs que anava a programar més endavant (en Assembler Z-80)
  • Zodia: Un joc de naus, amb scroll vertical inclós. (en Assembler Z-80)
  • Habla: Una aplicació per a convertir text a veu per a espanyol. (Combinació d'Assembler Z-80 i BASIC)
  • Tetris: La meva versió del conegut joc del Tetris (en Assembler Z-80
  • Ristu: Llavor del que havia d'haver estat un joc de laberints, inspirat en The Maze of Galious de Konami. Em vaig quedar sense memòria ... (en Assembler Z-80)
  • També comparteixo els codis font de les aplis en Assembler, junt a l'ensamblador de Hisoft qeu vaig comprar al seu dia i que ara comparteixo entre els .cas de la descàrrega (no tots funcionen)


També compartiré algunes modificacions que he fet sobre l'aplicació de línia de comandes wav2cas, programada per Vincent van Dam

Ara també hi ha la funció opcional d'escriure el senyal processat pel wav2cas a un csv, entre d'altres noves funcions.

Compartiré també una sèrie de scripts complementaris per a treballar amb .cas, o amb els nous .csv de les mostres del senyal de wav2cas:

  • histogram.py: Script per a obtenir els valors de l'histograma de les mostres.
  • split_msx_tapes_into_singular_files.py: Divideix els .cas en .cas amb arxius individuals. Funciona amb els tipus d'arxiu del casdir, mes els arxius font en asm (ensamblador de hisoft).
  • extract_msx_sources.py: Permet extreure un .txt amb cada arxiu font d'un .cas (ascii i asm). No funciona molt bé, però pot ser un inici

Flauta (1987)

Veure video

Dissenyador gràfic (1989)

Veure video

Zodia (1987-1989)

Veure video

Sintetitzador (1991)

Veure video

Tetris (1992)

Veure video

Parla (1991)

Veure video

Ristu (1990-1992)

Veure video

Sessió con l'ensamblador

Veure video

Descripció dels programes

image
image

El programa Flauta, va nèixer per a participar a un concurs de software del meu institut de secundària (I.B. Gabriel Ferrater), quan anava a primer de BUP

Volia ser una aplicació de repàs de la posició dels dits per a tocar cadascunad e les notes amb la flauta.

El programa és una excusa per a mostrar una interfície d'usuari en mode gràfic.

Pots veure un video del programa funcionant Video de demostració

image
image

La idea del dissenyador gràfic (Diseña) era tenir una eina per a poder dissenyar en condicions els gràfics dels jocs que anava a programar més endavant.

Està programat en Assembler Z-80.

La vaig programar en dos mesos intensius de treball.

És el programa més amortitzat dels que vaig programar, gràcies a la seva utilitat i a les vegades que el vaig fer anar.

Amb ell es podien dissenyar tant pantalles de presentació, com els sprites o els personatges dels jocs.

Pots veure un video del programa funcionant Video de demostració


També hi ha un video que mostra les millors pantalles i gràfics que vaig dissenyar amb ell: Video de les millors pantalles

image
image

Programé el juego de naves Zodia inspirado en los juegos de naves con scroll de Konami.

Està programat en Assembler Z-80.

Està dedicat al meu professor de matemmàtiqiues (J. R. M. - José Ramón Molina), per haver-me suggerit la idea d'aprendre ensamblador.

El joc està en SCREEN 1, amb gràfics més lleugers que els de SCREEN 2.


Per a fer-se una idea de com eren els coses ...

Evidentment, en algun moment s'havia d'imprimir el marcador acosseguit pel jugador ...

Els números eren o bé els equivalents a uint8, o a uint16

Per al marcador, vaig escollir el tipus uint16 (no podia sobrepassar el valor 65535)

Per a imprimir el dígits, s'haviai de passar el número a Base-10, cosa que jo feia dividint per 10 pautalinament, prenent els mòduls i els quocients.

Però ... el Z-80 no tenia cap instrucció en Assembler per a multiplicar ni per a dividir !! I ara quèe ?

Doncs fàcil ... dividim, fent N vegades la resta del divisor sobre el dividend, i anem incrementant en quocient mentres el resultat no desbordi ...

Què cutre!

Doncs així eren les coses ...


Hi ha un video que mostra el scroll complet: (con algunos errorcitos): Video del scroll complet


Pots veure un video del programa funcionant Video de demostració

image

Després d'haver acabat l'institut, vaig voler provar de nou les meves habilitats programant en llenguatge ensamblador.

L'objectiu era programar un sintetitzador, adaptar al xip de so del MSX (a tres veus, i aplicant efectes de reverberació (canviant ràpidament (manualment) la freqüència de la emesa per a cada nota polsada), i apagant la nota quan es deisaba de polsar la tecla.)

Es mantenia el record de l'estat de tres tecles del sintetitzador posades a l'hora (les tres veus del xip).

També vaig voler fer ús de les freqüències associades a cada nota, que fent una cerca vaig trobar hardcodejades a una zona de la ROM del MSX.

Per a fer aquesta búsqueda, vaig procedir simplement coneixent la freqüència de la nota LA (diapasó, 400 Hz, i aplicant un factor de l'arrel dotze de 2 (2 ^ (1/12)), (una octava, dotze semitons)).

Y llavors, buscant els elements correlatius al a ROM, amb números de tipus uint16.


Pots veure un video del programa funcionant Video de demostració

image

A l'estiu entre COU i primer de Teleco (1991), vaig estar treballant intensivament de cambrer al Bar Argente's de Salou.

Anava i tornava en autobús, i a la volta, abans de tornar a casa, em passava per un saló de jocs recreatius per a fer unes partides al fabulós joc del Tetris ...

Després de més de 60 partides al joc, em vaig convertir en un expert, i m'encatava trobar aquest joc quan el destí em protava per casualitat a algun lloc al que hi havia màquines recreatives.


L'any 1992, em vaig decidir a programar la meva versió del Tetris, en Assembler Z-80 i en el temps rècord de tres dies.

En aquella època ja havia flirtejat una miqueta amb la digitaliltzació de senyals acústics (desde la cinta del MSX), i a la pantalla d'espera del joc, s'emet una canció per l'altaveu (l'emulador openMSX emula perfectament aquest detall).


Pots veure un video del programa funcionant Video de demostració

image

No recordo quan, vaig trobar la possibilitat de digitalitzar sons des de la cinta del MSX.

Però sí que recordo que no sabia ni a quina freqüència mostrejava ..., simplement posava un bucle de retard entre mostra i mostra per a la digitalització, i el mateix bucle de retard per a la reproducció per l'altaveu.

Vaig trobar que quan aquest retard era massa gran, el so no es reproduïa bé. Més tard vaig conèixer, per la teoria del mostreig, que aquest efecte era el conegut aliasing.


D'una sèrie de televisió que m'agradava, vaig treure la idea de que un ordinardor pogués "pronunciar" una frase escollida per l'usuari.

Així que amb la nova joguina de la digitalització, em vaig proposar d'obtenir tots els fonemes digitalitzant la meva pròpia veu.

El següent pas seria recòrrer les lletres d'una frase, i separar-la en fonemes, i emetre cada fonema de manera correlativa.

Jaaa, una mica cutre ... Però no donava per a més ...

Vaig programar les regles de la fonètica espanyola, a una aplicació d'Assembler Z-80, amb la interacció amb l'usuari preguntant la frase en BASIC.


Amb l'emulador openMSX es pot emular perfectament l'execució d'aquest programa.


Pots veure un video del programa funcionant Video de demostració

image

Buenooo, després de passar moltes hores al The Maze of Galious, em vaig proposar programar un joc de laberints inspirat en ell, i amb un aspecte visual molt similar (amb les meves limitacions).

El programa era de nou en Assembler Z-80.

Vaig crear les pantalles (a una matriu de 14 x 12 pantalles) basades en blocs de 4x4 caracters que es combinaben a mode de puzzle.

Així doncs, una pantalla ocupaba 5 x 8 = 40 bytes, encara que s'havia d'afegir una ocupació de memòria fixa per a definir els blocs de 4 x 4.


He rescatat diferents implementacions per a moure el personatge pel món, encara que la més complerta ('PERFEC'), no la vaig poder fer anar a l'emulador.

Crec que aix+p tçe a veure amb que el codi font en assember ocupava massa, i entrava en conflicte amb la zona de dades del BASIC, i l'ensamblador, en aquestes condicions, es negava a ensamblar el programa.

Recordo que al seu dia vaig haver de fer el truc de pujar la zona de memòria del BASIC mes amunt (amb uns pokes meravellosos que ja no recordo).

I sense ells, dons no hi ha manera de fer anar aquesta implementació (encara que aquest codi font sí que es va extreure bé al .cas).


Pots veure un video del programa funcionant Video de demostració

image

L'ensamblador és una peça bàcia a la programació en Assembler Z-80.

Vaig comprar el devpack de hisoft, i el vaig amortitzar al màxim, fent un ús intensiu d'ell.

També hi havia un monitor, però aquest mai el vaig saber fer anar ...


Al video pots veure un exemple de sessió amb l'ensamblador Video de demostració

Videos

Descàrregues