CP/M su Commodore 128: terminali e sequenze di escape
di Francesco Sblendorio
Se avete già letto la prima puntata allora avete già fatto qualche esperimento con il vostro Commodore 128 in modalità CP/M. Questa volta ci occuperemo della gestione dello schermo e del modo in cui il sistema operativo gestisce l’output verso l’utente.
CP/M nasce negli anni ’70, progettato per funzionare per macchine diverse tra loro ma che condividano la CPU Intel 8080 (alternativamente il compatibile Zilog Z80). Erano macchine di solito vendute anche senza tastiera e monitor ma con connettori seriali attraverso cui era possibile collegare dei terminali. Da questo punto di vista era simile a UNIX: l’input/output è uno stream sequenziale di caratteri da e verso il terminale. Ciò significa che per avere la possibilità di controllare l’esatta posizione dei messaggi sullo schermo il terminale deve prevedere determinate “sequenze di controllo” (rispetto a cui il sistema operativo è agnostico) per posizionare il cursore, cancellare lo schermo, dare un certo stile o colore ai caratteri, ecc.
Queste sequenze di controllo variano ovviamente in base al terminale utilizzato (quindi non dal sistema operativo) e i vari software devono conoscere come rendere determinati comandi di gestione schermo su uno specifico terminale. A meno che si tratti di software relativamente “semplici” dal punto di vista dell’interfaccia utente tali da non necessitare di altro che visualizzare caratteri e “mandare a capo”. Uno di questi casi è il Microsoft BASIC (detto anche MBASIC, dal nome del comando da lanciare), che non prevede nessun tipo particolare di terminale ma proprio per questo ci permetterà di fare un po’ di esperimenti specifici per il nostro Commodore 128.
Per iniziare, potete scaricare una versione patchata di MBASIC da questo link, che corregge un bug che impedisce di usare correttamente il tasto “backspace”. Una volta scaricato e lanciato, ne avrete il prompt come da immagine di copertina di questo articolo. Iniziate lanciando questo comando (rispettando correttamente le maiuscole e le minuscole):
Apparirà la scritta “Hello world!” in campo inverso. Cosa è successo? Abbiamo stampato, prima e dopo “Hello world!”, due sequenze di controllo terminale, una per impostare il campo inverso, e l’altra per tornare a una visualizzazione “normale”.
Ma… quale terminale, se il Commodore 128 non ha un terminale? La risposta è semplice: i progettisti del BIOS (la parte di sistema operativo dipendente dalla macchina) del CP/M per Commodore 128 hanno scelto un modello di terminale di riferimento, che è il modello “Lear Siegler ADM-31“, e ne hanno implementato i comandi emulando il comportamento di questo modello attraverso i chip video del C128.
Di seguito le principali sequenze di escape disponibili sul nostro Commodore 128. Tenete presente che sono da inviare senza spazi intermedi e che CHR$(27) è il comando BASIC per indicare il carattere di “ESC/ESCAPE” (codice ASCII 27).
Sequenza | Significato | Standard di riferimento |
ESC ESC ESC CHR$(32+x) | Imposta colore carattere=x | Specifico del Commodore 128 |
ESC = CHR$(32+x) CHR$(32+y) | Muove cursore a coord. (x,y) | ADM-3A |
CHR$(30) | Cursore a “HOME” (0,0) | ADM-3A |
CHR$(26) | Cancella schermo + HOME | ADM-3A |
CHR$(7) | Suono “ring” | ADM-3A |
ESC G 4 | Reverse ON | ADM-31 |
ESC G 3 | Sottolineato ON | ADM-31 |
ESC G 2 | Lampeggio ON | ADM-31 |
ESC G 1 | Alternate charset ON | ADM-31 (charset specifico del C128) |
ESC G 0 | Azzera tutte le precedenti | ADM-31 |
ESC ) | Half intensity ON | ADM-31 |
ESC ( | Half intensity OFF | ADM-31 |
ESC E | Insert line | ADM-31 |
ESC Q | Insert character | ADM-31 |
ESC R | Delete line | ADM-31 |
ESC W | Delete character | ADM-31 |
ESC T | Clear to end of line | ADM-31 |
ESC Y | Clear to end of screen | ADM-31 |
Link esterni:
- Sequenze di controllo per Commodore 128 (ADM-31 with KayPro extensions)
- Sequenze di controllo per KayPro
- Sequenze di controllo per VT-100 / ANSI (=VT100+colors)
Commenti
Posta un commento