TNS-NET

Teile dieses Themas wurden möglicherweise maschinell übersetzt.

Inhalt
Netzwerk für 8-Bit-Computer TNS GC und TNS HC-08, auch „Fast Line“ genannt. Geschwindigkeit 100 kbit/s, Koaxialkabel max. 1 km, Manchester.

Für TNS-GC wurde eine TNS-UPP-NET-Karte mit Z80 A SIO produziert, bei TNS-HC wurde sie auf dem Motherboard mit Z80 SIO gelöst.

Der Nachfolger dieses Netzwerks ist TNS-NET 900 für 16-Bit-Computer.

TNS-NET – Schnelle Leitung (SIO-Kanal A)

Netzwerkrahmenformat

Byte 0: SRC_ADDR (Bits5:0 = Knotenquelladresse, 6 Bits)
Byte 1: FLAGS
Bit7 = 0: Datenrahmen
Bit7 = 1: Kontrollrahmen (ACK/NACK/Busse)
Bits5:0: Sequenznummer oder Typ des Kontrollrahmens
Byte 2..N: Daten (Datenrahmen)
(CRC stellt HW SIO im SDLC-Modus bereit)

Steuerrahmen (Bit7=1, Bits5:0):
0x01 (0x81): ACK – Datenrahmen korrekt empfangen
0x02 (0x82): NACK – Fehler, Wiederholungsanforderung
0x04 (0x84): BUSY – Leitung besetzt, warten

HC08 E/A-Ports SIO-A

Portrichtungsfunktion
------ ----- --------------------------------------------------------------------
0x0C R/W SIO-A Daten: lesen = empfangenes Byte, schreiben = gesendetes Byte
0x0EE R SIO-A RR0: Bit0=RX bereit, Bit2=TX leer, Bit5=SYNC, Bit6=DCD
0x0EE W SIO-A WRx: Befehle (Kanal-Reset, WR1–WR7)

SIO-A-Initialisierungssequenz (byte_9C2, 14 B)

Ab Bootcode HC08

Beschreibung der Byte-Wert-Registrierung
----- ------- ----- --------------------------------------------------------------------
1 0xD8 WR0 Kanal-Reset (D7:D6=11)
2 0x40 WR0-Befehl (D7:D5=010)
3 0x80 WR0 Rx CRC / SDLC zurücksetzen
4 0x01 WR0 Zeiger → WR1
5 0x00 WR1 Kein Interrupt (Polling)
6 0x03 WR0 Zeiger → WR3
7 0xDD WR3 8-Bit-Rx, Rx-Aktivierung, Hunt-Modus, CRC-Aktivierung
8 0x04 WR0 Zeiger → WR4
9 0x20 WR4 1 Stoppbit, SDLC-Synchronisation, ×1 Takt
10 0x05 WR0 Zeiger → WR5
11 0x61 WR5 8-Bit-TX, TX-Aktivierung, DTR
12 0x07 WR0 Zeiger → WR7 (SDLC-Flag)
13 0x7E WR7 HDLC/SDLC-Flag-Byte
14 0x06 WR0 Zeiger → WR6 (SDLC-Adresse)
+1 own_addr WR6 Eigene Knotenadresse (byte_926)

Langsame Leitung (Stromschleife, SIO-Kanal A oder B)

= Kanalauswahl =

Schlüssel Bezeichnung SIO-Kanal Datenport Statusport CTC
-------- --------- ---------- ---------- ----------- -----------
X Kanal A SIO-A 0x0C 0x0E CTC1 Kanal 0 (Port 0x04)
Y-Kanal B SIO-B 0x0D 0x0F CTC0 Kanal 1 (Port 0x01)

= Kanalinitialisierung (serial_init_channel) =

CTC: 0x45 = Timer-Modus, /16, Software-Trigger; Zeitkonstante = 0x0A (Baudrate)
SIO (8 B von Byte_D7B):
WR4 = 0x44 (×16 Takt, 1 Stoppbit, asynchron, keine Parität)
WR3 = 0xC1 (8-Bit-Rx, Rx-Aktivierung)
WR5 = 0x68 (8-Bit-TX, TX-Aktivierung, DTR)
WR1 = 0x00 (kein Interrupt)

= Slow-Line-Frame-Format =

┌──────┬──────┬──────────┄
│ 01h │ SEQ │ LEN + DATA[0..N] │ ~CRC_L │ ~CRC_H │
└──────┴─────├
SOH-Folge. NEIN.   Länge N + N Bytes CRC-16-Komplemente

SOH = 0x01: Beginn des Frames
SEQ = unk_22E7: Sequenznummer, erhöht sich nach jedem Block
LEN = erstes Byte des Datenteils; CRC wird aus [LEN, DATA...] berechnet
~CRC = Bitkomplement des resultierenden CRC-16 (lo, hi)

= Steuerbytes =

0x06 ACK: Frame korrekt empfangen
0x15 NAK: CRC-Fehler, Wiederholungsanforderung

= CRC-16 (crc16_compute, 0x0F61) =

Eingabe: HL = Datenadresse, B = Anzahl Bytes, DE = Initialwert (0xFFFF)
Ausgabe: DE = Resultierendes CRC-16
Algorithmus: Nibble-by-Nibble XOR, CRC-16/CCITT-Variante (Polynom 0x1021 oder 0x8005)
CRC berechnet aus [LEN, DATA[0]..DATA[N-1]]; Im Frame wird ein Bitkomplement gespeichert.

= Net-Boot-Fortschritt (HC08 Netboot) =

TNS HC-08 kann sowohl von langsamen als auch von schnellen Leitungen booten

1. net_setup_node_params(A) – Initialisierung von Knotenadressen über DIP-Schalter
2. net_call_tx_init() – Leitungsinitialisierung (SIO init)
3. Drucken Sie „connecting…“
4. net_transceive(type=0x12) – Handshake: Anforderung für die Datei SYSHC.SYS
→ Fehler: „- Kommunikationsfehler“
→ Datei nicht gefunden: „-Datei kann nicht geöffnet werden“
5. Geben Sie „ok\nptu Betriebssystem ...“ aus.
6. Initialisierung des Blockzählers (unk_22C8 = 0xFFFF)
7. Empfangsschleife blockieren (jeweils 128 Bytes):
a. net_transceive(type=0x0C) – Blockanforderung
b. net_print_block_counter() – Ausdruck des „ddd“-Zählers
c. Kopie des Blocks an die Zieladresse (unk_22CA)
d. Wenn letzter Block (Flag in FLAGS): Beenden
8. Verschieben Sie das Betriebssystem an die Zieladresse (LDIR oder LDDR).
9. JP (exec_addr) – Übertragung der Betriebssystemsteuerung