Le mie applicazioni MSX

Ho imparato a programmare in Basic durante un'attività extrascolastica nella mia scuola elementare (ARCE) negli ultimi due anni con Juan Carlos, un insegnante che proveniva da Salvador Batlle.

Più tardi ho comprato un computer MSX (un Sony Hit Bit 501P (Sony HB-501P)) e, insieme ad un amico, abbiamo esplorato le possibilità della macchina, trascorrendo interi pomeriggi digitando programmi che venivano scritti su carta in alcune riviste MSX dell'epoca.

Il passo successivo, dopo aver raccolto la sfida dal mio insegnante di matematica, è stato quello di imparare a programmare in linguaggio di assemblaggio MSX (processore Z-80).


Su questo sito, ho intenzione di condividere alcune delle migliori applicazioni che ho programmato allora in formato.cas:

  • Flauto: Un programma per un concorso nella mia scuola secondaria (I.B. Gabriel Ferrater), quando ero nel primo anno di BUP (in BASIC).
  • Design: un graphic designer, per progettare la grafica per i giochi che avrebbe programmato in futuro (in Assemblaggio Z-80).
  • Zodia: Un gioco di astronavi, con scorrimento verticale incluso (in Assembler Z-80).
  • Habla: Un'applicazione text-to-speech per lo spagnolo. (Una combinazione di Z-80 Assembler e BASIC).
  • Tetris: La mia versione del popolare gioco Tetris. (in Assembler Z-80).
  • Ristu: Il seme di quello che doveva essere un gioco di labirinto, ispirato a The Maze of Galious di Konami. Ho esaurito la memoria... (in Assembler Z-80).
  • Condivido anche i codici sorgente delle app in Assembler, insieme all'assemblatore Hisoft che ho acquistato nel corso della giornata, e che condivido tra i file.cas nel download (non tutti funzionano).


Ho anche intenzione di condividere alcune modifiche che ho apportato all'applicazione di interfaccia a riga di comando wav2cas, programmata da Vincent van Dam.

C'è ora una funzione opzionale per scaricare il segnale elaborato da wav2cas su un csv, tra le altre nuove funzionalità.

Condividerò anche una serie di script complementari per lavorare con.cas, o con il nuovo.csv dei campioni di segnale wav2cas:

  • histogram.py : Script per ottenere valori di istogramma da campioni.
  • .
  • split_msx_tapes_into_singular_files.py : Divide i file.cas in file.cas contenenti singoli file. Gestisce i tipi di file casdir, più i file di origine asm (HiSoft Assembler).
  • .
  • estract_msx_sources.py : Permette di estrarre un file.txt con ogni file sorgente da un file.cas (ascii e asm). Non funziona molto bene, ma può essere un inizio.
  • .

L'ultima notte (1987)

Guarda vdeo

L'uomo che muore (1989)

Guarda vdeo

Zodia (1987-1989)

Guarda vdeo

(1991) L'ultimo giorno.

Guarda vdeo

(1992) L'ultimo giorno.

Guarda vdeo

L'uomo della notte (1991)

Guarda vdeo

Ristu (1990-1992)

Guarda vdeo

Sessione con l'assembler

Guarda vdeo

Descrizione del programma

image
image

Il programma Flauta è stato creato per partecipare a un concorso di software nella mia scuola secondaria (I.B. Gabriel Ferrater), quando ero al primo anno di scuola superiore.

È destinato ad essere un'applicazione per rivedere la posizione del dito per suonare ogni nota su un flauto.

Il programma è una scusa per visualizzare un'interfaccia utente in modalità grafica.

Puoi vedere un video del programma che funziona Demo video

image
image

L’idea del graphic designer (Disea) era quella di avere uno strumento per poter progettare correttamente la grafica per i giochi che avrebbe programmato in futuro.

È programmato in Assembler Z-80.

Ho finito di programmarlo dopo due mesi intensi di sviluppo.

È il programma più redditizio che abbia programmato, grazie alla sua utilità e al numero di volte che l'ho usato.

Con esso, è possibile progettare schermi di presentazione, sprite e personaggi di gioco.

Puoi vedere un video del programma che funziona Demo video


C'è anche una demo che mostra i migliori screenshot e grafica che ho progettato con esso: Video dei migliori schermi

image
image

Ho programmato il gioco delle astronavi Zodia ispirato ai giochi delle astronavi a scorrimento di Konami.

È programmato in Assembler Z-80.

È dedicato al mio insegnante di matematica (J. R. M. - José Ramn Molina), per avermi dato l'idea di imparare l'assembler.

Il gioco è su SCREEN 1, con una grafica più leggera rispetto a SCREEN 2.


Per darti un'idea di come sono state le cose...

Ovviamente, ad un certo punto il punteggio raggiunto dal giocatore doveva essere stampato...

I numeri erano equivalenti a uint8 o uint16

Per il tabellone, ho scelto il tipo uint16 (non poteva superare 65535)

Per stampare le cifre, il numero doveva essere convertito in Base-10, che ho fatto dividendo per 10 n volte, prendendo i moduli e quozienti.

Ma... lo Z-80 non aveva istruzioni in Assemblaggio per moltiplicare o dividere!! E ora?

Beh, e' facile... Dividiamo, sottraendo il divisore dal dividendo N volte, e aumentiamo il quoziente finche' il risultato non trabocca...

Che appiccicoso!

Beh, e' cosi' che andavano le cose...


C'è un video che mostra il rotolo completo (con alcuni errori): Video di scorrimento completo


Puoi vedere un video del programma che funziona Demo video

image

Dopo aver finito il liceo, volevo provare di nuovo le mie abilità di programmazione nel linguaggio di assemblaggio.

L'obiettivo era quello di programmare un sintetizzatore adattato al chip sonoro MSX (con tre voci, e applicando effetti di riverbero (cambiando rapidamente (manualmente) la frequenza emessa per ogni nota pressata), e spegnendo la nota quando la chiave è stata rilasciata.

Lo stato di tre tasti sintetizzatore premuto allo stesso tempo (le tre voci del chip) è stato ricordato.

Ho anche voluto fare uso delle frequenze associate a ogni nota, che ho trovato hardcoded in un'area della MSX ROM durante una ricerca.

Per eseguire la ricerca, ho proceduto, semplicemente conoscendo la frequenza della nota A ((forchetta di tuning) 400 Hz, e applicando un fattore radice-dodici di 2 (2 (1/12)) (una ottava, dodici semitoni)).

E poi la ricerca degli elementi corrispondenti nella ROM, con uint16 numeri di tipo.


Puoi vedere un video del programma che funziona Demo video

image

Durante l'estate tra il mio ultimo anno di scuola secondaria e il mio primo anno di Teleco (1991), ho lavorato intensamente come cameriere al Bar Argente di Salou.

Ho preso l'autobus avanti e indietro, e sulla via del ritorno, prima di tornare a casa, mi fermavo in una sala giochi per giocare a qualche gioco del favoloso Tetris...

Dopo più di 60 partite di quel gioco, sono diventato un esperto, e mi è piaciuto trovare quel gioco quando il destino mi ha portato per caso in un posto dove c'erano macchine arcade.


Nel 1992, ho deciso di programmare la mia versione di Tetris, in Assembler Z-80 e nel tempo record di tre giorni.

A quel tempo, avevo già flirtato un po 'con la digitalizzazione dei suoni (dal nastro MSX), e sullo schermo di standby del gioco, una canzone viene riprodotta attraverso l'altoparlante. (l'emulatore openMSX emula perfettamente quel dettaglio).


Puoi vedere un video del programma che funziona Demo video

image

Non ricordo quando mi sono imbattuto per la prima volta nella possibilità di digitalizzare i suoni dal nastro MSX.

Ma mi ricordo che non sapevo nemmeno a quale frequenza stavo campionando... ho solo messo un loop di ritardo tra i campioni per la digitalizzazione e lo stesso loop di ritardo per la riproduzione attraverso l'altoparlante.

Ho scoperto che quando quel ritardo era troppo grande, il suono non si riproduceva bene. Più tardi, ho imparato attraverso la teoria del campionamento che questo effetto era noto come aliasing.


Da una serie televisiva che mi è piaciuta, ho avuto l'idea che un computer potesse "pronunciare" una frase scelta dall'utente.

Quindi, con il nuovo giocattolo della digitalizzazione, ho deciso di ottenere tutti i fonemi digitalizzando la mia voce.

Il passo successivo sarebbe quello di passare attraverso le lettere di una frase, separarla in fonemi ed emettere ogni fonema a sua volta.

Si', un po' appiccicoso... ma non ha dato altro...

Ho programmato le regole della fonetica spagnola in un'applicazione Assembler Z-80, con l'interazione con l'utente chiedendo la frase in BASIC.


Con l'emulatore openMSX puoi emulare perfettamente l'esecuzione di quel piccolo programma.


Puoi vedere un video del programma che funziona Demo video

image

Bene, dopo aver trascorso innumerevoli ore a giocare a The Maze of Galious, ho deciso di creare un gioco di labirinto ispirato ad esso, e con un aspetto visivo molto simile (con i miei limiti).

Il programma era di nuovo in Assembler Z-80.

Ho creato le schermate (in una matrice di schermo 14 x 12) basate su blocchi di caratteri 4x4 che sono stati combinati come un puzzle.

Quindi, uno schermo occupava 5 x 8 40 byte, anche se un'occupazione di memoria fissa doveva essere aggiunta per definire i 4 x 4 blocchi.


Ho salvato diverse implementazioni per spostare il personaggio in tutto il mondo, anche se la più completa ('PERFEC'), non sono riuscito a farlo funzionare nell'emulatore.

Penso che abbia a che fare con il fatto che il codice sorgente in assemblaggio occupava troppo spazio, e in conflitto con i dati BASIC dell'area, e l'assemblatore, in quelle condizioni, si rifiutò di assemblare il programma.

Mi ricordo che un giorno ho dovuto fare il trucco di spostare l'area di memoria BASIC più in alto (con alcuni colpi meravigliosi che non ricordo più).

E senza di loro, non c'è modo di far funzionare l'implementazione (anche se quel codice sorgente è stato estratto correttamente nel.cas).


Puoi vedere un video del programma che funziona Demo video

image

L'assemblatore è una parte fondamentale dello sviluppo in Assembler Z-80.

Ho comprato il devpack da hisoft e ne ho sfruttato al massimo, facendone un uso intensivo.

C'era anche un monitor, ma non ho mai saputo come farlo funzionare...


Nel video potete vedere un esempio di sessione con l'assembler Demo video

Video

Scaricamenti