Descrizione del progetto SuperVozelj (versione V75 del 10/11/1995) ================================================================== Matjaz Vidmar, S53MV ( traduzione Andrej Santin, IV3KCB @ IV3CJT,S50BOX,S50BBS del 4/2/96 ) 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 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. Usa una CPU MC68010, DMA MC68450 e quattro SCC Z8530 (uno su DMA e tre su interrupt). In questa configurazione si raggiungono 4Mbps con la DMA (somma dei due canali) e 200kbps con gli interrupt (somma delle velocita' dei 6 canali con il clock della CPU a 12.5 MHz). Il sorgente di SVV75 in assembler 68k (con i commenti) e' lungo 160170 bytes, compilato 15914 bytes. La versione V75 richiede il seguente hardware: (1) piastra CPU del computer DSP con 16k EPROM 27128 (2) una piastra za 1Mbyte (con 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 Per questa configurazione vale: SCC PCLK >= MC68010/2. Clock tipici sono: 12MHz per MC68010, 8MHz per MC68450 e Z8530 PCLK, 4.9152MHz per i clock dei canali su interrupt e 9.8340 per la sincronizzazione di bit dei canali DMA a 1.2288Mbps. SVV75 puo' funzionare anche come nodo a 6 canali senza la scheda DMA. In questo caso bisogna modificare il valore della constante "nkanal" e togliere le chiamate dei sottoprogrammi "inidma" e "dmaznak" (oppure instradarle sull'istruzione "rts"). Le tre modifiche sono segnalate nel sorgente con un punto esclamativo. 2. Uso del SuperVozelj ---------------------- Il SuperVozelj puo' funzionare sia come packet-radio digipeater sia come nodo PR. In tutti i modi di funzionamento e' molto importante l'uso corretto dello SSID dei nominativi. 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 ritrasmesso sullo stesso canale. (2) se lo SSID del nominativo del SuperVozelj e' uguale al numero di un canale esistente allora il frame viene ritrasmesso sul canale sudetto. 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. 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' efficente 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 mancanta 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). 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. I comandi del SuperVozelj: (viene decodificato solo il primo carattere della prima parola) 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 la dove trova 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 interprettate 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 interprettati 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 corettamente solo dai nodi SuperVozelj. D(atum/ura) ...stampa data e ora se sono presenti nella piastra CPU i due integrati uPD71055 e uPD4990. Non essendo usati dal SuperVozelj possono essere omessi. L'orologio puo' essere anche software. uPD71055 viene usato contemporaneamente anche per telecomandi/telemetria e da altri circuiti del SuperVozelj. 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. 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) 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 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. 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 carello, 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 (normalemente -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 interprettata 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 ...copia un blocco di memoria (S). Gli indirizzi e la lunghezza devono essere in esadecimale, si possono usare anche numeri dispari. 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 _ ..cancellaa 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 i successivi 256 bytes della memoria (S). 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 tempo di funzionamento del SuperVozelj (in minuti), la velocita' del loop primario (il numero corrente dei cicli al secondo). Seguono alcuni dati statistici per ogni canale: (1) percentuale dell'attivita' del DCD (canale occupato), (2) percentuale dell'attivita' del PTT (funzionamento del TX), (3) numero dei frame in attesa di trasmissione, (4) numero dei collegamenti in entrata, (5) numero di collegamenti in uscita. Il DCD e il PTT vengono campionati ogni millisecondo, la percentuale viene calcolata nell'ultimo minuto in base al contatore dei minuti che compare all'inizio. Il numero dei collegamenti si riferisce dall'ultimo reset. In fine compare l'indirizzo base del programma (registro A6) e l'indirizzo di chiamata dal loop primario. Se e' 0 significa che non viene effettuato il salto. Segue il periodo di chiamata. In fine segnala se l'utilizzatore e' abilitato a sysop. R ...setta l'indirizzo di chiamata (S). L'indirizzo e' un numero pari esadecimale. Il periodo e' in decimale e specifica il numero delle chiamate del loop primario durante la chiamata del sottoprogramma. Periodo 0 significa solo una chiamata senza ripetizioni. La risposta e' uguale del comando R senza altri parametri. S ...il funzionamento e' simile al Sporoci normale con la differenza che il testo viene mandato a tutti indipendentemente se sono nel modo comando o conessi ad un'altra stazione (S). In questo modo il sysop puo' mandare messaggi in qualsiasi momento (solo alle stazioni "entranti" ! ). T ...stampa il CTEXT. T _ ...cancella il CTEXT (S), (= M 3FA00 0). T ...aggiunge il testo al CTEXT (S). Risponde con il numero di caratteri aggiunti. V ...il comando e' uguale per tutti. La tabella puo' essere cancellata con M 21E000 0 (S). E' possibile anche una cancellazione parziale con V (S). V 0 ...trasmette immediatamente la lista dei nodi in tutte le direzioni (tabella Z) (S). ATTENZIONE, COMANDO PERICOLOSO! I valori della qualita' vengono incrementati ad ogni V 0. Nel caso venga ripetuto piu' volte puo' provocare loop infiniti! Gli aggiornamenti della tabella V vengono eseguiti ogni 7 minuti (dopo V 0) automaticamente. V ...setta il valore massimo della qualita' da 1 a 255 (S). Il nuovo valore viene considerato nella seguente trasmissione della lista V, quando vengono eliminati nodi con i valori che eccedono questo numero. V ...setta il valore massimo della qualita' e la costante di tempo (S). W ...stampa la lista dei SuperVozelj adiacenti, ai quali manda il SABM modificato, che contiene oltre al CONTROL $3F e PID $F0 il campo INFO di lunghezza variabile. I primi sei caratteri del campo INFO contengono il nominativo del SuperVozelj in ASCII normale cioe' senza shift. Questo SABM viene interpretato dal SuperVozelj come richiesta di conessione con ulteriori informazioni sull'origine della chiamata che viene mostrato nella lista degli utilizzatori. Tutti le altre chiamate vengono fatte con il SABM standard del AX.25. W _ ...cancella la lista dei SV adiacenti (S), (= M 3FD00 0). W ...aggiunge il testo alla lista dei SuperVozelj adiacenti. Risponde con il numero di caratteri aggiunti. Z ...stampa la tabella dei nodi adiacenti 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. ! ...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! 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 addeguata. Bisogna fare attenzione a non transitare via nodi TheNet o simili, perche' cambiando la lunghezza dei frame confondono il SuperVozelj. La pistra 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. Se si usano le entrate (port A) e le uscite (port B) del circuito uPD71055 per il telecomando e' meglio caricare nella locazione $3FFC0 lo stato delle uscite della porta B dopo il reset. Usando il comando M sull'indirizzo $10002 si puo' scrivere direttamente sulla porta B o leggere la porta A all'indirizzo $10000. 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 subrutines 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. SVV75 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 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 calcorare 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. SVV75 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 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 anche a questi viene assegnato il valore 0. 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' seguira 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 SuperVozlj V75: ------------------------------------------- $00000 - $03FFF 27128 EPROM con il programma SVV75 (16kb) $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 do $3F9FF tabella delle chiamate A (2.5kb) $3F900 do $3F9FF tabella nodi Z (256b) $3FA00 do $3FBFF testo del ctext T (512b) $3FC00 do $3FCFF tabella call non permessi F (256b) $3FD00 do $3FDFF lista dei SV adiacenti W (256b) $3FE00 do $3FF01 testo del beacon B (258b) $3FF80 variabile del generatore pseudo-casuale (.L) $3FF91 variabile per la massima qualita' (.B) $3FF92 costante di tempo per la qualita' (.W) $3FFC1 uPD71055 inizializzazione della porta B dopo il reset (.B) $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 do $1C0039 DMA MC68450 DREQ#0 registri - canale 8 TX $1C0040 do $1C0079 DMA MC68450 DREQ#1 registri - canale 8 RX $1C0080 do $1C00B9 DMA MC68450 DREQ#2 registri - canale 7 TX $1C00C0 do $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 do $21DFFF spazio per la lista "Glej" (120kb) $21E000 do $21FFFF spazio per la tabella nodi V (8kb) $220000 do $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. 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 interfaccie 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 | | | \ / \ / \ /-\ / \---------/ ***************************************************************