RE VANESSA und Hostmode

To:  DG9FU Henning
     DB8AS Jochen

Hallo Henning und Jochen


hier nochmal den Text den ich Reinhard vor einiger Zeit zugestellt habe.
In der Zwischenzeit bin ich mit diesem Projekt nicht weiter gekommen,
hatte Urlaub und andere Probleme HI.


Zusaetzlich sende ich euch noch eine Beschreibung des Interfaces sowie
den EPROM Code fuer die VANESSA.

Die Files haben folgende Bedeutung:
- PC_HOST: Testprogramm, einfaches Terminalprogramm, das mit der Vanessa
  ueber den DP-RAM komuniziert, wird auf dem PC installiert.

-VAN_HOST.EXE Hostmode Code (EPROM) fuer Hostmode VANESSA, selfextracting
       
-VAN_HOST.TXT Hostmode Interface Beschreibung

Nach dem Start der VANESSA resp. PC ist die serielle Schnittstellle an der
Vanessa aktiv. Durch verbinden mit dem COM  Port kann die VANESSA wie ein 
normales TNC betrieben werden.

Das PC_HOST erwartet eine VANESSA mit der HOST-Mode Firmware 
auf der Speicheradresse D000:0 (Alle DIP SW = ON) und schaltet die Datenausgabe
auf das DP-RAM um. Danach sind gewoehnliche TNC Befehle moeglich.

-----------------------------------------------------------------------
endlich ist es soweit: VANESSA versteht den Hostmode!

In den letzten Tagen konnte ich TF 2.4 erfolgreich auf die VANESSA
portieren und den L1 an die Hardware anpassen. Damit steht der
Weg frei, einen Treiber fuer DieBox zu realisieren.
Die Hostmode Firmware VAN_HOST kann ueber die serielle Schnittstelle
(Debug mode) oder das Dual Port Ram mit dem Host Rechner
komunizieren.

Die Struktur innerhalb des DP RAM  wurde provisorisch wie folgt
festgelegt:

----------------------------------------------------------------
#define DP_BASE     0xD0000000L     /* 0xD000 1. CRAM       */
#define DP_BLOCK    4096            /* CRAM SIZE            */
#define  MAGIC      0x4711

#define LED_OFF 0                   /* Vanessa LED          */
#define LED_ON  0xff                /* vanessa LED          */

#define HORXFL      260
#define HOTXFL      260

#define  USBYTE unsigned short char
#define  USINT  unsigned int

/* Data type definitions ----------------------------------- */

struct dp_record{
  USINT     dp_MAGIC,
            dp_VERSION;            /* Host sw version */
  USBYTE    dp_RS232_ON;           /* rs 232 switch */
  USINT     dp_HORXCC;             /* RX "character count" */
  USBYTE    dp_HORXFI[HORXFL];     /* RX "fifo" */
  USINT     dp_HORXIP,             /* RX "input pointer" */
            dp_HORXOP,             /* RX "output pointer" */
            dp_HOTXCC;             /* TX "character count" */
  USBYTE    dp_HOTXFI[HOTXFL];     /* TX "fifo" */
  USINT     dp_HOTXIP,             /* TX "input pointer" */
            dp_HOTXOP;             /* TX "output pointer" */
  USBYTE    dp_space[xxx],
            dp_parameter_portA[xxxx],
            dp_parameter_portB[xxxx],
            dp_reserve[xxx],
};  /* total 8 kb */

typedef union {
  struct dp_record dprec;
  unsigned char dpflat[DP_BLOCK];
} dpram_type;

/* VANESSA specific adresses            */

int ledio_adr[] = {0x306,0x307,0x30E,0x30F,0x316,0x317,0x31e,0x31f,
              0x126,0x127,0x12E,0x12F,0x136,0x137,0x13E,0x13F};

--------------------------------------------------------------------
Fuer das Verstaendnis folgende Angaben:
Pro Hostrecher sind max 8 Vanessa Karten im Adressraum 0xD000:0
bis 0xDFFF:F adressierbar. Jede Vanessa besitzt 8 kb (0X1fff) DP-Ram 
Pro Vanessa sind 2 AX25 Kanaele (Port A,B) adressierbar. Alle
ungeraden Kanalnummern gehen zum Port A, alle geraden zum Port
B. Damit ist in einfacher Weise moeglich, den gewuenschten Kanal
zu selektieren.
Je 2 AX25 Kanaele (A,B) verwenden den geichen Ringbuffer im DP
RAM (HORXFI,HOTXFI). Die zwei Pointer HO?XIP,HO?XOP  bezeicnen
den Offset zum Bufferbeginn.
Die Zeichenzaehler HO?XCC wird nicht verwendet !

Parameter
---------
Die Uebergabe der Parameter (TX Delay ect.) erfolgt nicht ueber
Hostmode Cmd's  sondern paralell in die DP RAM Struktur, getrennt
pro Port. Fuer Debugzwecke sind auch einige interessanten Variablen
(z.B. freie Buffers) plaziert, so dass der Hostrechner direkt
uebernehmen kann. Als zusaetzlicher Parameter ist die Bitrate pro
Port vorgesehne, die dann vom Host im Bereich 1200 - 19200 bps
gesetzt werden kann.


Ich bitte Dich um eine Stellungnahme und ev. weiteren Anregungen
zum Thema. Den Eprom Code sowe meine Testroutinen werde ich Dir
in einigen Tagen per Disk direkt zusenden.

vy 73 de Peter HB9PAE @ HB9AJ    

1. Allgemeines

Im Folgenden wird ein Interface Protokoll VANESSA - PC (Host)
Rechner beschrieben. Basierend auf der bestehenden Hardware VANES-
SA aus dem Projekt SEPRAN der SWISS ARTG soll ein leistungsfhiger
TNC Ersatz fr Anwendungen wie DieBox oder als TNC Ersatz fr User
entwickelt werden. Als Firmware der Vanessa Frontendrechner wird
eine Host Mode kompatible Software eingesetzt.

2. Datenaustausch

Der Datenaustausch zwischen Host Rechner und Vanessa erfolgt ber
das DUAL PORT RAM, auf das beide Prozessoren (PC und Vanessa)
Zugriff haben.

Die Daten werden in zwei zirkularen Ring-Buffern bergeben. Fr
die Datenrichtung HOST > VANESSA  ist der IN_BUFFER fr die Rich-
tung VANESSA > HOST der OUT_Buffer vorgesehen.
   

3. Hardware

Pro Vanessa sind 8 kB DP-RAM vorhanden, das im PC Adressbereich ab
0xD000:0 abgebildet ist. Aufgrund der bestehenden Adresslogik sind
maximum 8 Vanessa Boards (entspricht 16 physikalische AX25 Kanle)
mglich.

Als externe optische Statusanzeige sind je Board 2 LED's ber PC
I/O Adressen ansteuerbar.

Pro DP RAM Block werden je 2 physikalische AX25 Ports bedient.



4. Hardware Adressen

4.1 DP-RAM

Vanessa Board Nr. 0 0xD000:0 - 0xD000:2FFF

Vanessa Board Nr. 1 0xD200:0 - 0xD200:2FFF

Vanessa Board Nr. 2 0xD400:0 - 0xD400:2FFF

Vanessa Board Nr. 3 0xD600:0 - 0xD600:2FFF

Vanessa Board Nr. 4 0xD800:0 - 0xD800:2FFF

Vanessa Board Nr. 5 0xDA00:0 - 0xDA00:2FFF

Vanessa Board Nr. 6 0xDC00:0 - 0xDC00:2FFF

Vanessa Board Nr. 7 0xDE00:0 - 0xDE00:2FFF

     

4.2 LED Adressen  

LED 1     Board Nr. 0...3:    0x306 + (Board Nr. * 0x08) 
          Board Nr. 4...7:    0x106 + (Board Nr. * 0x08)

LED 2     Board Nr. 0...3:    0x307 + (Board Nr. * 0x08) 
          Board Nr. 4...7:    0x107 + (Board Nr. * 0x08)

[Board Nr: 0...7]


5. DP-RAM Struktur

Die Datenstruktur des DP-RAM fr je 2 physikalische Kanle ist wie
folgt aufgeteilt:


struct DP_RAM
     int  MAGIC_No,           /* Magic word */
          Version,            /* Firmware Version */
          IN_Head_Ptr,        /* Write Pointer IN_Buffer */
          IN_Tail_Ptr:        /* Read Pointer IN_Buffer */
     char IN_Buffer[2048];    /* VANESSA > HOST */
     int  spare;

     int  OUT_Head_Ptr,       /* Write Pointer OUT Buffer */
          OUT_Tail_Ptr;       /* Read Pointer OUT Buffer */
     char OUT_Buffer[2048];   /* HOST > VANESSA */
     int  spare;                   

     int  Param_PortA[50],    /* Persist, TX Delay ect */
          Param_PortB[50];

     int  Status_PortA[50],   /* Status der logischen Kanle*/
          Status_PortB[50];        

     int  Status_Common[50];  /* common Status, buffers ect */

Total 8192 Bytes


6. Bufferorganisation

Die Organisation der Datenbuffer erfolgt mit den Head und Tail
Pointer. Der Head- resp. Tail-Pointer bezeichnet die aktuelle
Position innerhalb des jeweiligen Datenbuffers relativ zum Buffer-
beginn. Der OUT_Head_Ptr sowie der IN_Tail_Ptr wird exklusiv vom
HOST Prozessor verndert, der OUT_Tail_Ptr und der IN_Head_Ptr vom
FP VANESSA. 

Daten vom Host an die VANESSA werden an den OUT_Buffer bergeben
und der OUT_Head_Ptr nachgefhrt. 
Daten an den Host Rechner werden vom FP an den IN_Buffer bergeben
und der IN_Head_Ptr nachgefhrt.


Konvention

Buffer leer    IN_Head_Ptr    ==   IN_Tail_Ptr
               OUT_Head_Ptr   ==   OUT_Tail_Ptr
   
Bufer full     IN_Head_Ptr  + 1    ==   IN_Tail_Ptr
               OUT_Head_Ptr + 1    ==   OUT_Tail_Ptr

Die Pointer bezeichnen die letzte gelesene (Tail) resp. die zu-
letzt beschriebene (Head) Bufferposition.


7. AX25 Kanalbelegung

Jeder FP VANESSA besitzt 2 physikalische AX25 Kanle (A und B).
Der Datenaustausch mit dem Host Prozessor erfolgt ber den glei-
chen Bufferblock im DP-RAM Block. Jedem pysikalischen Kanal sind
dabei je 10 logische Kanle zugeordnet so dass total 20 Logische
Kanle angesprochen werden knnen. Aus Sicht des Host Rechenrs
werden alle geraden Kanalnummern (0,2,4..) an Kanal A weitergelei-
tet alle ungeraden Nummern an Kanal B.
Kanal 0 ist der Monitorkanal.