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 ***************************************************************