TNS-NET
Obsah
Síť pro 8-bitové počítače TNS GC a TNS HC-08, též nazývána "rychlá linka". Rychlost 100 kbit/s, koaxiální kabel max 1km, manchester.- TNS-NET – Rychlá linka (SIO kanal A)
- Formát síťového rámce
- HC08 I/O porty SIO-A
- Inicializační sekvence SIO-A (byte_9C2, 14 B)
- Pomalá linka (proudová smyčka, SIO kanal A nebo B)
- = Výběr kanálu =
- = Inicializace kanálu (serial_init_channel) =
- = Formát rámce pomalé linky =
- = Řídicí bajty =
- = CRC-16 (crc16_compute, 0x0F61) =
- = Průběh síťového bootu (HC08 netboot) =
Pro TNS-GC se vyráběla karta TNS-UPP-NET se Z80 A SIO, v TNS-HC řešeno na základní desce pomocí Z80 SIO.
Nástupcem této sítě je TNS-NET 900 pro 16bitové počítače.
TNS-NET – Rychlá linka (SIO kanal A)
Bajt 0: SRC_ADDR (bity5:0 = zdrojová adresa uzlu, 6 bitů) Bajt 1: FLAGS bit7 = 0: datový rámec bit7 = 1: řídicí rámec (ACK/NACK/busy) bity5:0: sekvenční číslo nebo typ řídicího rámce Bajt 2..N: Data (datový rámec) (CRC zajišťuje HW SIO v SDLC módu) Řídicí rámce (bit7=1, bity5:0): 0x01 (0x81): ACK – datový rámec správně přijat 0x02 (0x82): NACK – chyba, žádost o opakování 0x04 (0x84): BUSY – linka obsazena, počkej
Port Směr Funkce ------ ----- ------------------------------------------------------------------ 0x0C R/W SIO-A Data: čtení = přijatý bajt, zápis = vysílaný bajt 0x0EE R SIO-A RR0: Bit0=RX ready, Bit2=TX prázdný, Bit5=SYNC, Bit6=DCD 0x0EE W SIO-A WRx: příkazy (Channel Reset, WR1–WR7)
Inicializační sekvence SIO-A (byte_9C2, 14 B)
Z bootkódu HC08
Bajt Hodnota Reg Popis ----- ------- ----- ---------------------------------------------------------- 1 0xD8 WR0 Channel Reset (D7:D6=11) 2 0x40 WR0 Příkaz (D7:D5=010) 3 0x80 WR0 Reset Rx CRC / SDLC 4 0x01 WR0 Ukazatel → WR1 5 0x00 WR1 Bez přerušení (polling) 6 0x03 WR0 Ukazatel → WR3 7 0xDD WR3 8-bit Rx, Rx Enable, Hunt mode, CRC enable 8 0x04 WR0 Ukazatel → WR4 9 0x20 WR4 1 stop bit, SDLC sync, ×1 hodiny 10 0x05 WR0 Ukazatel → WR5 11 0x61 WR5 8-bit TX, TX Enable, DTR 12 0x07 WR0 Ukazatel → WR7 (SDLC flag) 13 0x7E WR7 HDLC/SDLC flag byte 14 0x06 WR0 Ukazatel → WR6 (SDLC adresa) +1 own_addr WR6 Vlastní adresa uzlu (byte_926)
Pomalá linka (proudová smyčka, SIO kanal A nebo B)
Klávesa Označení SIO kanal Data port Status port CTC -------- --------- ---------- ---------- ------------ ----------- X Kanál A SIO-A 0x0C 0x0E CTC1 ch.0 (port 0x04) Y Kanál B SIO-B 0x0D 0x0F CTC0 ch.1 (port 0x01)
= Inicializace kanálu (serial_init_channel) =
CTC: 0x45 = timer mode, /16, software trigger; time const = 0x0A (baudrate) SIO (8 B z byte_D7B): WR4 = 0x44 (×16 hodiny, 1 stop bit, async, bez parity) WR3 = 0xC1 (8-bit Rx, Rx Enable) WR5 = 0x68 (8-bit TX, TX Enable, DTR) WR1 = 0x00 (bez přerušení)
┌──────┬──────┬──────────────────┬────────┬────────┐ │ 01h │ SEQ │ LEN + DATA[0..N] │ ~CRC_L │ ~CRC_H │ └──────┴──────┴──────────────────┴────────┴────────┘ SOH seq.č. délka N + N bajtů komplementy CRC-16 SOH = 0x01: zahájení rámce SEQ = unk_22E7: sekvenční číslo, inkrementuje po každém bloku LEN = první bajt datové části; CRC se počítá z [LEN, DATA...] ~CRC = bitový komplement výsledného CRC-16 (lo, hi)
0x06 ACK: rámec přijat správně 0x15 NAK: chyba CRC, žádost o opakování
= CRC-16 (crc16_compute, 0x0F61) =
Vstup: HL = adresa dat, B = počet bajtů, DE = init hodnota (0xFFFF) Výstup: DE = výsledné CRC-16 Algoritmus: nibble-by-nibble XOR, varianta CRC-16/CCITT (polynom 0x1021 nebo 0x8005) CRC počítáno z [LEN, DATA[0]..DATA[N-1]]; do rámce ukládán bitový komplement.
= Průběh síťového bootu (HC08 netboot) =
TNS HC-08 umí bootovat z pomale i rychle linky
1. net_setup_node_params(A) – inicializace adres uzlu z DIP spínačů 2. net_call_tx_init() – inicializace linky (SIO init) 3. Tisk " navazuje spojení..." 4. net_transceive(typ=0x12) – handshake: žádost o soubor SYSHC.SYS → Chyba: " - chyba komunikace" → Soubor nenalezen: " - soubor nelze otevřít" 5. Tisk "ok\nptu operační systém ... " 6. Inicializace čítače bloků (unk_22C8 = 0xFFFF) 7. Smyčka příjmu bloků (každý 128 bajtů): a. net_transceive(typ=0x0C) – žádost o blok b. net_print_block_counter() – výpis čítače "ddd" c. Kopie bloku na cílovou adresu (unk_22CA) d. Pokud poslední blok (příznak v FLAGS): ukončit 8. Přesun OS na cílovou adresu (LDIR nebo LDDR) 9. JP (exec_addr) – předání řízení OS