Sinclair ZX81 | ZXPand+

di | Febbraio 20, 2026

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.

Timex Sinclair 1500, con connettori 9VDC, interfaccia di estensione chiusa da un pannellino richiudibile, MIC, EAR e TV tutti posizionati sul retro.

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:

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 :

ComandoCombinazione TastiDescrizione ComandoComando sostituito
CONFIGshift+GPer 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)
CATZ (modalità K)Per visionare il contenuto del filesystem creato presente sulla SD/MMC. Non dissimile dal comando “ls” di UNIX.COPY
(print screen)
LOADJ (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.
SAVES (modalità K)Per salvare nel filesystem della SD/MMC un file già caricato in memoria.integra|sostituisce la routine standard.
ZXPANDshift+SUn’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 :

I parametri del comando e i relativi effetti sono :

Param.Valori
VVisualizza la stringa della versione del firmware dell’interfaccia
R=nnnnnImposta 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.
XDisabilita 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=udlrfControlla 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.

bitdescrizione
8non documentato | non utilizzato
7Il 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.
6Il 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.
5non documentato | non utilizzato
4non documentato | non utilizzato
3non documentato | non utilizzato
2non documentato | non utilizzato
1non 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 :

Ad esempio, supponendo di essere nella directory principale :


Per visionare il contenuto della directory GAMES :

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”

Dopo aver cambiato directory di lavoro, per visualizzare il contenuto di “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 :

EsempioDescrizione
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:

+++ 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 “>”.

+++ 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 :

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 :

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.

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).

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 :

Per impedire l’esecuzione automatica di un programma al suo caricamento, aggiungere la parola chiave STOP [Shift-A] alla fine del nome del file.

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.

+++ [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 .

+++ [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.

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”.

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.

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+.

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.

Prefissando il nome del file con il carattere >, il comando di salvataggio sovrascriverà *incondizionatamente* qualsiasi file esistente con lo stesso nome.

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 :

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.

ParametroSostantivoAgomentoNote
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]CATpathApre un elenco di directory specificate al percorso
OPE[N]FIL[E]pathApre un file per le funzioni di streaming
PUTSER[IAL]textInvia il testo fornito alla destinazione seriale
PUTSER[IAL]*nnnnnInvia dall’indirizzo di memoria al destinazione seriale. L’indirizzo deve essere prefissato da un asterisco.
PUTMID[I]*nnnnnInvia dall’indirizzo di memoria al dismositivo midi, e alla velocità prevista per questo tipo di protocollo. L’indirizzo deve essere prefissato da un asterisco.
GETSER[IAL]*nnnnnCopia all’indirizzo di memoria specificato ciò che trova nel buffer seriale. L’indirizzo deve essere prefissato da un asterisco.
GETCAT*nnnnnOttiene la voce di catalogo successiva, nel buffer IO o all’indirizzo specificato. L’indirizzo deve essere prefissato da un asterisco.
GETPAR[M]*nnnnnOttiene 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.
CLOSESER[IAL]Chiude le porte seriale|midi aperte.
CLOSEFIL[E]Chiude i file aperti.
DEL[ETE]pathA 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 nuovaA 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 RESETDescrizione
SOFT RESETUn breve tocco resetterà solo lo ZX81. Il LED verde lampeggerà.
HARD RESETUna pressione più lunga, circa 1,5 secondi, resetterà lo ZX81 e il controller dell’interfaccia. I LED verde e giallo lampeggeranno.
FACTORY RESETUna 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

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|$DFSono 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|$1FSono 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.

APIDescrizione
1API_ZXPANDCMD8178, $1ff2Questa è 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.
2API_STREAMREAD8180, $1ff4Esegue 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.
3API_RESPONSE8182, $1ff6Attesa il completamento di un comando eseguito in precedenza.
Al ritorno: A = codice di errore
4API_FILEOP8184, $1ff8Esegue 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
5API_SENDSTRING8186, $1ffaScrive una stringa su ZXpand.
All’ingresso: DE -> stringa terminata da HBT, oppure 0 per inviare una stringa vuota
6API_XFER8188, $1ffcTrasferisce dati da/verso ZXpand.
All’ingresso: DE -> buffer di memoria, L = conteggio byte, A = modalità ($00 = lettura da ZXpand, $01 = scrittura su ZXpand)
7API_RDJOY8190, $1ffeLegge 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.

BitSignificato
7su/avanti
6giu’/indietro
5sinistra
4destra
3fuoco

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:

PinFunzionePinFunzioneAnnotazione
1Su2Fuoco
3Giu45Volt
5Sinistra6GND
7Destra8RX
9TX103.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 ErroreDescrizione Errore
1Errore irreversibile del disco. La scheda non è leggibile a causa di un problema hardware o non è formattata.
2Errore interno. Le strutture del file system della scheda sono incoerenti. Il ripristino dovrebbe risolvere il problema.
3Non pronto. La scheda non risponde o non è presente alcuna scheda.
4Non trovato. Il file non esiste.
5Nessun percorso. La directory non esiste.
6Nome non valido. Il nome specificato contiene caratteri non validi.
7Protezione da scrittura. È stato effettuato un tentativo di aprire un file di sola lettura per la scrittura.
8Esiste. È stato effettuato un tentativo di aprire un file per la scrittura, ma il nome è già in uso.
9Errore di avvio. Menu.p non trovato nella directory principale della scheda.
DNessun FS. La scheda non è formattata o è danneggiata.
FTimeout. 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)