# MSX BASIC

L'MSX BASIC è un dialetto del linguaggio di programmazione BASIC sviluppato da Microsoft per gli home computer MSX.
Deriva dal Microsoft BASIC versione 4.5 anche se è stato influenzato dal GW-BASIC, un interprete BASIC per le macchine MS-DOS a 16 bit. L'MSX include il supporto per la gestione della grafica, dell'audio e delle periferiche collegate ai computer ed è stato sviluppato per essere flessibile ed espandibile.

## Caratteristiche

L'MSX BASIC era integrato nella ROM di tutti i computer MSX, che lo richiamavano al loro avvio se nessun altro software residente su ROM era presente sulla macchina, come una cartuccia giochi o un'interfaccia dischi: in questi casi il sistema avviava o il gioco presente sulla cartuccia oppure il sistema operativo presente sul floppy, l'MSX-DOS.
Quando l'MSX BASIC veniva avviato, la ROM del BIOS e dell'interprete BASIC veniva mappata nei primi 32 kB dello spazio indirizzi della CPU Zilog Z80 mentre i restanti 32 kB venivano mappati in RAM: di questi, erano disponibili all'utente per il programma ed i dati dai 23 ai 28 kB, a seconda della presenza o meno del controller per il disco (4 kB) e del kernel dell'MSX-DOS (5 kB).
L'ambiente di sviluppo (IDE) dell'MSX BASIC era molto simile a quello del Dartmouth BASIC del Dartmouth Time Sharing System, vale a dire un'interfaccia a riga di comando in cui inserire i comandi e le istruzioni. Se la riga immessa iniziava con un numero, veniva considerata facente parte del programma dell'utente e memorizzata in RAM; in caso contrario, era considerata un comando da eseguire immediatamente (modalità diretta). L'IDE presentava un messaggio iniziale con il contenuto di memoria libera ed in basso un promemoria dei comandi associati ai tasti funzione del computer.

## Versioni

Ogni nuova versione dei computer MSX veniva offerta con una versione aggiornata dell'MSX BASIC. Tutte le versioni erano compatibili con le precedenti e fornivano le caratteristiche necessarie all'utilizzo dell'hardware rinnovato o aggiunto presente nei nuovi computer.

### MSX BASIC 1.0/1.1/1.2

* Integrato nei computer MSX 1.0/1.1/1.2
* Dimensione dell'interprete: 16 kB
* Nessun supporto nativo ai dischi floppy: in presenza di un'unità dischi era necessario dotarsi della cartuccia di espansione "Disk BASIC" (che sottraeva 4 kB alla RAM disponibile);
* Supporto per tutte le modalità grafiche gestibili dal coprocessore video:
** Screen 0: modalità testuale 40×24 caratteri
** Screen 1: modalità testuale mista 32×24 caratteri con caratteri colorati e supporto agli sprite
** Screen 2: modalità grafica ad alta risoluzione 256×192 pixel, 16 colori
** Screen 3: modalità grafica a bassa risoluzione con blocchi grafici di 64×44 - 4×4 pixel sulla risoluzione dello Screen 2
* Pieno supporto agli sprite hardware, compresa la gestione delle collisioni tramite interrupt
* Pieno supporto per il chip audio AY-3-8910

### MSX BASIC 2.0

* Integrato negli MSX 2
* Dimensione dell'interprete: 32 kB (i primi 16 kB direttamente disponibili, i secondi 16 kB accessibili tramite bank switching)
* Aggiunto il supporto per le nuove modalità grafiche:
** Screen 0 aggiornato: modalità testuale 80×24 caratteri
** Screen 5: modalità grafica 256×212/424* pixel, 16 colori da una tavolozza di 512
** Screen 6: modalità grafica 512×212/424* pixel, 4 colori da una tavolozza di 512
** Screen 7: modalità grafica 512×212/424* pixel, 16 colori da una tavolozza di 512
** Screen 8: modalità grafica 256×212/424* pixel, 256 colori (nessuna tavoletta)
*: le grafiche a 424 linee erano disponibili solo in modalità interlacciata
* Aggiunto il supporto per gli sprite multicolore (16 colori)
* Aggiunto il supporto per le funzioni grafiche accelerate in hardware (copia, riempimento, blitter, ecc.)
* Aggiunto il supporto per poter usare i primi 32 kB di RAM del computer (non direttamente visibili perché mappati sulle ROM del BIOS e dell'interprete BASIC) come un RAM disk dall'utilizzo limitato (poteva contenere solo alcuni determinati tipi di file).

### MSX BASIC 3.0

* Integrato nei computer MSX 2+ (plus)
* Dimensione dell'interprete: 32 kB (i primi 16 kB direttamente disponibili, i secondi 16 kB accessibili tramite bank switching)
* Aggiunto il comando SET SCROLL per gestire tramite BASIC lo scorrimento hardware dolce del video
* Aggiunto il supporto per le nuove modalità grafiche:
** Screen 10: modalità grafica 256×212/424 pixel con 12499 tonalità in codifica YJK* e 16 colori da una tavolozza di 512 in codifica RGB (modalità interlacciata)$^+$
** Screen 11: modalità grafica 256×212/424 pixel con 12499 tonalità in codifica YJK* e 16 colori da una tavolozza di 512 in codifica RGB$^+$
** Screen 12: modalità grafica 256×212/424 pixel con 19268 tonalità in codifica YJK*
*: modalità e codifiche colori permesse dal nuovo chip grafico Yamaha V9958 $^+$: tecnicamente identiche, l'MSX BASIC trattava queste 2 modalità come differenti, usando lo Screen 11 per correggere il problema della sbavatura del colore nelle righe verticali mediante l'impiego dei colori RGB

### MSX BASIC 4.0

* Integrato nel modello MSX Turbo R (venduto solo in Giappone)
* Aggiunto il supporto per le modalità a 512×512 pixel (16 colori RGB su 512) e 256×212 (19268 colori YJK)
* Aggiunto il comando _PAUSE per ricreare in BASIC delle attese indipendenti dalla CPU e dal clock.
* Aggiunti dei comandi per il dispositivo audio PCM (_PCMPLAY, _PCMREC)

### MSX BASIC 4.1

* Integrato nel Panasonic FS-A1GT MSX Turbo R
* Aggiunte le estensioni MIDI

## Estensioni dell'MSX BASIC

Grazie al fatto che l'MSX BASIC fu progettato per essere espandibile, fu possibile realizzare delle estensioni al linguaggio in maniera relativamente facile. Il supporto per uno specifico hardware era aggiunto tramite l'utilizzo di cartucce di espansione, che servivano anche come interfaccia per l'hardware in questione. Il Disk BASIC ne è un esempio: integrato nella cartuccia che forniva l'interfaccia per collegare le unità dischi, aggiungeva dei comandi per accedere alle stesse.
Era possibile espandere l'MSX BASIC anche via software: un'estensione alle versioni 1.0/1.1 era "Screen IV", una modifica che aggiungeva la modalità mista grafica/testuale Screen 4 (da cui il nome) con 64×24 caratteri e la risoluzione Screen 2 per la grafica (256×192 pixel, 16 colori).

## Esempio di codice

Quello che segue è un esempio di codice scritto in MSX BASIC: