Descrizione del progetto SuperVozelj (versione V80 del 06/08/1998)
   ==================================================================

                         Matjaz Vidmar, S53MV

 ( traduzione Andrej Santin, IV3KCB del 08/08/1998
   IV3KCB@IV3CJT, IV3KCB@S50BOX, iv3kcb@ljutcp.hamradio.si
   schemi, c.s. ed altro trovate su http://www.hamradio.si/hamradio )


1. Descrizione
--------------

Il progetto del SuperVozelj (super nodo, si legge SUPERVOZEL
n.tr.) include la progettazione e la costruzione di rtx,
computer per nodi (volgarmente TNC n.tr.) ed il relativo
software per costruire una rete radioamatoriale per il
packet-radio la piu' veloce possibile. I nodi SV usano i
microprocessori della famiglia Motorola MC680xx e percio' il
software e' scritto in assembler 68k. Questa configurazione
permette velocita' di alcuni 100kbps usando gli interrupt e fino
ad alcuni Mbps usando circuiti DMA MC68450 o processori MC68302,
MC68360 e suoi successori. Il software deve essere scritto in modo tale
che sia il piu' indipendente possibile dalla configurazione
hardware. In questo modo si facilita' lo sviluppo senza grosse
modifiche.

La versione attuale funziona come nodo packet radio a 8 canali con
l'aggiunta di SW per la scheda A/D (slikolov) alla quale si puo'
collegare una telecamera CCD. Puo' usare una CPU MC68010 o MC68020, puo'
usare un DMA MC68450 e tre o quattro SCC Z8530 (uno su DMA e tre su
interrupt oppure solo tre su interrupt). In questa configurazione si
raggiungono 4Mbps con il DMA (somma dei due canali) e 200kbps con gli
interrupt (somma delle velocita' dei 6 canali con il clock della CPU a
12 MHz).

La versione attuale del SV si adatta automaticamente alla CPU montata
(MC68010 o MC68020) e alla presenza o meno della scheda DMA. Nella
modifica del software per la CPU MC68020 bisogna tenere in conto i
diversi tempi di esecuzione visto l'uso della memoria cache.

Il sorgente di SVV80 in assembler 68k (con i commenti) e' lungo
200196 bytes, compilato 20296 bytes.

La versione V80 richiede il seguente hardware:
 (1) piastra CPU del computer DSP (versione per DMA) con 32k EPROM 27C256
 (2) una piastra da 1Mbyte (o solo 4 chip per 512kbyte) sull'indirizzo $200000
 (3) piastra DMA-SCC con MC68450 e un Z8530
 (4) piastra SCC con tre Z8530
 (5) piastra bus (5 slot) e alimentatore del computer DSP
 (6) due sincronizzatori di bit/scrambler per 1.2Mbps
 (7) fino a 6 diversi modem con relativo circuito DCD
 (8) rtx adeguati (banda passante, txdelay, ecc... n.tr.)
 (9) piastra per il reset hardware remoto
(10) telecamera CCD con relativa interfaccia (slikolov)
(11) convertitore A/D lento ADC0804

Clock tipici sono: 10-14MHz per MC68010 o MC68020, 8-12MHz per MC68450,
8-12MHz per il PCLK Z8530, 4.9152MHz per i clock dei canali su interrupt
e 9.8304MHz per la sincronizzazione di bit dei canali DMA a 1.2288Mbps.
Alcune versioni CMOS dei Z85C30 danno problemi sulla scheda DMA quando
sono attivi tutti e due i canali. La scheda DMA deve essere modificata
(resistenze di smorzamento sul bus e diodo/resistenza sulla linea DTACK)
per usarla con la CPU MC68020 e per clock maggiori.

2. Uso del SuperVozelj
----------------------

Il SuperVozelj puo' funzionare sia come packet-radio digipeater, nodo
packet-radio e come router (instradatore) di datagram. In tutti i modi
di funzionamento e' molto importante l'uso corretto dei nominativi e dei
relativi SSID.

2.1. SuperVozelj usato come digipeater
--------------------------------------

Il SuperVozelj DIGIPEATER si puo' usare solo con il suo
nominativo e non con il suo IDENT. Uso dello SSID:

(1) se lo SSID del nominativo del SuperVozelj e' 0, allora il
    frame viene interpretato come un datagram e viene immesso
    in rete in base ai dati delle tabelle di instradamento o
    ritrasmesso come frame digi sul canale relativo.
(2) se lo SSID del nominativo del SuperVozelj e' uguale al
    numero di un canale esistente allora il frame viene
    ritrasmesso sul canale relativo. In questo caso lo SSID del
    SuperVozelj viene scambiato con il relativo numero del
    canale per consentire la risposta.
(3) se lo SSID e' maggiore dei canali disponibili il frame
    viene rifiutato.

Il SuperVozelj nel modo digipeater modifica solamente lo SSID e
il digi bit del proprio nominativo e lascia inalterato il
contenuto del frame ritrasmesso.

2.2. SuperVozelj usato come nodo
--------------------------------

Il NODO SuperVozelj pone in collegamento stazioni che usano il
protocollo AX.25 standard. In questo modo e' compatibile con
tutti i sistemi esistenti. Per la comunicazione tra nodi
SuperVozelj si possono pero' usare anche altri protocolli e
altri formati dei frame. La versione attuale usa solo il
frame SABM (connect request) modificato (e percio' non
standard) per comunicare con altri SuperVozelj.

A sua volta pero' usa una versione dell'AX.25 migliorata con
questi vantaggi:

(1) usa esclusivamente la versione 2 del protocollo AX.25,
    perche' la versione 1 non viene piu' usata. La trasmissione dei
     e relative conferme e' mantenuta al minimo come specificato
    per l'AX.25V2. Con il comando X l'utente puo' cambiare il protocollo
    d'ingresso/uscita con uno piu' efficiente che non manda .
(2) La trasmissione e' controllata con la logica
    slottime/p-persistence. La lunghezza del slottime e' uguale
    al txdelay (flag iniziali), p-persistence e' la probabilita'
    di andare in trasmissione quando il DCD non e' attivo.
(3) il tempo di attesa alla conferma (FRACK) e' proporzionale al
    numero delle ripetizioni (RETRY). In questo modo con
    l'aumento del traffico tutti i collegamenti rallentano per
    evitare eventuali sconessioni.
(4) il tempo di attesa (FRACK) e' proporzionale anche ad un
    numero casuale: cosi' si abbassa la probabilita' di
    collisione fra pacchetti di due stazioni che non si sentono
    (problema dei terminali nascosti n.tr.).
(5) dopo la ricezione di una conferma del pacchetto il SuperVozelj
    aspetta per il tempo di FRACK prima della trasmissione del prossimo
    pacchetto: in questo modo si diminuisce la velocita', pero' si da
    piu' possibilita' alle stazioni piu' deboli di accedere al canale !
(6) il numero dei frame in un pacchetto (MAXFRAME) dipende dalla
    qualita' del collegamento e si aggiorna automaticamente. Ogni frame
    REJ (perdita di frame nella sequenza) e ogni mancata conferma
    decrementano di 1 MAXFRAME. Ogni RNR (richiesta di fermare la
    trasmissione) mettono MAXFRAME a 1. Ogni conferma valida invece
    incrementa di 1 fino ad un massimo di MAXFRAME a 7.
(7) il frame RNR aumenta il tempo di attesa alla ripetizione
    del SuperVozelj rapportato al FRACK del canale specificato.
(8) il SuperVozelj da la conferma solo se l'altra stazione lo
    richiede con  o se non c'e' traffico di frame Info.
    Cosi' diminuisce la probabilita' che alcuni programmi per PR
    (WA8DED, TheFirmware...) "impazziscono"  se ricevono troppi
    pacchetti.
(9) nel caso di un cattivo funzionamento del circuito DCD
    (problemi con il modem, disturbi intenzionali ecc.) il
    SuperVozelj va in trasmissione dopo un certo tempo (minimo
    FRACK) anche se il canale pare occupato (male minore).

Il SuperVozelj distingue fra collegamenti d'entrata e d'uscita.
Il collegamento in entrata e' caratterizzato dal nominativo
dell'utilizzatore e dal nominativo o ident del SuperVozelj con
uno SSID qualsiasi. Il collegamento in uscita ha il nominativo
dell'utilizzatore con lo SSID incrementato (ciclicamente) di 1
(se non specificato in altro modo nel comando), e il nominativo
della stazione da chiamare. Naturalmente i collegamenti sia
d'entrata che d'uscita possono avere i nominativi di eventuali
digipeater. Il SuperVozelj sa distinguere anche collegamenti
che si distinguono soltanto nei digipeater diversi.

Per effettuare un collegamento packet-radio tramite SuperVozelj
bisogna prima di tutto chiamare il SuperVozelj usando o il
nominativo o l'ident. In questo modo si entra nel modo comando
dove e' possibile usare alcuni comandi: conettere un'altra
stazione, ricevere alcune informazioni sul funzionamento del
sistema e di chi lo sta usando e la possibilita' ai sysop di
cambiare certi parametri. Nel modo comando e anche disponibile
un semplice modo conferenza.

Il nodo SuperVozelj interpreta un frame AX.25 come un
comando senza tener conto di eventuali CR, LF o altri caratteri
dello stesso frame. Percio' e' meglio settare il TNC e il
programma terminale in modo che venga trasmesso il pacchetto
quando si preme il CR (normalmente sono settati in questo modo,
invece non e' sempre cosi' con alcuni programmi terminale per Internet!).

Il SuperVozelj puo' essere chiamato con uno SSID qualunque. Percio' c'e'
la possibilita' di 32 collegamenti contemporanei (16 diversi nominativi
e 16 diversi ident). Non e' possibile collegare il SuperVozelj con lo
stesso call e SSID, ma con diverso SSID da parte dell'utilizzatore. In
questo modo si evitano problemi di looping o di errori nelle chiamate.

Il SuperVozelj risponde sempre ad ogni comando valido o errato,
sempre che ci sia ancora spazio in memoria (20 frame AX.25
per ogni utilizzatore). Se il collegamento d'uscita s'interrompe
viene subito segnalato al chiamante e si distruggono i dati
della memoria buffer. Se l'utilizzatore aveva chiamato il
SuperVozelj con lo SSID 0-11 il SuperVozelj viene posto di nuovo
nel modo comando (funzione RECONNECT). Se invece lo SSID del
chiamante era 12-15, il SuperVozelj segnala l'errore e
interrompe il collegamento.

Se invece s'interrompe la conessione d'entrata il SuperVozelj lo
segnala al chiamato e disconette. Comunque il SuperVozelj
segnala sempre perche' ha interrotto la conessione: troppe
ripetizioni, stazione occupata (busy), sconessione dell'altra
stazione, chiamata con nominativi non permessi o conferma la
richiesta di sconessione.

Il SuperVozelj ha la possibilita' di effettuare chiamate da
tabelle che vengono aggiornate o dal sysop (tabella A), oppure dai
SuperVozelj tra loro (tabella V). In questo caso cerca il nominativo
nella tabella (non tiene conto dello SSID) e trova la strada (path
n.tr.) per arrivarci e chiama avanti. In questo modo e' assicurata la
compatibilita' con tutti i nodi conosciuti: TheNet, Flexnet, SuperVozelj
ecc... Nella tabella possono essere immessi anche i nominativi dei BBS,
DX-Cluster ecc...

Se il nominativo della stazione che si chiama compare nelle
liste degli utilizzatori correnti (comando U) oppure precedenti
(comando G) il programma si comporta in questo modo: da solo fa
la chiamata su un specifico canale con lo SSID relativo. Se la
stazione ha chiamato tramite digipeater, il SuperVozelj chiama
tramite gli stessi digi. Se invece la stazione e' entrata
tramite un'altro SuperVozelj, allora il programma prima chiama
il SuperVozelj interessato al quale passa la richiesta di
conessione.

Esiste una priorita' nelle chiamate automatiche: prima viene controllata
la lista caricata dal sysop (comando A), poi la lista dei nodi che si
comunicano tra loro i SV (comando V), poi la lista corrente (qso vivi)
(comando U) e per ultima la lista dei precedenti collegamenti (qso
morti) (comando G). Ovviamente da ogni lista si prende il primo
nominativo che si sta cercando. ATTENZIONE ! Questo automatismo puo'
essere sempre disabilitato con la chiamata su uno specifico canale
oppure tramite digipeater.

2.3. Il SuperVozelj come datagram router
----------------------------------------

Il sistema di collegamento appena descritto e' molto efficiente, perche'
i frame contengono nel campo indirizzi solo due nominativi e le
conferme o eventuali ripetizioni avvengono su ogni tratto
indipendentemente. Per gli utilizzatori "umani" questo sistema
rappresenta sicuramente il miglior modo d'uso, ma non per le stazioni
automatiche (BBS, sistemi vocali DVMS, TCP/IP ecc.) che con difficolta'
capiscono le informazioni provenienti dai nodi. Purtroppo e' quasi
impossibile programmarle in maniera tale che decodifichino eventi
anomali e che reagiscano di conseguenza.

Di tutti gli utilizzatori i maggiori problemi hanno quelli che
utilizzano il protocollo TCP/IP. I protocolli che usano datagram non
prevedono collegamenti a conessione ma i datagram girano in rete piu' o
meno come i frame tramite semplici digi. Un collegamento packet-radio
tramite semplici digi (quello con chiamata "via" parecchi nominativi)
e' normalmente parecchio inefficiente. La probabilita' di perdere il
frame aumenta velocemente con il numero dei digi che bisogna passare.
Non solo, ma anche la conferma deve rifare la stessa strada inaffidabile
inversa, perche' le conferme avvengono su tutto il collegamento e non
per singola tratta.

Per compatibilita' con tutti i programmi (scritti male!) per BBS, DVMS,
TCP/IP ecc. il SuperVozelj ha la possibilita' di collegamenti "digi"
virtuali. I frame "digi" viaggiano su collegamenti di servizio tra SV
con tutti i vantaggi di conferme/ripetizioni sulle singole tratte. In
questo modo la probabilita' di perdita di un frame si riduce solo sulle
due tratte entrata/uscita dalla rete dei SuperVozelj.

Il protocollo del "digi" virtuale viene attivato con un frame con il
nominativo "via" e SSID 0 del SuperVozelj d'entrata. A questo punto il
SV cerca il nominativo del destinatario nelle tabelle (per il momento
solo nella tabella G). Se il destinatario e' raggiungibile direttamente
il SV si comporta come un digi normale. Se no in base alle indicazioni
delle tabelle il SV genera una conessione di servizio con il SV vicino,
gli manda il frame e aspetta la conferma.

Lo stesso fara' il SV vicino, cerchera' nelle sue tabelle e agira' di
conseguenza. Questo si ripetera' tra i vari SV che sono frapposti tra
chiamante e destinatario. L'ultimo SV della catena mandera' il frame al
destinatario con il proprio nominativo come "digi". In questo modo e'
assicurata anche la risposta (direzione inversa per il destinatario).

Il protocollo appena descritto mantiene integri i nominativi del
chiamante e del destinatario, i bit Command/Response, i bytes CONTROL e
PID e ovviamente il contenuto del campo dati. Questo dovrebbe essere
sufficiente al protocollo TCP/IP che non utilizza il CONTROL e PID
dell'AX.25 standard.

La conessione di servizio per il trasferimento di frame "digi" virtuali
avviene con il nominativo del chiamante e SSID complementato, invece lo
SSID del chiamante serve per lo SSID del SV vicino chiamato. Il comando
che viene eseguito per il trasferimento e' #. Nello stesso tempo con
questo comando si aggiorna anche la tabella G per facilitare la
risposta.

La conessione di servizio viene effettuata appena viene ricevuto un
frame da mandare avanti e viene interrotta automaticamente dopo 3
secondi. In questo modo si posso trasferire piu' frame in una sola
conessione. Durante la sconessione viene aggiornata la tabella G. Se
durante l'attesa della conferma UA al DISC mandato viene ricevuto un
frame questo viene perso. Con le temporizzazioni giuste questo problema
e' molto raro.

La tabella G viene aggiornata anche con la ricezione di frame con piu'
digi e l'ultimo digi con SSID 0. Percio' e' possibile effettuare
collegamenti via "digi" virtuali anche con piu' digi all'entrata.
Se lo SSID e' diverso da 0 il frame viene ritrasmesso sul canale
indicato dallo SSID.

Per un corretto utilizzo del "digi" virtuale bisogna avere le tabelle G
sempre aggiornate. Bisogna anche che l'utilizzatore setti i parametri
delle temporizzazioni tenendo conto che i frame non viaggiano attraverso
un solo digi, ma ce ne possono essere piu' di uno. Com'e' intuibile
questo tipo di collegamenti sono piu' dispendiosi sia nell'utilizzo
dei canali radio sia delle risorse delle CPU dei nodi, percio' si
consiglia l'utilizzo solo nei casi qui non sia possibile nessun altro
modo.

2.4. Comandi del SuperVozelj
-----------------------------

I comandi validi del SuperVozelj (viene decodificato solo il primo
carattere della prima parola) sono:

A(vtomat) ...mostra la tabella per le chiamate automatiche. Ogni
          riga incomincia con il nominativo da chiamare, seguono
          i nominativi dove chiamera' il SuperVozelj. Ci sono
          alcuni casi in cui il SV riconosce chiamate anomale e
          le ignora (nominativi uguali, chiamata via digi,
          chiamata su un solo canale ecc.)

C(onnect)     .......................
...tenta il collegamento. Il SuperVozelj chiama su tutti i
   canali a disposizione contemporaneamente ed effettua il
   collegamento dove riceve la prima risposta. Attenzione
   all'ordine inverso dei nominativi dei digipeater! Tra i
   nominativi non ci devono essere altre parole (V o VIA ecc...)
   poiche' vengono interpretate come nominativi. Se il
   nominativo compare nella tabella, usa queste informazioni per
   continuare a chiamare. Se non si specifica lo SSID viene
   usato quello, con il quale e stato chiamato il SuperVozelj:
   in questo modo si semplificano le multiconessioni. Se invece
   vogliamo chiamare una stazione con lo SSID -0, bisogna
   specificarlo, esempio: C S53MV-0. Il SuperVozelj controlla
   che non ci siano piu' collegamenti con gli stessi nominativi
   e segnala gli eventuali doppioni non consentendo la
   conessione.

C(onnect)      .............
...tenta il collegamento solo sul canale specificato. Il numero
   del canale va da 0 a 8. Tutte le altre combinazioni di numero
   o caratteri vengono interpretati come nominativi. Se si
   chiama su un canale specifico oppure via digipeater si esclude i vari
   automatismi ! Il canale 0 viene usato quando si vuole chiamare su
   tutti i canali. Ogni chiamata viene passata avanti dal SuperVozelj
   con lo SSID del chiamante incrementato di 1 (ciclicamente). In questo
   modo si distinguono i collegamenti d'entrata e uscita. Volendo si
   puo' specificare un'altro SSID d'uscita aggiungendo al comando
   connect -. Attenzione: nel caso di SSID sbagliati si
   rischia di compromettere anche il proprio link con il SuperVozelj. La
   richiesta di un particolare SSID viene trasmessa avanti ad eventuali
   altri nodi, logicamente viene interpretata correttamente solo dai nodi
   SuperVozelj.

D(atum/ura) ...stampa data e ora se sono presenti nella piastra
            CPU i due integrati uPD71055 e uPD4990. Possono essere
            omessi senza pregiudicare il funzionamento del
            SuperVozelj. L'orologio puo' essere anche software.
            uPD71055 viene usato contemporaneamente anche per
            telecomandi/telemetria e da altri circuiti del
            SuperVozelj, ad esempio l'interfaccia per la
            telecamera CCD o il convertitore A/D lento.

E ...stampa i valori delle tre entrate analogiche misurate
     dal convertitore A/D lento a 8-bit ADC0804 (0V-5.12V con
     valori 0-255, passo 20mV). Essendo collegato alla stessa
     porta parallela dell'interfaccia della telecamera, viene
     inibito durante la conversione JPEG (15-30 secondi). Il
     significato dei valori dipende da cosa e' stato collegato
     all'entrate analogiche (tensione dell'alimentazione o della
     batteria di backup, NTC/PTC per la temperatura ecc.). Se
     non e' collegato nulla i valori sono del tutto casuali.

G(lej) ...stampa la lista degli utilizzatori precedenti nel
       formato:  . Dal carattere
       che compare tra il numero del canale e il nominativo si
       puo' distinguere:
       : ...entrata diretta su SV (o dal TheNet),
       * ...entrata su SV VIA digi,
       > ...entrata da un SV.
       Il nominativo viene messo nella lista solo dopo la
       sconessione dal SuperVozelj. L'ordine nella lista
       corrisponde all'ordine cronologico delle sconessioni.
       Nella lista si mantiene l'informazione piu' recente della
       sconessione compatibilmente con lo spazio disponibile per
       la lista.

G(lej)  ...
...cerca il nominativo nella lista e stampa l'ora e la data
   dell'ultima sconessione (se sono presenti i due integrati
   uPD71055 e uPD4990 oppure la procedura software), segue il
   numero del canale d'entrata, numero di collegamenti
   effettuati su questo canale, il nominativo d'entrata (vedi
   comando U) e il numero totale dei caratteri transitati nelle
   due direzioni. Questo per ogni canale. Si puo' usare il
   carattere wildcard "*" ad esempio per vedere un gruppo di
   nominativi, es.: G IV3*.

G(lej)   ...
...cerca il nominativo nella lista sul canale prescelto. Si puo'
   usare il carattere wildcard "*". Puo' essere utile nel caso
   di liste molto lunghe con G .

H(elp) ...stampa il testo di help (normalmente in inglese).

I(nfo) ...stampa il testo info.

N(ovice) ...stampa il testo novice (notizie).

O(dzivi) ...stampa i tempi di risposta dei nodi vicini ai quali
         trasmette la lista dei nodi e alle stazioni che puo' collegare.
         Ogni riga inizia con il numero del canale, segue il call con
         relativo SSID. Tra parentesi il primo numero si riferisce ai
         minuti dall'ultima chiamata effettuata con successo, il secondo
         invece la lunghezza del collegamento in millisecondi. Il canale
         0 significa che la stazione ha risposto con un DM (BUSY).

P(oslusa) ...stampa la lista dei nominativi ascoltati delle
          stazioni che hanno trasmesso pacchetti UI (beacon con
          il campo CONTROL $03 o $13) in diretta (non via digi).
          Ogni linea e' preceduta dal numero del canale, segue il
          nominativo ascoltato con relativo SSID. Fra parentesi il
          primo valore sono i minuti trascorsi dall'ultimo ascolto
          e il secondo il numero totale dei pacchetti ascoltati.

Q(uit) ...il SuperVozelj interrompe la chiamata con l'utilizzatore.

S(poroci)   ...
...manda il testo al call (o ad un gruppo) se si trova nel modo
   comando o se chiama e sta aspettando la conessione. Lo SSID
   non viene controllato! Si puo' usare il carattere wildchar
   "*": S *  manda il testo a tutte le stazioni che sono
   nel modo comando, S IW*  viene mandato a tutti gli IW
   e permette un semplice modo conferenza.

S(poroci)   
...uguale a Sporoci, pero' solo su un canale specifico.

U(porabniki) ...stampa il numero degli utilizzatori conessi al
             SuperVozelj e il numero di blocchi memoria liberi.
             Segue la lista di tutti i collegamenti in corso.
             Ogni collegamento (d'entrata o d'uscita) e'
             descritta con il numero del canale, MAXFRAME
             momentaneo, il call con eventuali digi e la quantita'
             di traffico in entrambi in sensi. L'ordine e'
             sempre   .
             L'eventuale nominativo tra parentesi, es. (S55YNG),
             significa il SuperVozelj della prima entrata ovvero
             il nominativo da chiamare avanti. In mezzo e'
             segnalato il numero dei pacchetti in attesa per
             entrambe le direzioni.

U(porabniki)  ...si limita a stampare gli utilizzatori
                      di un solo canale. Si usa quando ci sono
                      molti utilizzatori e il comando U diventa
                      illegibile perche' troppo lungo.

V(ozlji) ...stampa la tabella dei nodi che i SV si mandano tra di loro
         (autorouting). La tabella contiene i nominativi e un numero che
         indica la qualita' e viene incrementato ad ogni collegamento.
         (nel testo originale Matjaz usa una parola che indica la
         qualita' in base alla velocita' di collegamento, percio'
         valori bassi (1-9) indicano un link corto e veloce, valori medi
         (decine) link lunghi, valori alti (centinaia) link morti
         n.d.t). Alla fine viene stampato il valore massimo possibile e
         la costante (unita') di tempo per calcolare i valori di
         qualita'.

X  ...comando per scegliere il protocollo d'entrata e d'uscita:
           0 = AX.25V2 sia in che out (protocollo standard)
           1 = AX.25V2 in, V1 out (senza )
           2 = V1 (senza ), AX.25V2 out
           3 = V1 sia in che out (entrambi senza )
           I collegamenti tra SuperVozelj sono sempre V1
           indipendentemente dal valore di X. Il valore X non viene
           trasmesso avanti. Il valore di partenza per gli user e'
           sempre X 0 e X 2 se la chiamata viene da parte di un'altro
           SV.

Y <#starthor> <#startvert> <#pixel> <#linee> <#compressione> ........
...trasmette le foto dalla telecamera CCD. #starthor e' l'inizio della
foto in orizzontale, #startvert e' l'inizio della foto in verticale,
#pixel e' il numero dei punti in una linea, #linee e' il numero di linee
della foto. Se il quinto parametro per la compressione e' 0 oppure non
c'e' la foto non e' compressa e ad ogni byte corrisponde un punto. Il
valore 0 corrisponde al sincronismo e il 255 al livello del bianco.

Se il valore della compressione e' tra 1 e 7 questo corrisponde al
livello di compressione JPEG. Il valore 1 significa un basso valore di
compressione, percio' la foto sara' di ottima qualita' pero' pagando in
lunghezza, il valore 3 a JPEG Q=75 e il valore 4 a JPEG Q=50.
L'algoritmo JPEG richiede 10-20 secondi di calcolo e ulteriore memoria,
per questo motivo durante il calcolo l'interfaccia risulta occupata.
Attenzione! I dati JPEG non contengono il header JPEG standard, perche'
il software SV usa tabelle di codifica JPEG fisse. I dati non
contengono bytes $00 forzati.

Prima di usare il comando Y controllare con il comando U quanti blocchi
di memoria sono liberi. Nel caso non ci sia memoria sufficiente le foto
risulteranno tagliate. Durante il calcolo JPEG il SV rifiuta un'altro
comando Y rispondendo con un adeguato messaggio. I parametri vengono
controllati e se non sono adeguati viene segnalato errore. I valori
della lunghezza della linea e del numero di linee viene sempre
convertito in un multiplo di 8 per un'eventuale compressione JPEG.

Dopo il comando connect, il SuperVozelj provvede a trasferire
alcuni (uno o due) frame/comandi seguenti alla stazione
chiamata. Nel caso si voglia interrompere una richiesta di
conessione mandare percio' tanti CR (ritorno carrello, ovvero
frame vuoti) fino a quando il SuperVozelj non ci risponde con la
linea del prompt e il nominativo del SuperVozelj.

L'inoltro automatico della richiesta di conessione semplifica la
ricerca della strada fino al nostro corrispondente. Se il
nominativo compare nella lista U o G, basta dare il comando C
. I SuperVozelj automaticamente fanno la ricerca
inversa attraverso gli altri SuperVozelj e anche tramite normali
digipeater (percio' anche tramite i nodi Flexnet !).

ATTENZIONE! Il buon funzionamento di questo automatismo richiede
un minimo di attenzione anche da parte degli utilizzatori. Sono
almeno due le cose alle quali bisogna stare attenti:
(1) Evitate i loop ritornando al SuperVozelj iniziale. Nel caso
    ci chiami qualcuno i SuperVozelj lo mandano in giro
    all'infinito provocando QRM inutile sui canali gia'
    sovraffollati. Se per caso vi succede di formare un loop
    bisogna disconettersi SOLO con il comando Q(uit) e MAI
    con il DISC del proprio TNC ! Nel caso avete dei dubbi
    controllate le liste G(lej) che devono contenere
    informazioni logiche. Ogni chiamata aggiorna le varie liste
    dell'intero percorso.
(2) Se si vogliono avere piu' collegamenti contemporanei con il
    SuperVozelj bisogna usare un solo SSID nel proprio
    nominativo (normalmente -0 o niente) e chiamare il
    SuperVozelj con diversi SSID, es. S55YNG-1, S55YNG-2 ecc.
    ovvero GORICA-1, GORICA-2 ecc. In questo modo evitate i
    problemi che possono crearsi a causa dell'incremento
    automatico dello SSID da parte del SuperVozelj oppure della
    chiamata automatica verso il mio nominativo. Percio' evitate
    di chiamare contemporaneamente GORICA con diversi SSID, es.
    S53MV-1, S53MV-2 ecc.

Il SuperVozelj esegue tutti i comandi immediatamente. Unica
eccezione sono i comandi subito dopo al comando Connect. A causa
della limitazione del buffer (20 frame AX.25) puo' succedere
di perdere parte delle risposte ai nostri comandi. Questo
succede se si mandano piu' comandi, specialmente gli: A, G, I, N
e U. I comandi vengono eseguiti ma per mancanza di spazio le
risposte vengono tagliate. In questo caso alla fine non si
riceve il prompt con il nominativo del SuperVozelj. Risposte
incomplete possono essere generate gia' da un solo comando U o
G. In questo caso ci si aiuta con la stampa parziale:
U , G , G , G  .

3. Manutenzione del SuperVozelj
-------------------------------

Al sysop sono a disposizione i seguenti comandi aggiuntivi, i
comandi contrassegnati con (S) sono eseguibili soltanto dopo
aver risposto correttamente al comando K:

A _ ...cancella la tabella di chiamata (S), (= M 3F000 0).

A  ...aggiunge il testo alla tabella di chiamata (S).
          Risponde con il numero di carattere aggiunti. La tabella
          inizia con il nominativo senza SSID e poi segue la strada
          scritta cosi' che venga interpretata correttamente dal
          comando C.

B ...stampa il testo del frame UI (beacon).

B _ ...cancella il testo del beacon (S), (= M 3FC00 0).

B  ...aggiunge testo al beacon (S). Risponde con il
          numero di caratteri aggiunti.

D YYMMDDHHMMSS ...setta la data e l'ora (S).

F ...stampa la lista dei nominativi non permessi (bad list) (S).
     Queste stazione non possono chiamare il SuperVozelj, non
     possono usarlo come digi e non si puo' collegarle dallo
     stesso.

F _ ...cancella la lista dei nominativi non permessi (S),
    (= M 3FC00 0).

F    ...aggiunge i nominativi alla lista
                          dei nominativi non permessi (S).

G ...il comando e' uguale per tutti. Per cancellare la lista G
  non c'e' un comando specifico. La lista G puo' essere
  cancellata azzerando il flag $AA55 all'inizio della memoria
  che viene assegnata alla lista G, percio' basta usare il
  comando M 200000 0 (S) in questa versione. Questa operazione
  e' utile solo nel caso la lista contenga dati che possono
  provocare problemi al programma. Si posso fare anche
  cancellazioni parziali, es. M210000 0 (S).

H _ ..cancella il testo del help (S), (= M 3D800 0).

H  ...aggiunge il testo al testo dell'help (S). Risponde con il
          numero di caratteri aggiunti.

I _ ...cancella l'infotext (S), (=M 3D000 0).

I  ...aggiunge il testo al infotext (S). Risponde con il
          numero di caratteri aggiunti.

J ...manda un frame UI su tutti i canali (beacon). Il
  SuperVozelj trasmette un frame UI con il proprio nominativo e
  lo SSID corrispondente al canale, indirizzato a VOZELJ,
  CONTROL $03 (UI), PID $F0 con il testo del comando B. Il
  SuperVozelj manda un primo beacon dopo 10 secondi dopo la
  partenza del programma e poi ogni 5 minuti. Lo stesso succede
  dopo il comando J per poi ripeterlo dopo 5 minuti.

J  ...manda un frame UI su un canale specifico (0=su
           tutti i canali). In questo modo si evita del QRM
           inutile, specialmente quando si provano link
           specifici.

J   ...manda piu' frame UI (S). Viene usato per
                    controllare i link.

ATTENZIONE! La richiesta di molti frame UI blocchera' per alcuni
minuti il traffico sui canali piu' lenti (1200bps e 2400bps) !
Il formato dei numeri del comando e della risposta e' decimale.
Il numero dei frame UI e' limitato dal buffer dei frame che sono
in attesa di trasmissione (150 frame).

K ...comando sysop: password tipo TheNet a cinque numeri. La
  risposta puo' essere di lunghezza variabile, il SuperVozelj
  riconosce la sequenza giusta indipendentemente dove si trova
  nella riga di risposta e ci segnala l'esito. In caso di
  risposta positiva la stazione resta nel modo sysop fino
  all'invio di un'altro comando K ovvero fino alla sconessione.

L  ...legge in hex i successivi 256 bytes della
                 memoria (S). L'indirizzo deve essere pari.

L   ...legge in bin il numero richiesto
                 di bytes a partire dal indirizzo specificato (S).
                 Il comando occupa molta memoria. Alla fine si
                 esce automaticamente dal modo sysop. I valori
                 dell'indirizzo/lunghezza devono essere in hex.
                 L'indirizzo puo' essere anche dispari.

L    ...copia una parte della
                 memoria dall'origine alla destinazione (S).
                 l'inizio dipende dal valore piu' basso. Tutti
                 e tre i valori sono in hex e possono essere
                 anche dispari.

M  ...legge una word da 16-bit (S).

M   ...immette una nuova parola all'indirizzo
                       (S). Risponde con la vecchia e con la
                       nuova parola dell'indirizzo.

M     ..................
...immette le parole specificate in memoria partendo dal
indirizzo indicato. Risponde con l'indirizzo di partenza e
quello della locazione seguente l'ultima locazione scritta.

N _ ..cancella il testo novice (S), (=M 3E000 0).

N  ...aggiunge il testo a novice (S). Risponde con il
          numero di caratteri aggiunti.

O  ...cancella parzialmente la lista dei tempi di risposta,
           lasciando solo  righe (S). O 0 cancella tutto.

P  ...cancella parzialmente la lista degli ascolti, lasciandone
           solo  righe (S). P 0 cancella tutto.

R ...stampa la versione del programma, il tipo del microprocessore e del
  DMA (se presente) montati, il tempo di funzionamento del SuperVozelj
  (in minuti), la velocita' del loop primario (il numero corrente dei
  cicli al secondo). Seguono alcuni dati statistici per ogni canale:

  (1) percentuale dell'attivita' del DCD (canale occupato),
  (2) percentuale dell'attivita' del PTT (funzionamento del TX),
  (3) numero dei frame in attesa di trasmissione,
  (4) numero dei collegamenti in entrata,
  (5) numero di collegamenti in uscita.

  Il DCD e il PTT vengono campionati ogni millisecondo, la percentuale
  viene calcolata nell'ultimo minuto in base al contatore dei minuti che
  compare all'inizio. Il numero dei collegamenti si riferisce
  dall'ultimo reset. In fine compare l'indirizzo base del programma
  (registro A6) e l'indirizzo di chiamata dal loop primario. Se e' 0
  significa che non viene effettuato il salto. Segue il periodo di
  chiamata. In fine segnala se l'utilizzatore e' abilitato a sysop.

R  
...setta l'indirizzo di chiamata (S). L'indirizzo e' un numero
   pari esadecimale. Il periodo e' in decimale e specifica il
   numero delle chiamate del loop primario durante la chiamata
   del sottoprogramma. Periodo 0 significa solo una chiamata
   senza ripetizioni. La risposta e' uguale del comando R senza
   altri parametri.

S   ...il funzionamento e' simile al Sporoci
                 normale con la differenza che il testo viene
                 mandato a tutti indipendentemente se sono nel
                 modo comando o conessi ad un'altra stazione
                 (S). In questo modo il sysop puo' mandare
                 messaggi in qualsiasi momento (solo alle
                 stazioni "entranti" ! ).

T ...stampa il CTEXT.

T _ ...cancella il CTEXT (S), (= M 3FA00 0).

T  ...aggiunge il testo al CTEXT (S). Risponde con il
          numero di caratteri aggiunti.

V ...il comando e' uguale per tutti. La tabella puo' essere cancellata
  con M 21E000 0 (S). E' possibile anche una cancellazione parziale con
  V  (S).

V 0 ...trasmette immediatamente la lista dei nodi in tutte le direzioni
    (tabella Z) (S). ATTENZIONE, COMANDO PERICOLOSO! I valori della
    qualita' vengono incrementati ad ogni V 0. Nel caso venga ripetuto
    piu' volte puo' provocare loop infiniti! Gli aggiornamenti della
    tabella V vengono eseguiti ogni 7 minuti (dopo V 0) automaticamente.

V  ...setta il valore massimo della qualita' da 1 a 255 (S).
             Il nuovo valore viene considerato nella seguente
             trasmissione della lista V, quando vengono eliminati nodi
             con i valori che eccedono questo numero.

V   ...setta il valore massimo della qualita' e la
                    costante di tempo (S).

W ...stampa la lista dei SuperVozelj adiacenti, ai quali manda
  il SABM modificato, che contiene oltre al CONTROL $3F e PID
  $F0 il campo INFO di lunghezza variabile. I primi sei
  caratteri del campo INFO contengono il nominativo del
  SuperVozelj in ASCII normale cioe' senza shift. Questo SABM
  viene interpretato dal SuperVozelj come richiesta di
  conessione con ulteriori informazioni sull'origine della
  chiamata che viene mostrato nella lista degli utilizzatori.
  Tutti le altre chiamate vengono fatte con il SABM standard del
  AX.25.

W _ ...cancella la lista dei SV adiacenti (S), (= M 3FD00 0).

W  ...aggiunge il testo alla lista dei SuperVozelj
          adiacenti. Risponde con il numero di caratteri
          aggiunti.

Z ...stampa la tabella dei nodi adiacenti da controllare e ai quali
  mandare la lista dei nodi.

Z _ ...cancella la tabella dei nodi adiacenti (S), (= M 3F8000 0).

Z    ...aggiunge alla tabella altri nodi (S), dove
                          path e' composto da :call.
                          Esempio: "1:GORICA" significa che deve mandare
                          la lista dei nodi al nodo GORICA sul canale 1.
                          Se al nominativo si aggiunge lo SSID, non
                          viene mandata la lista, ma si controlla solo
                          con un SABM e DISC.

!   ...aggiunge un nominativo nella tabella dei nodi V
                  se il call non e' ancora presente. Il nominativo e'
                  composto da 6 caratteri e il numero per la qualita' da
                  un byte. Nel caso il bit MSB del primo byte e' settato
                  a 1 si prende come source il call e non l'ident. Il
                  comando non risponde nemmeno con il prompt!

#       .........
...transferisce un frame "digi" virtuale in conessione di servizio:
.. contatore dei trasferimenti (1 byte)
....... nominativo del destinatario (ASCII, 6 bytes)
.... SSID del destinatario (bit 0-3), CR destinatario (bit 6) e
              CR chiamante (bit 7) (1 byte)
.... byte CONTROL del frame (1 byte)
........ byte PID del frame (1 byte)
...... testo del frame (0-255 bytes)

Il comando # non ha nessun messaggio di risposta! Il contatore serve per
prevenire looping infinito del frame. Dopo un certo numero (33) il frame
viene rifiutato.

Essendo i testi A, B, F, I, N, T e V soggetti a continue
modifiche, vengono caricati dal sysop. I testi come pure il
software di controllo del SuperVozelj possono essere modificati
con il comando M. Il listing esadecimale viene preparato con il
programma NAKLADAC sul computer DSP.

Se si usano i programmi packet F1200 e S2400 bisogna settare
PACLEN a 0 cosi' il programma taglia il file .UPL in frame
di lunghezza adeguata. Bisogna fare attenzione a non transitare
via nodi TheNet o simili, perche' cambiando la lunghezza dei
frame confondono il SuperVozelj.

La piastra del reset hardware remoto viene collegata al modem di
un qualsiasi canale se e' di tipo duplex (es. AM7910) o sul
demodulatore. Il segnale di RESET e' la massima sequenza lineare
dal shift-register (polinomio 1+X^5+X^9) con periodo 511. Il
circuito deve ricevere almeno 2048 bit della sequenza per
generare un RESET valido. Questo segnale non si puo' generare
con un TNC, perche' la sua struttura non corrisponde a nessun
frame del AX.25, ma con un opportuno circuito oppure con il
programma RESET sul computer DSP.

Nella tabella di chiamata A tutti i call devono essere scritti
all'inizio riga e con caratteri maiuscoli. Nel caso di call piu'
corti di 6 caratteri e' necessario aggiungere gli spazi
richiesti. Il resto dei nominativi devono essere scritti come
per il comando C semplice cioe' senza automatismi. Anche i
nominativi nelle liste F (bad call) e W (SV adiacenti) devono
essere scritti con le maiuscole, invece non ci sono limitazioni
di spazi o salti di linea. Nelle liste A e F si puo' usare anche
il wildchar "*", pero' solo alla fine della parola.

ATTENZIONE! Il comando F * blocca tutti indistintamente. In
questo caso l'unico call valido e' quello del SuperVozelj (non
l'IDENT) !

I testi dei comandi A, B, F, I, N, T e V sono contenuti nella
RAM CMOS che come l'orologio uPD4990 vengono alimentati dalla
batteria NiCd in assenza di alimentazione e percio' non vengono
persi. Stessa cosa vale per la lista G e la tabella V che non vengono
cancellate NEANCHE con il reset del SV.

L'interfaccia parallela uPD71055 e' programmata per avere la porta
A come entrata, la porta B come uscita e la porta C mista. Sulla
porta C e' collegato l'integrato dell'orologio uPD4990. Sulla
porta A e sulla porta B (PB6 e PB7) e' invece collegata
l'interfaccia A/D per la telecamera CCD e il convertitore A/D
lento ADC0804. Usando il comando M sull'indirizzo $10002 si puo'
scrivere direttamente sulla porta B o leggere la porta A
all'indirizzo $10000. Dopo un reset del SV e dopo l'uso dei
comandi E e Y l'uscita della porta B e' messa a 0.

4. Struttura del programma e settaggio dei parametri
----------------------------------------------------

Il programma del SuperVozelj e' scritto in assembler della
famiglia 68k nel formato che lo riconosce il compilatore ASM68K
del computer DSP. E' scritto in maniera tale da poter essere
relocabile. Infatti nel registro A6 e' definito l'indirizzo base
del programma. Il registro A5 contiene l'indirizzo dell'inizio
dell'area di lavoro in memoria. Per questo bisogna stare attenti
a non modificare questi registri. L'uso degli altri registri non
e' definito, tenendo conto che la maggior parte delle subroutines
non salva il loro valore.

Il SuperVozelj usa la memoria a banchi. Ogni subroutine
all'inizio richiede l'uso di un blocco e alla fine lo rilascia.
Ogni banco ha un numero che si trova nel registro D0. Il valore
0 ha significato di nessun blocco libero o di un blocco
inesistente.

Il funzionamento del programma e diviso in tre parti:
inizializzazione, loop primario e elaborazione degli interrupt.
Il loop primario ha il compito di comandare le
trasmissioni/ricezioni, organizzare i frame ricevuti e
eseguire i comandi diretti. Le routines gestite dagli interrupt
provvedono soltanto alla ricezione e alla trasmissione dei
frame, senza valutare il loro contenuto.

SVV79 controlla il DMA e relativo SCC dal loop principale e per i canali
DMA non utilizza gli interrupt. Stessa cosa vale per il SCC montato
sulla scheda DMA. Il DMA trasferisce i dati dal SCC alla memoria e
viceversa in due passi, passando per un registro interno e generando gli
indirizzi relativi. Per trasferire due bytes il DMA deve fare tre
accessi al bus, perche' il trasferimento tra DMA e memoria e' a 16 bit.

Nel SuperVozelj ci sono alcune funzioni che vengono eseguite
parallelamente:
(1) Ricezione dei pacchetti (separatamente per ogni canale)
(2) Elaborazione, ordinamento e esecuzione dei frame
    ricevuti
(3) Esecuzione dei comandi dati nel modo comando dagli
    utilizzatori
(4) Conferma dei pacchetti ricevuti
(5) Ripetizione dei pacchetti in attesa di conferma
(6) Beacon e trasmissione delle tabelle dei nodi
(7) Preparazione dei pacchetti per la trasmissione e controllo
    dello stato del canale
(8) Trasmissione dei pacchetti (separatamente per ogni canale)
(9) Calcolo delle varie statistiche
(10) calcolo della compressione JPEG

Il programma SuperVozelj non ha comandi per settare i parametri,
ma vengono definiti direttamente nel sorgente del programma. I
parametri possono essere divisi in due gruppi: parametri dei
canali (velocita', ritardi) e suddivisione della memoria.

Parametri dei canali:

(1) bitra, bitrb, bitrc, bitrd, bitre, bitrf
    ...sono le velocita' dei singoli canali in bit per secondo.
    Da questi numeri il SuperVozelj calcola il fattore di
    divisione BRG da mandare ai SCC. Le velocita' devono essere
    sottomultipli di 38400 (per il quarzo BRG 4.9152 MHz),
    diversamente non si posso settare i divisori nei SCC.

(2) bitrg, bitrh ...sono le velocita' dei canali DMA se utilizziamo il
    DPLL interno del SCC e colleghiamo RTxC su TRxC. Il DPLL interno e
    BRG pilotano PCLK del SCC. La velocita' del DMA e' normalmente
    controllato dal segnale che portiamo su RTxC.

(3) txglaa, txglab, txglac, txglad, txglae, txglaf, txglag, txglah
    ...definiscono la durata della testa dei pacchetti (TXDELAY) e
    del SLOTTIME per la decisione quando andare in trasmissione.
    I valori sono espressi in millisecondi. Si sceglie in base alla
    velocita' di commutazione del RTX dalla ricezione alla
    trasmissione.

(4) txrepa, txrepb, txrepc, txrepd, txrepe, txrepf, txrepg, txreph
    ...definiscono la durata della coda dei FRAME (TXTAIL) e
    sono espressi in millisecondi. Sono definiti in modo che
    vengano trasmessi l'ultimo byte del frame, i due byte del
    CRC e almeno un flag, percio' la durata di almeno 32 bits,
    con un po' di riserva per gli zeri inseriti per il
    bit-stuffing! I canali DMA hanno bisogno di un TXTAIL maggiore,
    perche' il programma vuole almeno tre flag per la risincronizzazione
    del ricevitore.

(5) kponava, kponavb, kponavc, kponavd, kponave, kponavf, kponavg,
    kponavh ...sono usati per piu' cose: watchdog DCD del ricevitore,
    watchdog per la durata del frame in trasmissione, per
    calcolare il tempo di ripetizione (FRACK o T1 nel AX.25) e
    il calcolo del tempo d'attesa al frame RNR. Cosi'
    vengono calcolati i tempi per le ripetizioni:
    FRACK=kponav*(1+nponovi*psevnak(0..1))
    RNRFRACK=FRACK+kponav*cakafak

(6) kponavs ...viene usato per calcolare il FRACK durante la
            chiamata !

(7) kpodga, kpodgb, kpodgc, kpodgd, kpodge, kpodgf, kpodgg,
    kpodgh ...tempo d'attesa per ulteriori frame in un pacchetto prima
    che SV mandi la conferma (T2 nel AX.25).

(8) tecnoa, tecnob, tecnoc, tecnod, tecnoe, tecnof, tecnog, tecnoh
    ...definiscono la probabilita' di andare in trasmissione
    (p-persistence) al termine di un slottime se il DCD non e'
    attivo. Il parametro e' definito come modulo 65536, percio'
    25% equivale al valore 16384.

(9) cakafak ...definisce il multiplo di FRACK quando il
            SuperVozelj riceve un frame RNR (l'utilizzatore
            non e' pronto a ricevere).

(10) mponovi ...numero delle ripetizioni (RETRY o N2 nel AX.25).

(11) mejacas ...tempo massimo (timeout) inattivita' del
            collegamento (nessuna conferma a frame info in
            un certo tempo).

(12) kokocas ...tempo tra emissioni beacon automatiche e ritardo
             iniziale su tutti i canali.

(13) poticas, potica1 ...tempo tra emissioni della tabella dei nodi e
                      ritardo iniziale. ATTENZIONE! Il tempo tra le
                      emissioni deve essere adattato a quello dei nodi
                      adiacenti!

(14) mejapot ...valore limite per determinare la validita' dei tempi di
             risposta (usato anche per calcolare la qualita').

(15) mojznak
     ...due nominativi, scritti nel formato shiftato (ASCII*2).
     Il primo e' il vero e proprio nominativo del SuperVozelj e
     solo con questo funziona il digi, vengono trasmessi i
     beacon e i frame SABM. Il secondo serve solo per i
     collegamenti con gli utilizzatori e non si puo' usarlo come
     digi e/o per i beacon.

SVV79 ha la possibilita' di aggiornare automaticamente la tabella dei
nodi (autorouting) il che semplifica non di poco il lavoro degli sysop.
Percio' che questo funzioni devono essere correttamente scritte le
tabelle A, W e Z. Nella tabella W vanno i nominativi dei SuperVozelj
adiacenti, anche quelli raggiungibili via digi. Nella tabella A vanno
solo i nodi che NON sono SuperVozelj e NON sono raggiungibili da altri
nodi. ATTENZIONE! Il contenuto della tabella A verra' trasmesso a tutti
i nodi SuperVozelj, percio' meglio non abbondare con i call nella
tabella A! Molto pericoloso e' l'uso del wildchar "*" (stessa cosa vale
per i wildchar "*" nella tabella V).

La tabella dei nodi si trasmette esclusivamente ai nodi adiacenti che
sono raggiungibili in diretta e senza nessun digi in mezzo. Durante la
trasmissione si cronometra il tempo che poi viene mostrato dal comando
O dei tempi di risposta. Nella successiva trasmissione della tabella
questo dato viene utilizzato per calcolare la qualita'. Il valore del
tempo di risposta viene diviso per l'unita' di tempo (costante di
tempo) e poi sommato al valore delle qualita' che viene ricevuto.

Se il valore della qualita' supera 255, viene corretto a 255. In questo
caso significa che il nodo e' morto.

Nella tabella dei nodi viene presa in considerazione sempre la strada
migliore. Se un nodo supera il massimo valore, allora viene cancellato
un'attimo prima della trasmissione della tabella dei nodi.

La trasmissione della tabella dei nodi e' composta da tre gruppi di frame. Il
primo contiene il nominativo e l'ident del SuperVozelj. A questi due
viene assegnato il valore di qualita' 0. Il secondo contiene i nodi
della tabella A e a questi viene assegnato il valore dei tempi di
risposta dei nominativi alternativi in A. Il terzo
in fine contiene la lista dei nodi vera e propria con i relativi valori
di qualita'.

I nominativi della tabella dei nodi vengono trasmessi come una sequenza
di 8 caratteri. Il primo carattere e' "!" il quale fa eseguire il
comando "!" in ricezione. Seguono 6 caratteri del call (puro ASCII). Il
tutto finisce con il carattere che definisce il valore di qualita'. A
questo punto puo' seguire una nuova sequenza di un'altro nodo, gia' che
un frame puo' contenere fino a 24 nodi (24*8=192 bytes).

Nella tabella dei nodi ogni nodo occupa 16 bytes. I primi otto
corrispondono al comando "!" (vedi sopra). Gli otto restanti individuano
il canale (.W) e il SuperVozelj (6 caratteri senza SSID) dal quale
provengono i dati e al quale bisogna instradare la chiamata.

Quando il SuperVozelj trasmette il proprio nominativo e l'ident setta a
1 il bit MSB del primo byte dell'ident. In questo modo il SuperVozelj
che riceve questo puo' impedire la chiamata dell'ident con il call del
SV, che comporterebbe ad un looping infinito. Avendo la tabella A
priorita' sulla tabella V, si evitano problemi di looping con eventuali
nodi della tabella A presenti nella tabella V.

Indirizzi della memoria del SuperVozelj V80:
-------------------------------------------

$00000 - $07FFF 27256 EPROM con il programma SVV80    (32kb)

$10001 uPD71055 port A - ingresso, riservato per la telemetria
$10003 uPD71055 port B - uscita, riservato per il telecomando
$10005 uPD71055 port C - entrata/uscita, controllo dell'orologio
$10007 uPD71055 parola di comando

$30000 - $30FFF stack del MC68010                 (4kb)
$31000 - $34FFF copia della EPROM                 (16kb)
$35000 - $3CFFF libero per programmi              (32kb)
$3D000 - $3D7FF testo "Info"                      (2kb)
$3D800 - $3D7FF testo "Help"                      (2kb)
$3E000 - $3EFFF testo "Novice"                    (4kb)
$3F000 - $3F9FF tabella delle chiamate A          (2.5kb)
$3F900 - $3F9FF tabella nodi Z                    (256b)
$3FA00 - $3FBFF testo del ctext T                 (512b)
$3FC00 - $3FCFF tabella call non permessi F       (256b)
$3FD00 - $3FDFF lista dei SV adiacenti W          (256b)
$3FE00 - $3FF01 testo del beacon B                (258b)

$3FF80 variabile del generatore pseudo-casuale      (.L)
$3FF91 variabile per la massima qualita'            (.B)
$3FF92 costante di tempo                            (.W)
$3FFF0 variabile per il tipo di CPU                 (.L)
$3FFF8 variabile per il tipo di DMA                 (.L)

$E0001 indirizzo 8254 contatore 0 - non utilizzato!
$E0003 indirizzo 8254 contatore 1 - contatore dei millisecondi /256
$E0005 indirizzo 8254 contatore 2 - divide il BRG clock 1kHz/1mS
$E0007 indirizzo 8254 registro di comando

$E0009   SCC#1 indirizzo B command - canale 2
$E000B   SCC#1 indirizzo B data
$E000D   SCC#1 indirizzo A command - canale 1
$E000F   SCC#1 indirizzo A data
$E0011   SCC#2 indirizzo B command - canale 4
$E0013   SCC#2 indirizzo B data
$E0015   SCC#2 indirizzo A command - canale 3
$E0017   SCC#2 indirizzo A data
$E0019   SCC#3 indirizzo B command - canale 6
$E001B   SCC#3 indirizzo B data
$E001D   SCC#3 indirizzo A command - canale 5
$E001F   SCC#3 indirizzo A data

$1C0000 - $1C0039   DMA MC68450 DREQ#0 registri - canale 8 TX
$1C0040 - $1C0079   DMA MC68450 DREQ#1 registri - canale 8 RX
$1C0080 - $1C00B9   DMA MC68450 DREQ#2 registri - canale 7 TX
$1C00C0 - $1C00F9   DMA MC68450 DREQ#3 registri - canale 7 RX
$1C00FF             DMA MC68450 general control register

$1E0001   SCC#4 (DMA) indirizzo B command - canale 8
$1E0003   SCC#4 (DMA) indirizzo B data
$1E0005   SCC#4 (DMA) indirizzo A command - canale 7
$1E0007   SCC#4 (DMA) indirizzo A data

$200000 - $21BFFF spazio per la lista "Glej"    (112kb)
$21C000 - $21DFFF buffer JPEG                     (8kb)
$21E000 - $21FFFF spazio per la tabella nodi V    (8kb)
$220000 - $280000 resto della RAM dati          (384kb)

Tutti gli altri indirizzi non sono decodificati e' generano un BUS
ERROR se si tenta di scrivere o leggere e percio' genera un reset
che fa ripartire il programma dalla EPROM. Il vettore delle
eccezioni punta all'inizio del programma nella EPROM (indirizzo
$100).


5. Collegamento dei connettori
-----------------------------
La scheda SCC con tre Z8530 su interrupt e' collegata con i modem
tramite due connettori DB25. I connettori DB25 femmina sono montati sulla
scatola del SV e dei modem, invece i connettori maschi vengono montati
sui cavi. I segnali sui DB25 sono sistemati in modo da facilitare il
collegamento con il flat cable:

1,2,3,4,5,6,7,8,9,10,11,12,13 = massa (ogni secondo conduttore del cavo)
14 = TXD canale 3 (o 6)
15 = RTS canale 3 (o 6)
16 = DCD canale 3 (o 6)
17 = RXD canale 3 (o 6)
18 = TXD canale 2 (o 5)
19 = RTS canale 2 (o 5)
20 = DCD canale 2 (o 5)
21 = RXD canale 2 (o 5)
22 = TXD canale 1 (o 4)
23 = RTS canale 1 (o 4)
24 = DCD canale 1 (o 4)
25 = RXD canale 1 (o 4)

Tutti e sei i canali sono duplex. Le entrate DCD servono solo
per la decisione su quando mandare in trasmissione il relativo
canale. L'entrata DCD non influisce sulla ricezione dei
pacchetti! L'uscita RTS commuta il modem e la stazione tra
ricezione e trasmissione (PTT). La limitazione del SCC Z8530 e'
che il generatore del baud-rate e il DPLL sono gli stessi sia
per la ricezione che per la trasmissione. Questa comporta che:

Per il funzionamento del SuperVozelj con modem e stazioni
simplex bisogna garantire che in trasmissione l'entrata RXD non
cambia di stato logico (nel modem Manchester ci pensa il
deviatore 74HC157). In questo modo si evita cambiamenti
indesiderati della velocita' di trasmissione e un inutile
sovvracarico del processore con gli interrupt del ricevitore. In
ricezione invece bisogna garantire un cambio di stato logico
dopo ogni reset/inizializzazione, in modo che il DPLL parta
correttamente se no non funzionera' la trasmissione. Questa
condizione avviene gia' con il rumore proveniente dal ricevitore
del rtx. Percio' il problema puo' avvenire usando il modem con
lo squelch del rtx (es. AM7910 senza DPLL), oppure quando si
collega un canale ad un altro computer senza modem ne rtx.

Nel caso dell'utilizzo del SuperVozelj nel modo duplex bisogna
tenere l'entrata DCD sempre allo stato logico alto. Essendo il
trasmettitore sempre attivo l'uscita RTS resta libera. Essendo
il trasmettitore sincronizzato dal ricevitore non ci si puo'
collegare tra due SCC Z8530. Percio' la conessione duplex tra
due SuperVozelj non e' possibile. E' possibile invece un
collegamento duplex con un TNC2 (diretto senza modem) e
interfacce simili che hanno il clock di trasmissione
indipendente oppure con SCC migliorati (es. uPD72001).

Nel caso un canale sia inutilizzato (se non e' collegato da un
modem) bisogna collegare assieme RXD, DCD e RTS, mentre il TXD
relativo resta scollegato. Se si collega in questo modo tutti i
canali non utilizzati si garantisce al sistema un minore consumo
di memoria.

Per il collegamento modem/rtx consiglio il conettore DIN 5+1 con
i contatti disposti a 270 gradi, quelli che venivano usati nei
TV e simili apparecchi per i segnali video (prima dell'avvento
della SCART). Per standarizzare i conettori consiglio la
seguente disposizione:

1 = non conesso (oppure ricarica della batteria NiCd interna
    oppure uscita tasto CW)
2 = PTT (interrutore verso massa, cortocircuitato in
    trasmissione)
3 = non conesso (oppure +12V o squelch, attivo alto)
4 = microfono (entrata BF rtx)
5 = altoparlante (uscita BF rtx)
6 = massa, collegata anche con la massa metallica

                           /---------\
Vista frontale            /           \
del conettore            /      3      \
DIN femmina             /               \
da panello              |  2         4  |
                        |               |
                        |       6       |
                        |               |
                        \  1         5  /
                         \             /
                          \    /-\    /
                           \---------/

Per il collegamento del RESET remoto consiglio l'uso dei
spinotti RCA.


La scheda DMA-SCC con l'integrato MC68450 e un SCC Z8530 e' collegata ai
sincronizzatori di bit/scrambler o modem tramite un DB25. I connettori
maschi vengono montati sulle scatole, invece i conettori femmina vanno
sui cavi. I segnali sui DB25 sono sistemati in modo da facilitare il
collegamento con il flat cable:

1,2,3,4,5,6,7,8,9,10,11,12,13 = massa (ogni secondo conduttore del cavo)
14 = RTxC canale 7 (RX in TX clock d'entrata)
15 = RXD canale 7
16 = DCD canale 7
17 = RTS canale 7
18 = TXD canale 7
19 = TRxC canale 7 (uscita DPLL - normalmente non utilizzato)
20 = RTxC canale 8 (RX in TX clock d'entrata)
21 = RXD canale 8
22 = DCD canale 8
23 = RTS canale 8
24 = TXD canale 8
25 = TRxC canale 8 (uscita DPLL - normalmente non utilizzato)

Tutti e due i canali sono duplex. Le entrate DCD servono solo
per la decisione su quando mandare in trasmissione il relativo
canale. L'entrata DCD non influisce sulla ricezione dei
pacchetti! L'uscita RTS commuta il sincronizzatore (modem) e la stazione
tra ricezione e trasmissione (PTT). Il clock e' uguale per RX
e TX ed e' collegato all'entrata RTxC del Z8530. Su TRxC e' invece
collegata l'uscita del DPLL interno del Z8530 (normalmente non e'
utilizzato).

Per il collegamento tra sincronizzatore e il rtx consiglio il connettore
a 5 poli DIN con i pin a 180 gradi (quelli usati nei HiFi stereo per
segnali audio). Per standarizzare i conettori consiglio la
seguente disposizione:

1 = uscita S-meter del ricevitore, non collegato nel sincronizzatore
2 = massa, collegata anche con la massa metallica
3 = RXD (uscita 75ohm TTL del ricevitore, entrata sincronizzatore)
4 = PTT (interrutore verso massa, cortocircuitato in
    trasmissione)
5 = TXD (entrata 75ohm TTL del trasmettitore, uscita sincronizzatore)

                           /---------\
Vista frontale            /           \
del conettore            /      2      \
DIN femmina             /               \
da panello              |   4       5   |
                        |               |
                        |  1         3  |
                        |               |
                        \               /
                         \             /
                          \    /-\    /
                           \---------/

L'interfaccia A/D per la telecamera CCD e il convertitore A/D
lento sono collegati con un flat cable a 15 conduttori e conettori
DB15. Sulle scatole del SV e delle due interfacce vengono usati DB15
femmina (percio' sul cavo di collegamento ci sono tre DB15
maschi). La lunghezza del cavo non deve superare il metro e
bisogna rispettare il seguente ordine dei segnali per evitare che
i segnali di controllo interferiscano tra loro:

1 = PA0 (D0 dai A/D)
2 = PA2 (D2 dai A/D)
3 = PA4 (D4 dai A/D)
4 = PA6 (D6 dai A/D)
5,6 = massa (conettore PA sulla scheda CPU)
7,8 = massa (conettore PB sulla scheda CPU)
9 = PA1 (D1 dai A/D)
10 = PA3 (D3 dai A/D)
11 = PA5 (D5 dai A/D)
12 = PA7 (D7 dai A/D)
13 = +5V (conettore PA sulla scheda CPU)
14 = PB6 (RCLK/WRESET comando per l'A/D veloce ovvero A0 per l'A/D lento)
15 = PB7 (READ/WRITE comando per l'A/D veloce ovvero A0 per l'A/D lento))

Quando le due entrate READ/WRITE in RCLK/WRESET sono a livello
logico basso l'uscita dell'interfaccia e' posta in alta impedenza.
In questo modo si possono collegare altre interfacce (A/D lento)
all'entrata del uPD71055 sulla porta A. Il convertitore A/D lento
ADC0804 decodifica da solo l'indirizzo e' percio' non disturba
il convertitore per la telecamera TV CCD.

Le altre interfaccie vengono pilotate con i restanti segnali della
porta B (PB0-PB5) avendo cura di portare le loro uscite in alta
impedenza quando la porta B e' a livello logico basso. Per
facilitare le aggiunte anche in condizioni particolari (in vetta
della montagna) consiglio di collegare i segnali di controllo su
conettori jack stereo:

Punta = PB0 (o PB2 o PB4)
Anello interno = PB1 (o PB3 o PB5)
Parte esterna = massa

***************************************************************


    Source: geocities.com/siliconvalley/network/7865/sv

               ( geocities.com/siliconvalley/network/7865)                   ( geocities.com/siliconvalley/network)                   ( geocities.com/siliconvalley)