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:
- der KC85 als TCP-Server
- der KC85 als TCP-Client
- der KC85 als UDP-Client/Server
- Anzeige von eingehenden ICMP-Paketen auf dem KC85 (Ping von aussen)
- Anzeige von Ethernet-Paketen auf dem KC85 (Netzwerk Sniffer)
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:
- Internetbrowser per HTTP
- Dateiaustausch mit TFTP oder FTP
- Anmeldung an und Fernsteuerung von anderen Rechnern mit TELNET
- E-Mail mit SMTP
- Nachrichtenaustausch (Newsserver) mit NNTP
- Umwandlung von Internet IP-Adressen in Domainnamen und umgekehrt mit DNS
- Netzwerkdienste mit CIFS/SMB
- ....
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.
Menü 1 für den Test der KCNET-Schnittstelle
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.