ZXpand+ è un espansione per il Sinclair ZX81 ed alcuni suoi cloni. Offre le seguenti funzionalità:
- Memoria RAM a 32K statica con mappatura configurabile via software.
- Archiviazione su normale filesystem su scheda SD/MMC, continuando ad utilizzare i comandi LOAD e SAVE.
- Memoria ROM aggiuntiva (overlay) in cui copiare l’ultima versione del firmware da SD, che implementa e rende immediatamente disponibili all’utente i nuovi comandi a supporto del device.
Supporto per i comuni sistemi ad alta risoluzione basati su software (HRG). - Pulsante di reset per preservare l’usura del del jack di alimentazione del computer.
- Supporto audio con Chip AY/YM.
- Connettore per Joystick e I/O Seriale.
In sintesi, la ZXpand+ aggiunge al Sinclair ZX81 tutto ciò che un ragazzo negli anni 80 avrebbe potuto desiderare, e che gli utenti del Commodore, Atari avevano già a disposizione, da subito.
Il dispositivo ZXPand+ è stata progettata e realizzata dal mitico Charlie Robson. Il progetto è pubblicato attualmente su Github a questa indirizzo https://github.com/charlierobson/ZXpand-Vitamins. Per ulteriori domande, richieste e segnalazioni fare riferimento alla fonte ufficiale e all’autore (zxpand@outlook.com).
Questo documento si limita, nella prima versione, a tradurre in lingua italia ciò che è riportato nella documentazione ufficiale rilasciata da Charlie Robson a questo indirizzo https://github.com/charlierobson/ZXpand-Vitamins/wiki/ZXpand—Online-Manual
Nelle successive versioni verrà arricchita si esempi pratici e ulteriori informazioni di dettaglio che eventualmente ricaverò pian piano con l’utiliz<zo, e se ne farò un buon uso. Se riscontrerete errori, quasi sicuramente son miei di trascrizione, quindi per favore segnalatemeli in maniera tale da correggerli. Infine, un ringraziomento all’autore di questa splendida estensione, che apre tante nuove opportunità e casi d’uso, a chi è abbastanza curioso e temerario.
Compatibilità
Lo ZXpand funziona con tutti i computer Sinclair ZX81 e TS1000/1500 standard.
Con un distinguo per il Timex Sinclair 1500 ha una diversa disposizione di alcuni connettori esterni (video e tape) tutti posizionati sul retro e non lateralmente come con gli altri 2 modelli. Lo ZXPand+ coprirà e renderà inutilizzabili i 2 jack. Si può risolvere, ad esempio, distanziando il computer dalla ZXPand+ tramite un estensione.

Cosa mi serve per iniziare?
Se hai tra le mani un Sinclair ZX81|TS1000 ed una ZXPand+, per iniziare hai bisogno semplicemente di scheda SD/MMC. La maggior parte di queste schede viene fornita già preformattata FAT12, 16 o 32, bisogna accertarsi di questo, e nel caso eseguirla con uno dei 3 formati supportati.
Una volta formattata, è possibile salvare alcuni programmi ZX81 sulla scheda. In genere hanno l’estensione “P”. Se si incontrano file con estensione .81, è necessario rinominarli con l’estensione “P”: i formati sono identici. Questi sono ampliamente disponibili sulla rete, ad esempio alcuni puoi trovarne alla url https://www.zx81.nl/dload/software/ (in formato zippato) oppure sulla stessa macchina, a questa URL https://www.zx81.nl/files/ (non zippati). Attenzione, che non tutti i software solo liberamente utilizzabili, quindi controllate la licenza con cui è distribuito, eventualmente contattate direttamente l’autore l’autore, o chiedete in uno dei tanti forum di appassionati.
Per i nomi dei file su SD/MMC per ZXPand+ vale lo standard DOS: devono contenere un massimo di 8 caratteri seguiti dall’estensione. E’ possibile organzzare i proprio file in strutture a directory, rispettando sempre il limite degli 8 caratteri anche per i nomi delle directory.
La ZXPand va collegata o scollegata esclusivamente a computer *SPENTO* (staccato dalla rete elettrica).
A computer *SPENTO* collega lo ZXpand al computer e inserisci la scheda SD nell’apposito slot. Accendi il Sinclair ZX81.
Per caricare (ad esempio) il programma chiamato ‘KONG.P’, inserisci il comando:
LOAD "KONG"
Se il file è presente sulla scheda SD, e tutto è funzionte, dovrebbe apparire la seguente schermata. Ma, prima di andare avanti godetevi pure una partita a questo splendido gioco sviluppato nel 2010 da Paul Farrow, che per quel che mi riguarda rimane un’altra leggenda della storia dei computer Sinclair.

Passiamo ora a visionare e provare tutti i nuovi comandi disponibili con ZXPand+.
Nuovi comandi a supporto della ZXPand+
Col firmware della ZXPand+ attivo, alcuni comandi standard del Sinclair ZX81 risultano rimpiazzati da nuovi. I comandi relativi alla stampante ZX sono stati sostituiti con quelli necessari per utilizzare correttamente l’interfaccia ZXpand. Ad esempio, il comando CAT sostituisce COPY: per ottenere CAT, quindi, è necessario premere il tasto Z in modalità K.

Se il programma necessita di accedere a uno dei comandi originali, sarà necessario disabilitare la ROM della ZXPand+ in fase di caricamento (LOAD) o utilizzando l’opzione di configurazione appropriata. Vedremo più avanti come.
Di seguito la lista dei nuovi comandi :
| Comando | Combinazione Tasti | Descrizione Comando | Comando sostituito |
|---|---|---|---|
| CONFIG | shift+G | Per configurare il firmware di ZXPAND+ : visionare la versione del firmware, Spostare la RAMTOP dal valore di default. Selettore di mamoria RAM da utilizzare (alta o bassa), configurazione del joistick, attivare o meno il firmware, Visualizzazione o valorizzazione del byte di configurazione. | LLIST (stampa il listato basic in memoria) |
| CAT | Z (modalità K) | Per visionare il contenuto del filesystem creato presente sulla SD/MMC. Non dissimile dal comando “ls” di UNIX. | COPY (print screen) |
| LOAD | J (modalita K) | Carica in memoria. Se il codice caricato è in BASIC per eseguirlo è necessario eseguire anche il comando RUN (R in modalità K) per darlo in parto all’interprete. Se si tratta di codice binario viene automaticamente eseguito. | integra|sostituisce la routine standard. |
| SAVE | S (modalità K) | Per salvare nel filesystem della SD/MMC un file già caricato in memoria. | integra|sostituisce la routine standard. |
| ZXPAND | shift+S | Un’altra strada per interagire in maniera piu’ diretta e *completa* con le API della ZXPand+. Ad esempio, a differenza del comando CAT che permette di eseguire programmi, visionare e spostarsi nel filesytem e creare directory, tramite il comendo ZXPAND è possibile anche eliminare e rinominare file e directory. | LPRINT (stampa la stringa) |
Scendiamo ora nel dettaglio di ogni comando con maggiori dettagli ed esempi.
Comando : CONFIG
Il comando CONFIG viene utilizzato per configurare l’interfaccia ZXpand+ e il suo funzionamento con lo ZX81. Poiché il funzionamento di alcuni programmi e comandi è influenzato dalla configurazione dell’interfaccia, questo aspetto verrà trattato per primo.
Il comando CONFIG sostituisce il comando LLIST. (shift+G)
Il formato del comando è il seguente :
CONFIG [parametro[=valore]]
I parametri del comando e i relativi effetti sono :
| Param. | Valori |
|---|---|
| V | Visualizza la stringa della versione del firmware dell’interfaccia |
| R=nnnnn | Imposta RAMTOP al valore decimale specificato nnnnn ed esegue NEW |
| M[=L|H] | I 32k di RAM inclusi nella ZXPAnd+ è possibile mapparli in due range di indirizzi : “8-40k” (memoria ALTA) o “16-48” (memoria BASSA). Con il valore “L” si imposta la mappatura RAM “bassa” (8-40k). Con il valore “H” imposta la mappatura RAM “alta” (16-48k). Senza alcuna assegnazione (solamente M) il comando visualizza la configurazione attuale della mappatura RAM : Alta o Bassa. Con la versione 5.2 di ZXPand+ il primo blocco di 8k (8-16k), viene mappato *contestualmente* anche come 40-48k. Questo dovrebbe semplificare la configurazione per un uso personale, perchè non piu necessario impostare questo parametro. Tuttavia se si inte intende distribuire il proprio software e renderlo retrocompatibile con versione di ZXPand+ precedenti alla versione 5.2 è necessario impostare tale parametro. Se si dispone di un hardware incompatibile con le mappature standard di ZXPand+, è possibile ripristinare la funzionalità precedente flashando una nuova configurazione sul chip CPLD, in tal caso vedere la procedura di aggiornamento firmware. La configurazione della memoria impostata con questo parametro rimane fintanto non viene impostata un’altra configurazione o fino ad un reset di fabbrica (factory reset) Alcuni programmi ad alta risoluzione richiedono RAM nell’area 8-16K. Questi sono solitamente identificati come programmi che utilizzano lo schema “WRX“. La maggior parte dei programmi a 32K richiede un blocco di memoria continuo da 16 a 48K. |
| X | Disabilita la ROM di ZXPand (firmware) al prossimo reboot della macchina |
| C[=xx] | Imposta il valore del byte di configurazione, dove xx è un valore esadecimale a 2 cifre. Se non impostato (solamente C) visualizza il valore attualmente impostato. |
| J=udlrf | Controlla quali tasti devono essere emulati dal joystick quando si utilizza INKEY$ |
Note
Parametro J.
BYTE di CONFIGURAZIONE
Il byte di configurazione viene utilizzato per specificare determinate modalità operative dello ZX81. Ogni singolo bit di tale byte di configurazione può assumere regolare un differente comportamento.
| bit | descrizione |
|---|---|
| 8 | non documentato | non utilizzato |
| 7 | Il bit 7 controlla se shift abilita o disabilita l’avvio automatico di un programma chiamato MENU.P. Quando il bit è impostato, è necessario shift. Questo è il comportamento predefinito. Cancellando il bit 7 si avvia automaticamente a meno che shift non venga mantenuto premuto. Questa modalità può essere molto utile per esposizioni o applicazioni di controllo di centrali elettriche. Se MENU.P non viene trovato, verrà generato l’errore 9. |
| 6 | Il bit 6 permette di regolare le modalità di interruzione dell’esecuzione di un programma. Con il bit 6 impostato, l’interruzione avviene premendo [spazio] (normale modalità). Con il bit 6 azzerato, è necessario premere [shift+spazio] per interrompere l’esecuzone di programma BASIC. |
| 5 | non documentato | non utilizzato |
| 4 | non documentato | non utilizzato |
| 3 | non documentato | non utilizzato |
| 2 | non documentato | non utilizzato |
| 1 | non documentato | non utilizzato |
INKEY$ può essere utilizzato per rilevare le 4 direzioni ordinali di un joystick collegato. Al momento non è possibile utilizzare diagonali. I codici joystick predefiniti sono 6, 7, 5, 8 e 0, che corrispondono alle direzioni del cursore.
Comando : CAT
Il comando CAT è utile per visionare il contenuto del filesystem su SD/MMC. Senza parametri (o valore nullo) elencherà il contenuto della directory di lavoro corrente (CWD). Per elencare il contenuto di una qualsiasi directory relativa, è necessario specificare il percorso, come si farebbe con un sistema DOS o UNIX.
Il comando CAT sostituisce il comando COPY. (Premete Z in modalità K)
Il formato del comando è il seguente :
CAT [ "" | "[>|+]directory" ]
Ad esempio, supponendo di essere nella directory principale :
CAT ""
GAMES/
UTILITY/
MYPROG.P 11K
Per visionare il contenuto della directory GAMES :
CAT "GAMES"
../
MAZOGS.P 15K
3DMONST.P 13K
Per posizionarci in un’altra direcory, bisogna anteporre al nome della directory il prefisso “>”, questo rende il comando CAT simile al comando “cd” di UNIX ed altri sistemi operativi. Supponiamo di volerci spostare dalla directory principale alla directory “GAMES”
CAT ">GAMES"
Dopo aver cambiato directory di lavoro, per visualizzare il contenuto di “UTILITY”
CAT "../UTILITY"
Son supportati i caratteri jolly dei file, similmente a come funziona sui sistemi UNIX :
- “*” corrisponderà a qualsiasi sequenza di caratteri.
- “?” corrisponderà a un singolo carattere.
Alcuni esempi nell’uso dei caratteri jolly :
| Esempio | Descrizione |
|---|---|
| CAT “ST*” | Mostrerà tutti i file presenti nella directory corrente che iniziano con “ST” |
| CAT “S?T*” | Mostrerà tutti i file presenti nella directory corrente che hanno “S” e “T” rispettivamente in prima e terza posizione nel nome. |
| CAT “../GAMES/S/START*” | Mostrerà tutti i file presenti al PATH relativo, il cui nome inizia per “STAR” |
+++ Comando CAT per Creare una directory (like “mkdir”).
Per creare una cartella nella CWD, digitare il comando:
CAT "+dirname"
+++ Comando CAT per cambiare il posizionamento nel filesystem (like “cd”).
Come in uno degli esempi precedenti fatto, per cambiare il posizionemento nel filesystem (setting ‘PWD’) è necessario prefissare la path relativa o assoluta col catattere maggiore “>”.
CAT ">GAMES"
+++ Comando per nascondere al comando CAT un ramo del filesystem
Alcuni sistemi di archiviazione (software o sistemi operativi) aggiungono automaticamente delle cartelle per la loro gestione interna del filesystem, senza possibilità da parte di nostra di disabilitare tale meccanismo. Questi file o directory potrebbero avere nomi non standard, permessi non gestiti o ancora, contenuto tali da produrre errori poi nel firmware nel momento in cui questo cercasse di leggerne il contenuto o l’indice directory. Se dovessi incappare in un fastidio del genere è possibile ignorare ad esempio una directory, in questo modo :
/TRASH-?1
Comando : LOAD
Il comando LOAD legge il file specificato e lo carica in memoria.
Il comando LOAD non sostituisce nessuna altra routine, ma integra l’attuale comando, nella maniera descritta di seguito.
Il formato del comando è il seguente :
LOAD "[[PATH]filename[;X|;address|:argument]|$]"
Di seguito, un maggior dettaglio :
Quellodi seguito è il formato base, ossia il caricamento di un programma da SD, ed è possibile specificare anche la PATH in cui si trova il file sul filesystem.
LOAD "[PATH]filename"
Se il programma da caricare necessità di utilizzare routine di stampa (LLIST, COPY, LPRINT) oppure la ROM dello ZX81 per leggere la tabella dei caratteri, queste non sono disponibili con ZXPand+, quindi bisognerà disabilitare temporaneamente la ROM del dispositivo, aggiungendo al nome del file una “X” e separati da un punto-e-virgola (;). Per riattivare nuovamente la ROM di ZXPand+ sarà necessario un ciclo di ACCENSIONE/SPAGNIMENTO dello ZX81, oppure un “hard reset” (pressione del tasto di reset di ZXPand+ prolungato (1,5 secodi).
LOAD "[PATH]filename;X"
Se si hanno esigente particolari con la mappatura della memoria, o salamente per effettuare dei test, è possibile chiedere alla routine LOAD di caricare in memoria il programma a partire da una specifica locazione di memoria, in cui nnnnn rappresenta –in numero decimale– l’indirizzo di destinazione :
LOAD "[PATH]filename;nnnnn"
Per impedire l’esecuzione automatica di un programma al suo caricamento, aggiungere la parola chiave STOP [Shift-A] alla fine del nome del file.
LOAD "[PATH]filename STOP "
Senza alcun parametro, quindi non specificano nessun file tra le doppie virgolette attenderà l’avvio del dispositivo a nastro magnetico. In pratica l’integrazione della routine LOAD funzionerà nella maniera classica solamente in questo caso, se non viene impostato nessun file.
LOAD ""
+++ [EXTRA] Caricamento di programmi da remoto tramite collegamento seriale.
Una versione speciale del comando LOAD, con l’ausilio di un apposito programma server e di un cavo seriale adatto, consente di caricare un programma tramite la porta seriale. Ciò è particolarmente utile per semplificare la vita agli sviluppatori, che possono avere l’ambiente di sviluppo ovunque e provare in qualsiasi momento ad eseguire su hardware reale. L’eccellente ZX-IDE può essere configurato per richiamare automaticamente il server al termine della compilazione. Per maggiori dettagli .
LOAD "$"
+++ [EXTRA] Passaggio di un argomento ad un programma direttamente da LOAD
Esiste una funzionalità che consente di specificare una sorta di argomento quando si digita LOAD. Il firmware ZXpand+ suddividerà qualsiasi nome di file fornito quando incontra i due punti. Il testo che segue i due punti viene memorizzato e può essere recuperato da un programma in un secondo momento.
LOAD "[PATH]programma:argomento"
Il programma verrà caricato normalmente e l’argomento passato verrà memorizzato. Per ulteriori informazioni, ne parleremo di seguito quando verra trattato il comando ZXPAND, ed in particolare col sostantivo PARM.
Comando SAVE
Il comando SAVE scarica un programma dalla memoria ad un file sulla SD/MMC. Con ZXPand+ non sarà possibile salvare su dispositivo a nastro in nessun modo, se non disabilitata esplicitamente la ROM (overlay) del dispositivo con il comando “CONFIG X” visto precedentemente, o non non si sia utilizzato precedentemente il comando LOAD “filename;X”.
SAVE "[PATH]filename"
Una forma alternativa del comando permette di salvare il contenuto della memoria, specificando l’indirizzo di partenza (parametro ssssss) ed il numero di byte da considerare (parametro llll), entrambi specificati in decimale.
SAVE "[PATH]filename;sssss,llll"
Tale modalità risulta comoda ad esempio per effettuare il DUMP in un file del contenuto di una ROM. Il comando di esegui riportato di seguito effettua, ad esempio, il DUMP della ROM (overlay) di ZXPand+.
SAVE "[PATH]filename;0,8192"
Prefissando il nome del file con un carattere +, con un file esistente verrà rinominata la vecchia versione con estensione .bak. Se il file di backup già esiste il comando di salvataggio genererà un errore.
SAVE "+[PATH]filename"
Prefissando il nome del file con il carattere >, il comando di salvataggio sovrascriverà *incondizionatamente* qualsiasi file esistente con lo stesso nome.
SAVE ">[PATH]filename"
Comando ZXPAND
Questo comando ha lo scopo di avere una modalità interattiva con la ZXPand+. Questa nuova possibilità è ancora in fase iniziale di sviluppo, e quindi probabilmente a breve ci saranno altre modifiche.
Il comando ZXPAND sostituisce il comando LPRINT. In modalità K [shift+S]
Il formato del comando è il seguente :
ZXPAND COMANDO [noum][parametro-1 parametro-2 ... parametro-n]
I comandi attualmente implementati, di cui è possibile immettere con un nome breve, sono : OPE[N], PUT, GET, CLO[SE], DEL[ETE e REN[AME]. Si seguito un maggior dettaglio.
| Parametro | Sostantivo | Agomento | Note |
|---|---|---|---|
| OPE[N] | SER[IAL] | range 1200, 38400 | Apre il canale col dispositivo seriale con baud,8,n,1. Va specificato nell’argomento il “baud rate” da utilizzare, che dovrebbe corrispondere alla velocità di trasmissione e ricezione (TX/RX) |
| OPE[N] | MID[I] | Apre il canale, alla velocita di trasmissione/ricezione prevista per le comunicazioni MIDI | |
| OPE[N] | CAT | path | Apre un elenco di directory specificate al percorso |
| OPE[N] | FIL[E] | path | Apre un file per le funzioni di streaming |
| PUT | SER[IAL] | text | Invia il testo fornito alla destinazione seriale |
| PUT | SER[IAL] | *nnnnn | Invia dall’indirizzo di memoria al destinazione seriale. L’indirizzo deve essere prefissato da un asterisco. |
| PUT | MID[I] | *nnnnn | Invia dall’indirizzo di memoria al dismositivo midi, e alla velocità prevista per questo tipo di protocollo. L’indirizzo deve essere prefissato da un asterisco. |
| GET | SER[IAL] | *nnnnn | Copia all’indirizzo di memoria specificato ciò che trova nel buffer seriale. L’indirizzo deve essere prefissato da un asterisco. |
| GET | CAT | *nnnnn | Ottiene la voce di catalogo successiva, nel buffer IO o all’indirizzo specificato. L’indirizzo deve essere prefissato da un asterisco. |
| GET | PAR[M] | *nnnnn | Ottiene l’argomento che potrebbe essere stato specificato dall’ultimo comando LOAD, nel buffer I/O o all’indirizzo specificato. Il buffer di I/O è a 16449. L’indirizzo deve essere prefissato da un asterisco. |
| CLOSE | SER[IAL] | Chiude le porte seriale|midi aperte. | |
| CLOSE | FIL[E] | Chiude i file aperti. | |
| DEL[ETE] | path | A differenza degli altri comando già visti, il parametro ZXPAND permette la cancellazione di file o directory del filesystem. Viene fornita solamente qui per ulteriore sicurezza di non cancellare cose per errore. | |
| REN[AME] | path attuale path nuova | A differenza degli altri comando già visti, il parametro ZXPAND permette di rinominare file o directory del filesystem. Viene fornita solamente qui per ulteriore sicurezza di non rinminare cose per errore. |
Di seguito alcuni esempi :
ESEMPIO 1. Scrive il contenuto della variabile A$ (immessa dall’utente) sulla seriale, dopo aver aperto il canale. Trasmessa la stringa chiude nuovamente il canale col destinatario.
10 INPUT A$
20 ZXPAND "OPE SER"
30 ZXPAND "PUT SER " + A$
40 ZXPAND "CLO SER"
ESEMPIO 2. Scrive 100 byte di dati dalla memoria alla porta seriale.
10 LOAD "MYDATA;30000"
20 ZXPAND "OPE SER"
30 ZXPAND "PUT SER *30000 100"
40 ZXPAND "CLO SER"
IL PULSANTE RESET
Il pulsante di reset ha effetti differenti a seconda di come viene premuto.
I tre tipi di reset disponibili sono :
| Tipo di RESET | Descrizione |
|---|---|
| SOFT RESET | Un breve tocco resetterà solo lo ZX81. Il LED verde lampeggerà. |
| HARD RESET | Una pressione più lunga, circa 1,5 secondi, resetterà lo ZX81 e il controller dell’interfaccia. I LED verde e giallo lampeggeranno. |
| FACTORY RESET | Una pressione del pulsante per più di 5 secondi ripristinerà il contenuto della EEPROM alle impostazioni di fabbrica. Il LED giallo lampeggerà. |
AGGIORNAMENTI FIRMWARE
Gli aggiornamenti del firmware dell’interfaccia vengono eseguiti tramite il bootloader della scheda SD. L’immagine binaria del firmware, ZXPANDFW.BIN, deve essere copiata sulla scheda SD. Questa viene quindi inserita e l’interfaccia viene riavviata eseguendo un hard reset o un ciclo di accensione. Il LED giallo si accenderà e quello verde lampeggerà. Una volta aggiornato il firmware, lo ZX81 verrà resettato.
La revisione del firmware viene visualizzata all’accensione.
Lo ZXpand+ contiene una logica programmabile sotto forma di CPLD, che può essere aggiornata anche sul posto. In caso di necessità, è necessario salvare un file chiamato zxpplus.xvf sulla scheda SD e riavviare il dispositivo. Poiché il firmware principale è responsabile di questo processo, e non il bootloader, che ha spazio limitato, le restrizioni sopra descritte non sono rilevanti. Le immagini del firmware CPLD sono disponibili a questa URL.
Per determinare la revisione della ROM overlay in uso, digitare
PRINT PEEK 7679 / 10
Questo produrrà una versione simile a “7.1”. Sebbene non sia previsto al momento, potrebbe essere necessario aggiornare la ROM. Dovrebbe essere più semplice rispetto al classico ZXpand, poiché il codice è memorizzato in una EEPROM. Tuttavia, non è possibile aggiornare il codice sul posto, poiché il chip non lo supporta. È necessario un programmatore esterno, ma non è necessario un cancellino. Se si desidera un aggiornamento, è possibile restituire il chip alla base per la riprogrammazione o ottenere un nuovo chip a un costo minimo.
Hardware Audio
Il chip integrato AY/YM viene indirizzato utilizzando le stesse coppie di numeri di porta dell’interfaccia standard (ZON-X), ovvero $CF e $0F (oppure $DF e $1F). A differenza di ZON-X, tuttavia, questi indirizzi di porta sono completamente decodificati.
| Interfaccia standard | Descrizione |
|---|---|
| $CF|$DF | Sono i latch dei numeri di registro La lettura dei registri e della porta di I/O del chip avviene tramite la porta $CF|$DF |
| $0F|$1F | Sono i latch dei dati |
Il Turbo-AY è possibile con l’aggiunta di una scheda a circuito stampato economica e di un chip AY/YM aggiuntivo.
Le informazioni relative alla programmazione di questo chip esulano dallo scopo di questo documento. Tuttavia, sono disponibili numerose risorse online, non ultimo il manuale ZON-X che contiene molte informazioni rilevanti.
Vettori di ingresso delle funzioni ROM
Per mantenere la compatibilità tra le revisioni di versione, nella ROM sono presenti diversi “vettori di ingresso” a indirizzo fisso. Questi vettori servono principalmente a isolare i programmatori dal fastidio di dover richiamare codice dalla ROM, consentendo aggiornamenti e innovazioni senza interrompere i programmi in futuro.
Queste funzioni API rappresentano un piccolo sottoinsieme delle funzionalità di ZXpand e sono state progettate per fornire un modo pulito per gestire alcune delle questioni ausiliarie dell’interfaccia, come l’attesa del completamento dei comandi o il trasferimento di buffer di dati. La meccanica effettiva dell’esecuzione dei comandi è lasciata al programmatore, poiché ci sarebbero state troppe chiamate API se ogni funzionalità fosse stata sottoposta a wrap. I meccanismi essenziali dell’esecuzione dei comandi non cambieranno in quanto sono dettati dall’hardware e pertanto sono sicuri da programmare direttamente. Laddove si dovessero verificare modifiche che interrompono il codice, si presterà attenzione a mantenere la compatibilità con le versioni precedenti.
ZXpand utilizza spesso il formato di stringa HBT (high-bit terminated), in cui la fine della stringa è contrassegnata da un byte con il bit superiore impostato. Questa è stata adottata perché l’integrazione con il BASIC la rendeva una scelta conveniente. Tuttavia, alcune stringhe potrebbero essere meglio rappresentate memorizzando una lunghezza insieme ai dati. Questo è molto probabilmente il caso quando si tratta di trasferire dati seriali, dove una stringa può essere composta da byte arbitrari anziché da caratteri alfanumerici. Questi buffer con prefisso di lunghezza (LPB) possono essere utilizzati nelle API di streaming.
In generale, le funzioni ZXpand restituiscono un codice di errore di successo pari a $40. L’operazione AND del risultato con $3F restituirà lo stesso codice dei codici di errore BASIC, oppure 0, che indica successo.
| API | Descrizione | ||
|---|---|---|---|
| 1 | API_ZXPANDCMD | 8178, $1ff2 | Questa è la routine di gestione del comando ZXPAND. Tutto ciò che può fare, è possibile farlo qui. In ingresso: stringa di comando DE -> HBT. Vedere la descrizione del comando ZXPAND. In uscita: tutto è andato bene. In caso contrario, il programma si chiuderà con un errore. |
| 2 | API_STREAMREAD | 8180, $1ff4 | Esegue operazioni di lettura streaming composite su blocchi fino a 256 byte. Utilizzabile da BASIC. In ingresso: il blocco parametri streaming (SPB) viene impostato correttamente. In ritorno: il codice risultato in SPB viene impostato di conseguenza. Il buffer della stampante in 16444 è designato come SPB. La sua struttura è la seguente: 16444 = (byte, in) operazione/modalità 16445 = (byte, out) risultato 16446 = (byte, in) lunghezza xfer (0 = 256) 16447 = (word, in) puntatore dati Più operazioni possono essere combinate in un’unica chiamata. Ogni bit nel codice operativo indica una possibile azione. Le operazioni sono open, read, wait e store. Queste sono rappresentate rispettivamente dai bit 0..3 inclusi. Open deve essere eseguita separatamente, mentre read, wait e store possono essere utilizzate in qualsiasi combinazione. |
| 3 | API_RESPONSE | 8182, $1ff6 | Attesa il completamento di un comando eseguito in precedenza. Al ritorno: A = codice di errore |
| 4 | API_FILEOP | 8184, $1ff8 | Esegue un’operazione su file. All’ingresso: DE -> stringa nome file HBT, A = modalità ($00 = caricamento, $7F = eliminazione, $FF = salvataggio) Al ritorno: A = codice di errore |
| 5 | API_SENDSTRING | 8186, $1ffa | Scrive una stringa su ZXpand. All’ingresso: DE -> stringa terminata da HBT, oppure 0 per inviare una stringa vuota |
| 6 | API_XFER | 8188, $1ffc | Trasferisce dati da/verso ZXpand. All’ingresso: DE -> buffer di memoria, L = conteggio byte, A = modalità ($00 = lettura da ZXpand, $01 = scrittura su ZXpand) |
| 7 | API_RDJOY | 8190, $1ffe | Legge il joystick. Utilizzabile dal Basic. Vedi note sotto. Al ritorno: A, BC = dati del joystick |
Note:
Un modo per leggere i dati del joystick dal BASIC è usare il seguente codice:
LET J = USR(8190)
Ogni bit nella variabile J, come usato nell’esempio precedente, rappresenta una direzione o un pulsante.
| Bit | Significato |
|---|---|
| 7 | su/avanti |
| 6 | giu’/indietro |
| 5 | sinistra |
| 4 | destra |
| 3 | fuoco |
Purtroppo il BASIC ZX81 non dispone di operatori bit a bit, quindi la decodifica di questo valore potrebbe essere noiosa. Un modo migliore per ottenere l’input del joystick in BASIC è usare l’integrazione INKEY$. Fai riferimento al comando CONFIG-J.
PINOUT del Connettore di espansione JOYSTICK/SERIALE
L’interfaccia del joystick è diversa a seconda che si disponga di uno ZXpand+ versione fino a 5.1 o 5.2 e superiore. Entrambe le interfacce offrono una porta seriale TTL a 5 Volt e la funzionalità joystick. Prima della versione 5.2, il connettore rettangolare offriva sia 5 che 3,3 volt per l’utilizzo da parte degli sperimentatori più intrepidi. Dalla versione 5.2 in poi, la linea a 3,3 V non è presente, e rimane solo quella a 5 Volt. È più facile generare 3,3 V da una sorgente a 5 Volt che il contrario.
Le linee del joystick sono I/O TTL per uso generico e possono potenzialmente essere utilizzate per l’interfacciamento diretto con altri segnali digitali a 5 V.
ZXpand utilizza livelli di segnale TTL a 5 V sulla sua porta seriale. Assicuratevi che qualsiasi cosa colleghiate al vostro dispositivo non danneggi lo ZXpand né venga danneggiato da esso!
Il pinout è il seguente:
| Pin | Funzione | Pin | Funzione | Annotazione |
|---|---|---|---|---|
| 1 | Su | 2 | Fuoco | |
| 3 | Giu | 4 | 5Volt | |
| 5 | Sinistra | 6 | GND | |
| 7 | Destra | 8 | RX | |
| 9 | TX | 10 | 3.3Volt (3V3) | Esclusivamente per ZPAND+ fino alla versione 5.1 |
Ecco una rappresentazione grafica del pinout del connettore per schede precedenti alla versione 5.2 e la numerazione di un cavo terminato con un connettore IDC a 10 vie:

Codici di errore di base
L’interfaccia può segnalare i seguenti errori. Vengono visualizzati a video a modalità inversa per distinguerli dai codici di errore standard generati dallo ZX81.
| Codice Errore | Descrizione Errore |
|---|---|
| 1 | Errore irreversibile del disco. La scheda non è leggibile a causa di un problema hardware o non è formattata. |
| 2 | Errore interno. Le strutture del file system della scheda sono incoerenti. Il ripristino dovrebbe risolvere il problema. |
| 3 | Non pronto. La scheda non risponde o non è presente alcuna scheda. |
| 4 | Non trovato. Il file non esiste. |
| 5 | Nessun percorso. La directory non esiste. |
| 6 | Nome non valido. Il nome specificato contiene caratteri non validi. |
| 7 | Protezione da scrittura. È stato effettuato un tentativo di aprire un file di sola lettura per la scrittura. |
| 8 | Esiste. È stato effettuato un tentativo di aprire un file per la scrittura, ma il nome è già in uso. |
| 9 | Errore di avvio. Menu.p non trovato nella directory principale della scheda. |
| D | Nessun FS. La scheda non è formattata o è danneggiata. |
| F | Timeout. Un’operazione a tempo ha richiesto troppo tempo per essere completata. |
Risoluzione dei Problemi
Ricevo l’errore 3 quando provo a usare CAT o LOAD
Di solito si tratta di un problema con la scheda SD. Sebbene ZXpand sia compatibile con la maggior parte delle schede, alcune non funzioneranno correttamente, anche se funzionano correttamente sul computer. Se possibile, prova una scheda diversa. Una scheda più recente, più veloce/più grande non è sempre migliore. Controlla il formato della scheda. Se ti è comodo, puoi provare a riformattarla. Consulta la guida nella sezione “Guida introduttiva”.
ZXpand continua a resettarsi o sullo schermo si verificano strane interferenze con ZXpand collegato
Molto probabilmente si tratta di un problema di alimentazione. L’alimentatore utilizzato non è in grado di erogare corrente sufficiente o il regolatore interno si è degradato nel corso degli anni. Gli alimentatori Sinclair originali producono 9-12 V a circa 700 mA. Consiglio un nuovo alimentatore in grado di erogare 7,5 V a 1 A+. Questo garantirà una corrente sufficiente, manterrà lo Zeddy più fresco durante il funzionamento e ridurrà l’usura del suo regolatore interno. Qualcosa del genere:
I dettagli sono:
7,5 V è selezionabile o l’uscita fissa dell’unità.
1000 mA+, anche se potrebbe andare bene anche meno. 750 mA è comune e dovrebbe funzionare.
Connettore TRS da 3,5 mm (jack/nastro) – Erano comuni in passato, ma ora non lo sono più.
Adattatori dritti – La maggior parte ora è ad angolo retto. Potrebbero funzionare, ma non posso dirlo con certezza.
Vedo l’errore 9 ogni volta che avvio.
ZXpand è impostato per l’avvio automatico, ma non c’è il file ‘menu.p’ nella directory principale della scheda SD. Vedi la sezione sul comando CONFIG.
La luce rossa rimane accesa e lo schermo dello Zeddy è nero.
Probabilmente il firmware è corrotto e devi riprogrammarlo. Segui le istruzioni per l’aggiornamento.
Lo schermo dello Zeddy è nero e nessuna luce lampeggia all’avvio.
Dovresti riprogrammare il file bit CPLD. Segui le istruzioni per l’aggiornamento.
Lo Zeddy si blocca/si resetta casualmente o si verifica una combinazione degli errori sopra descritti.
Pulisci il connettore del bordo dello Zeddy. Usa una spugna tipo “gomma magica”, una gomma per matite o una matita in fibra di vetro. Evita la carta vetrata. È possibile farlo con la scheda madre installata, ma potrebbe essere necessario aprire il case. Fai attenzione però! La tastiera a nastro probabilmente si romperà. Sconsiglio vivamente di aprire lo Zeddy.
Il mio programma non funziona o ha un aspetto strano.
Alcuni programmi accedono direttamente alla ROM. Le modifiche alla ROM per l’overlay/driver ZXpand indicano che il codice è stato spostato o eliminato. Questo di solito porta a un crash. Usa il comando LOAD “PROGRAM;X” per disabilitare automaticamente la ROM dell’overlay ZXpand dopo il caricamento per consentire l’esecuzione di un programma. L’overlay verrà riattivato tramite un reset.
Alcuni programmi che accedono al set di caratteri nella ROM presentano testo corrotto. ZXpand utilizza l’area del set di caratteri della ROM per il codice. Basta disabilitare l’overlay come sopra.
I programmi da 1K potrebbero avere difficoltà a funzionare su una macchina con memoria espansa. Principalmente questo è dovuto al file di visualizzazione. Usa CONFIG “R=17408” per impostare RAMTOP allo stesso valore che avrebbe una macchina da 1K, quindi CARICA il programma normalmente.
__EOF
https://github.com/charlierobson/ZXpand-Vitamins/wiki/ZXpand—Online-Manual
partendo da ZXPand, altri tentativi di estensione ONE-IN-ALL con l’aggiunta del segnale video composito: https://codeberg.org/NollKollTroll/OpenSpand (Questa è GPLv3)