Der KC85 geht ONLINE.

Es soll ja Leute geben, welche es gar nicht erwarten können, ihren guten alten KC85 endlich am Netzwerk bzw. Internet zu haben. Ich gehöre sicherlich auch dazu, sonst würde ich mich nicht damit bereits 4 Monate ununterbrochen beschäftigen. Aber es wird langsam Licht am Ende des Tunnels!

Seit dem letzten Zwischenbericht ist bereits wieder einige Zeit vergangen. Anfang Januar wurde die Arbeit am Projekt sehr intensiv und konzentriert fortgesetzt.

Nach der Inbetriebnahme der Schnittstelle war als nächstes die Implementierung geeigneter Software für den Zugriff auf den WIZnet TCPIP-Stack an der Reihe. Als Vorlage standen die C-Quelltexte von WIZnet in Form eines Treibers für den AVR GCC Compiler zur Verfügung.

Programmiert wurde alles in Z80-Assembler für den M80. Die Software stellt als Unterprogrammsammlung aquivalent zu den originalen C-Funktionen die Zugriffe bereit und kapselt die darunterliegenden Treiberfunktionen des KCNET-Interface. Das macht ihre Nutzung erheblich einfacher und sicherer - die Gefahr einer Fehlprogrammierung des KCNET-Schnittstellen-Treibers wird nahezu ausgeschlossen, natürlich nur, wenn man die entsprechenden Parameter einhält.

Parallel dazu wurde zunächst das CP/M-Programm CPMNET.COM schrittweise erweitert, um die entstehenden Funktionalitäten austesten zu können. Am 06.01.2008 war es dann endlich soweit:


Mein KC85/5 kommuniziert mit Hilfe des KCNET-Interface unter CP/M über TCPIP und Ethernet mit einem Windows- oder Linux-PC.

 

Das war ein tolles Gefühl und gar nicht so problematisch, wie ich eigentlich erwartet hatte. Der WIZnet-Chip funktioniert "einfach" und kann mit einem wirklich geringen Aufwand schnell und unkompliziert in Betrieb genommen werden.

Danach war erst einmal Herumspielen angesagt und ich habe versucht mit allen möglichen Programmen, Protokollen und diversen Servern im Netzwerk und Internet Kontakt herzustellen. Schritt für Schritt ging es dann immer besser vorwärts und ich war am Ende dieser Experimentierphase in der Lage, alle Schichten des TCPIP-Stacks anzusprechen und zu benutzen.

CPMNET.COM bekam eine zweite Menüseite, welche einige spezielle Programme zur Verfügung stellt, um auf diesen Ebenen entsprechende Tests durchführen zu können:

Mit Hilfe der ersten 3 Programme kann man dann schon mal Textnachrichten über die Leitung schicken und empfangen - so wie es die üblichen Chat-Programme im Grunde genommen auch nur tun.

Für etwas längere Tests lässt sich der KC dort auch in den Echo-Betrieb schalten und stellt dann einen TCP oder UDP-Echoserver dar. Das heisst, er schickt alle empfangenen Daten unverändert an den Sender zurück, welcher sie dann verifiziert. Damit hat man eine komfortable Möglichkeit die gesamte Übertragungskette im Dauerbetrieb auf Fehlerfreiheit zu kontrollieren.

Und was soll ich sagen - es funktioniert einfach wunderbar. Der KC85 stellt hier natürlich keine Geschwindigkeitsrekorde auf, das war auch nicht mein primäres Ziel. Entscheidend ist für mich nach wie vor die technische Umsetzung einer sauberen Ethernet-Anbindung und die Integration in mein TCPIP-Heimnetzwerk, zusätzlich ist man damit nebenbei auch an das Internet angeschlossen.

Und dort gibt es immer noch einige Sachen zu erledigen, obwohl die schwierigsten Abschnitte hinter mir liegen. Im Moment sieht es so aus, dass für die oben genannten Unterprogramme noch eine übergeordnete  logische Abstraktionsebene entwickelt wird. Auf anderen Computern ist diese Schnittstelle als Socket-Interface bekannt, welche die Programmierung von Netzwerksoftware für TCPIP vereinheitlicht und sehr übersichtlich macht.

Wenn man in seinem Programm auf Netzwerk/Internet zugreifen will, besorgt man sich technisch gesehen einen Übertragungskanal (Socket), öffnet ihn mit dem gewünschten Protokoll und Parametern und kann sofort anfangen mit Senden und Empfangen. Die 4 wichtigsten Funktionen der Datenübertragung - SEND / RECEIVE bzw. SEND TO / RECEIVE FROM - sind bereits erledigt und gerade in der Testphase, die Verwaltungs- und Hilfsfunktionen werden demnächst folgen.

Der folgende Quelltextauszug zeigt beispielsweise die Senderoutine des initialisierten TCP-Sockets, welche die auf der Konsole eingegeben Daten (INCON) auf die Reise schickt:


        ;Input & Send TCP-DATA

SEDATA: CALL    INCON           ;PA: HL/BC - HAdresse/SIZE

        LD      A,(SOCKET)

SWDATA: PUSH    BC              ;SIZE TO SEND

        CALL    SEND            ;Send TCP-Data

        POP     DE

        RET     C               ;Fehler

        EX      DE,HL

        SBC     HL,BC          

        EX      DE,HL

        LD      B,D

        LD      C,E             ;SIZE = SIZE - SENT

        JR      NZ,SWDATA

        RET


Der Empfänger lässt sich genauso einfach programmieren. Nachfolgend der Auszug vom TCP-Server/Client beim TCP-Empfang, der Echo-Mode sendet alles gleich wieder zurück, ansonsten werden alle Daten auf dem Bildschirm ausgegeben:


        ;Receive TCP-Data to CON or ECHO

REDATA: LD      A,(SOCKET)

        LD      HL,LINEBF

        LD      BC,MAXSEG       ;Size max.!

        CALL    RECV            ;Recv TCP-Data (RecvSIZE BC)

        RET     C               ;no Data

        LD      D,A

        LD      A,(SECHO)

        OR      A

        LD      A,D

        JR      Z,REDAT1

        ;ECHO MODE

        LD      HL,LINEBF

        CALL    SEND            ;Send TCP-Data (BC)

        RET

        ;CON MODDE

REDAT1: LD      DE,TCPMX4       ;received

        CALL    ZKOUT

REDAT2: LD      HL,LINEBF

        PUSH    AF

REDAT3: LD      A,(HL)

        CALL    COUT##          ;to CON (BIOS)

        INC     HL

        DEC     BC

        LD      A,B

        OR      C

        JR      NZ,REDAT3

        POP     AF

        LD      HL,LINEBF

        LD      BC,MAXSEG       ;Size max.!

        CALL    RECV            ;Recv TCP-Data (RecvSIZE BC)

        JR      NC,REDAT2       ;get all Data

        CALL    NEWLN

        RET



Mit diesem Socket-Interface ist der KC85 dann in der Lage, die beiden grundlegenden Transportprotokolle TCP bzw. UDP auf eine einfache und standardisierte Art und Weise zu benutzen und meine vorbereitende Arbeit ist beendet. Auf diese Schnittstelle können dann auch beim KC85 unter CAOS oder CP/M alle Netzwerkprogramme aufsetzen und mit mehr oder weniger Aufwand die vielleicht eher bekannten Anwendungen realisieren:

Die Liste könnte man fast beliebig fortsetzen, es gibt eine nahezu unüberschaubare Anzahl von Protokollen, Diensten und Anwendungen für auf TCPIP basierende Netzwerke (mehrere 100), welche im Einsatz sind und es kommen immer wieder neue dazu.

Durch die Wahl eines TCPIP-Stacks in Hardware für das Projekt sollte erstens ein stabiler Betrieb der Netzwerkschnittstelle möglich und zweitens einige der o.g. Anwendungen problemlos umsetzbar sein. Der Grund dafür ist, dass durch die kompakte Programmierung des TCPIP-Treibers/Socket-Interfaces in Assembler die zur Verfügung stehenden 64 kB RAM des Z80-Systems kaum belastet werden.

Die komplette Schnittstellensoftware mit Socket-Interface benötigt ca. 1,5 kB! Speicher und CPMNET 1.3 mit dem heutigen Funktionsumfang ca. 9 kB, wobei dort der Treiber mit 1,5 kB und ein Zwischenspeicher von 1,5 kB für den Echoserverbetrieb inbegriffen sind. Es sollten also alle Möglichkeiten offen stehen, Netzwerksoftware zu programmieren und den Treiber dort einfach mit einzubinden, ohne eine nennenswerte TPA-Belastung unter CP/M in Kauf nehmen zu müssen.

Für mich wäre dann bezugnehmend auf den letzten Artikel auch Punkt 7 des Fahrplanes abgehakt. Mit der erfolgreichen Inbetriebnahme des TCP/IP-Stacks ist damit die Ethernet-Schnittstelle am KC85 kein Traum mehr, sondern Realität und TCPIP gibt es als Zugabe mit einer entsprechenden Schnittstelle obendrauf.

Nachfolgend dann wie üblich noch zwei Screenshots der aktuellen Software - CPMNET 1.3, Eine Veröffentlichung der Quellen wird es zu einem späteren Zeitpunkt geben. Im Moment existiert ja nur der Prototyp des KCNET und die Programmierung der TCPIP-Schnittstelle ist noch nicht ganz abgeschlossen, so dass sich die aufsetzenden Programme fast täglich ändern.
 
 

KCNET-Testfunktionen

 
Menü 1 für den Test der KCNET-Schnittstelle
 
 

TCPIP-Testfunktionen


Menü 2 für den Test des TCPIP-Stacks
 

Soweit zum derzeitigen Stand, in nächster Zeit wird es wahrscheinlich erst mal keine weiteren Arikel geben, da ich meine Arbeiten zuende bringen und anschliessend noch ein paar Ideen für das KC-Clubtreffen 2008 im April ausprobieren möchte. Dort kann man sich alles Live und in Farbe anschauen, Anmeldeinformationen, Ort und Zeit kann man auf der Website des KC-Clubs erfahren.