Descrizione del progamma SuperVozelj (versione V83 del 20/10/1998)
==================================================================
Matjaz Vidmar, S53MV
( traduzione Andrej Santin, IV3KCB del 20/11/1998
IV3KCB@IV3CJT, IV3KCB@S50BOX, iv3kcb@ljutcp.hamradio.si
schemi, c.s. ed altro trovate su http://www.hamradio.si
www.geocities.com/SiliconValley/Network/7865, surf.to/iv3kcb )
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 SVV83 in assembler 68k (con i commenti) e' lungo
204880 ($3212A) bytes, compilato 20822 ($5156) bytes.
La versione V83 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
passo 20mV): valore 0-255 e valore ricalcolato in opportuna unita'.
Il valore del gruppo 0-15 (PB0-PB3) seleziona il gruppo d'entrate
in base al multiplexer collegato all'entrata del A/D. Essendo
collegato alla stessa porta parallela dell'interfaccia della
telecamera, viene disabilitato durante la conversione JPEG (15-30
secondi). Il comando puo' essere utilizzato anche per telecomandare
altre interfaccie.
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! Lo standard JPEG comprende vari tipi di compressione.
Lo SV usa il piu' semplice chiamato "Baseline DCT".
I dati JPEG non contengono il header JPEG standard, perche'
il software SV usa tabelle di codifica JPEG fisse. I dati non
contengono i marker, percio' i bytes $FF non sono preceduti
da bytes $00.
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).
E ...nel modo sysop fa la stessa cosa, solo il gruppo va da
0 a 63 (PB0-PB5) (S).
E ...stampa i parametri di conversione se gruppo va da
64 a 79, in totale 16 combinazioni per i gruppi 0-15, 16-31,
32-47 e 48-63 (S).
E
...setta i parametri della conversione. Il primo valore viene sottratto
dalla lettura del A/D, il secondo moltiplica e il terzo e' l'unita' e
puo' contenere al massimo quattro caratteri ASCII. I valori sottrai e
moltiplica sono in formato decimale e vengono usati come valori a 16bit
con segno (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. Segue il numero di beacon trasmessi, il numero
delle misure dei tempi di risposta dei nodi adiacenti, il numero delle
foto trasmesse (BIN e JPG separatamente) e il numero delle risposte
corrette della password. Il modo sysop viene segnalato con un punto
esclamativo alla fine del numero delle password corrette.
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.
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
***************************************************************
               (
geocities.com/siliconvalley/network/7865)                   (
geocities.com/siliconvalley/network)                   (
geocities.com/siliconvalley)