TNS HC-08

TNS HC-08 (Též nazýván Home computer 8bit.Počítač byl vyráběn od 1988 v JZD AK Slušovice.) Též nazýván Home computer 8bit.Počítač byl vyráběn od 1988 v JZD AK Slušovice. Počítač vychází z TNS GC. Hardware je založen na U880D @ 3 MHz.Na počítači byl provozován operační systém TNS-DOS(TurboDOS).

Obsah
Cena v roce 1988 uváděna 25000 Kčs. To tehdy odpovídalo oficiálně cca $ 3650 USD, dle kursu na černém trhu pak $ 694 USD, v cenách roku 2025 by to bylo 223146 CZK ($ 9702 USD).Vyrobeno okolo 4000 ks (dle autorů HC-16).

Připojitelné k síti TNS-NET, HC-08 umožňuje zavádění systému přes síť.

Klávesnice shodná s TNS HC-16.

Varianty

Periferie

BootROMky

Dochovaly se celkem 3 varianty:

U variant se dvěmi pamětmi 2716 je první od adresy 0x0000, druhá od adresy 0x1000 (tzn. je zde mezera, zřejmě kvůli plánu na větší obvod). Kód nejprve odkopíruje obsah do RAM, následně dojde k odpojení ROM z paměťového rozsahu.

Popis bootloaderu

Bootloader TNS-HC zavádí OS z disket (jednotky 0, 1) nebo ze sítě (rychlá linka – UPP-NET, pomalá linka – proudová smyčka kanálů A/B přes ASK/QASK). Rychlá linka a kanál A sdílí stejné HW, takže nelze použít současně; aktivní je vždy jen jedna varianta dle přepínačů.

Po resetu bootloader vypíše hlavičku a automaticky testuje diskety (0 → 1). Pokud nalezne disketu, pokusí se načíst OSBOOT; při úspěchu zavede SYS.SYS a předá řízení OS, při neúspěchu systém zatuhne. Pokud diskety nenajde, zobrazí výzvu k volbě zdroje.

Výzva:

xxx se ptá odkud zavést (A,B,L,X,Y,0-31 + Vezmi) ?

Volby:

Bootloader vždy nejprve testuje diskety; tento krok lze přeskočit držením volby současně s RESETem, čímž se ihned použije požadovaný zdroj.

Při zadávání lze chybu opravit klávesou [<-].

Přítomnost diskety neznamená její použitelnost – rozhodující je úspěšné načtení OSBOOT a SYS.SYS.

Příklady

📋Zavaděč TNS (FWLP) - v 1.2	 JZD Slušovice 1989


Floppy 0
Floppy 1
003 se ptá odkud zavést (A,B,0-31 + Vezmi) ? 2
Linka navazuje spojení...ok
čtu operační systém ... ddd
Předávám řízení OS

TNS HC-08 Bootloader – Technická dokumentace

Analýza binárního obrazu bootloaderu HC-08 v1.2 (MD5: c7e98595cb45e562e8613a67110a50f4),

2×2 kB EPROM (TNSROM1 + TNSROM2), JZD Slušovice 1989.

Přehled podprogramů bootloaderu

Adresa  Název                    Popis
------- ------------------------ -------------------------------------------------------
0x0000  reset_vec                Inicializační vektor v ROM; nastaví PPI, otestuje bit
a rozhodne o bootování z RAM nebo přímém skoku.
0x0124  reset_ram_start          Hlavní inicializace po přesunu kódu do RAM.
Ověří CRC paměti, inicializuje HW, zobrazí banner.
0x01DF  get_boot_option          Čte volbu z klávesnice (BDOS call C=3).
0x01E5  init                     Inicializace: PPI porty 0x12/0x2B, memory-mapper,
vymazání obrazovky, výpis banneru.
0x025A  do_netboot_selected      Vytiskne název linky a zavolá netboot.
0x0267  boot_from_floppy         Zavede OS z diskety (retry 5×).
0x02EE  reloc_bootcode_restart   Relokace: kopie 0x2400 B z 0x2400 → 0x0100, restart.
0x0302  parse_decimal_str        Parsování čísla 1–3 cifry z textového bufferu.
0x036C  print_dollarstr          Nastav C=9, padni do bootromdoscall.
0x036E  bootromdoscall           Mini-BDOS dispatcher (C=1,2,3,9,0Ah).
0x038A  kbd_input                Blokující čtení klávesy + echo.
0x039C  aux_input                Neblokující test klávesnice.
0x03A5  print_until_dollar       Tisk řetězce do znaku '$'.
0x03B1  read_cons_buf            Čtení řádku z konzole (CP/M formát bufferu).
0x04D4  bgd_clear                Vymazání video RAM (0xF580–0xFFFF).
0x04E9  putchar                  Výpis znaku; LF/CR/BS/FF, scrollování.
0x0530  kbdscan                  Scan matice klávesnice (17 sloupců, porty 0x11–0x21).
0x0543  getkey                   Blokující čtení klávesy + debounce.

FDC – Disková jednotka (WD2797)

Adresa  Název                    Popis
------- ------------------------ -------------------------------------------------------
0x0610  floppy_routine           Hlavní dispečer FDC: init/read/info podle (IX+0).
0x069F  fdc_select_and_spinup    Výběr jednotky (port 0x14), čekání na roztočení motoru.
0x06DE  fdc_motor_off            Vypnutí motoru (port 0x14 = 1), byte_79B = 0xFF.
0x06FF  fdc_check_diskette       Test přítomnosti diskety.
0x070E  fdc_read_sector          Čtení sektoru přes WD2797.
0x0730  fdc_read_to_buffer       Čtení dat z FDC do bufferu (INI instrukce, port 0x1B).
0x0752  fdc_send_cmd_wait        Zápis příkazu do WD2797 + čekání na dokončení.
0x075B  fdc_wait_drq             Čekání na DRQ/konec operace; timeout = reset 0xD8.
0x0772  fdc_save_track_regs      Záloha 4 B parametrů stopy/strany do unk_797.
0x077F  fdc_restore_track_regs   Obnova parametrů z unk_797 zpět na 0x66.
0x078C  delay_ms_loop            Zpožďovací smyčka (E × 0xBB iterací).

= Tabulky sekvenčních čísel =

unk_92E[64]: RX tabulka – příští očekávaná sekvence od každého uzlu (0–63)
Inicializace: 0x80 (neinicializováno = přijmi vždy)
unk_974[64]: TX tabulka – příští sekvence při vysílání každému uzlu
Inicializace: 0x40 (neinicializováno)

= Přehled podprogramů TNS-NET =

Adresa  Název                      Popis
------- -------------------------- -----------------------------------------------
0x07D1  netboot                    Hlavní funkce síťového bootu.
0x09B4  sio_fast_line_init         Inicializace SIO-A pro TNS-NET.
0x09D0  sio_receive_or_ack         RX/TX dispečer pro rychlou linku.
0x09E8  delay_network_slots        Zpožďovací smyčka (backoff, HL timeslotů).
0x09F5  sio_poll_and_decode_frame  Polling SIO RX + dekódování rámce, timeout 200.
0x0AD4  sio_transmit_packet        Odeslání paketu: TX enable, adresa, data.
0x0B1A  sio_random_backoff         Náhodný backoff při kolizi (via registr R).
0x0B29  sio_receive_ack_frame      Čekání na ACK rámec ze SIO-A.
0x0B73  sio_send_with_ack          Odeslání + čekání na ACK, retry při kolizi.
0x0B7F  sio_send_frame             Odeslání celého datového rámce (OUTI po bajtu).
0x0BBA  sio_decode_incoming        Dekódování přijatého rámce ze SIO-A.
0x08B4  net_transceive             Odeslání/příjem síťového paketu (2× call linky).
0x08D0  net_print_block_counter    Tisk 3-ciferného čítače bloků na konzoli.
0x0901  net_setup_node_params      Inicializace adresy a kanálu z DIP spínačů.
0x091E  net_call_tx_init           Nepřímý skok přes unk_2211 (init linky).
0x0922  net_call_rx_tx             Nepřímý skok přes unk_2213 (RX/TX linky).

= Přehled podprogramů pomalé linky =

Adresa  Název                    Popis
------- ------------------------ -----------------------------------------------
0x0D3C  serial_init_channel      Inicializace SIO + CTC pro pomalou linku.
0x0D83  serial_rx_tx_block       Příjem nebo vysílání bloku (C=0 TX, C≠0 RX).
0x0DDB  serial_send_ctrl_byte    Odeslání řídicího bajtu (ACK/NAK) na SIO data port.
0x0E5F  serial_tx_fsm            TX stavový automat (6 stavů, bajty rámce po 1).
0x0EB6  serial_rx_fsm            RX stavový automat (7 stavů, detekce SOH, dat, CRC).
0x0F48  serial_check_ack_nak     Test, zda přijatý bajt je ACK (0x06) nebo NAK (0x15).
0x0F54  serial_bit_delay         Zpožďovací smyčka pro bitové časování.
0x0F61  crc16_compute            Výpočet CRC-16 (nibble XOR, vstup HL/B/DE).
0x0F8C  serial_setup_tx_buffer   Nastavení TX/RX bufferu (posun ukazatelů o 4 B).

= TX stavový automat (unk_22E4) =

Stav 1 → Vyšli SOH (0x01)                      → stav 2
Stav 2 → Vyšli SEQ (unk_22E7)                  → stav 3
Stav 3 → Vyšli bajty z bufferu (unk_22E0→22E2) → stav 3 (smyčka)
Po prázdném bufferu                    → stav 4
Stav 4 → Vyšli ~CRC_LO (komplement unk_22E5)   → stav 5
Stav 5 → Vyšli ~CRC_HI (komplement unk_22E6)   → stav 6
Stav 6 → Vynuluj stav (konec rámce)

= RX stavový automat (unk_22D9) =

Stav 0 → Idle: detekce SOH/ACK/NAK
Stav 1 → Po příkazu: čeká na ACK → stav 2
Stav 2 → Přijímá SEQ → unk_22DC → stav 3
Stav 3 → Přijímá délku + nastavuje buffer; pokud 0 → retry
Stav 4 → Přijímá datové bajty do unk_22D5 (inkrementující ptr)
Stav 5 → Konec dat (signál pro vnější smyčku)
Stav 6 → Přijímá CRC_LO → unk_22DA, CRC_HI → unk_22DB → stav 0

Mapa RAM (0x2200–0x22FF)

Adresa  Délka  Název              Popis
------- ------ ------------------ -----------------------------------------------
0x2200  14 B   stack              Zásobník + pracovní oblast (IX parametry)
0x220E  2 B    floppy_driver_ptr  Ukazatel na funkci ovladače diskety
0x2210  1 B    hw_node_address    Adresa uzlu z DIP spínačů (port 0x11)
0x2211  2 B    net_tx_init_ptr    Ukazatel na init funkci linky
0x2213  2 B    net_rx_tx_ptr      Ukazatel na RX/TX funkci linky
0x2215  2 B    boot_sel_title     Ukazatel na řetězec s názvem linky
0x2217  1 B    net_packet_type    Typ paketu / příznak režimu
0x2218  1 B    net_dest_node      Cílová adresa uzlu pro boot
0x221B  1 B    net_own_node       Vlastní adresa uzlu (bity4:0 z 0x2210)
0x221C  1 B    net_channel_num    Číslo kanálu (z bitů7:5, rotováno +1)
0x22CC  1 B    serial_ch_select   0=kanál A (SIO-A), 1=kanál B (SIO-B)
0x22CD  1 B    serial_ctc_port    CTC port (0x04 nebo 0x01)
0x22CE  1 B    serial_data_port   SIO data port (0x0C nebo 0x0D)
0x22CF  1 B    serial_status_port SIO status port (0x0E nebo 0x0F)
0x22D3  2 B    serial_rx_buf_ptr  Ukazatel do přijímacího bufferu
0x22D9  1 B    serial_rx_state    Stav RX automatu (0=idle)
0x22DD  1 B    serial_ack_nak     Přijatý ACK/NAK: 0x06=ACK, 0x15=NAK
0x22E4  1 B    serial_tx_state    Stav TX automatu (0=idle)
0x22E7  1 B    serial_tx_seq      Sekvenční číslo TX rámce

Paměťová mapa

0x0000–0x0023  ROM (36 B): první část bootloaderu (copy stub + reset vektor)
0x0100–0x0FFF  RAM: bootloader (po přesunu z ROM, kód + data)
0x2200–0x22FF  RAM: proměnné bootloaderu
0x2400–0x43FF  RAM: dočasný buffer pro načítaný OS (8 kB)
0xF580–0xFFFF  Video RAM (80×40 znaků, 2 B/znak)

Dokumentace dle analýzy ROM HC-08 v1.2 (MD5: c7e98595cb45e562e8613a67110a50f4).

I/O porty

Chipselect signály generuje 74154 (IC104)

Výstup 74154 I/O rozsah Význam / obvod Poznámka
CS0# 0x3C-0x3F -
CS1# 0x38-0x3B S2
CS2# 0x34-0x37 - Prý S3 !!!
CS3# 0x30-0x33 S4
CS4# 0x2C-0x2F PFD OFF
CS5# 0x28-0x2B PPIMAP
CS6# 0x24-0x27 MAPF
CS7# 0x20-0x23 DEFMAP
CS8# 0x1C-0x1F ZAVOFF
CS9# 0x18-0x1B FDC karta
CS10# 0x14-0x17 FDC karta
CS11# 0x10-0x13 PPI 1 - MHB8255A
CS12# 0x0C-0x0F SIO - IC86 - UA8560D Kanál A (CTC1, kanál 0): TNS-NET / rychlá linka, kanál B (CTC0, kanál 1): sériová tiskárna
CS13# 0x08-0x0B PIO - IC51 - UA855D
CS14# 0x04-0x07 CTC1 - IC88 - UA587D
CS15# 0x00-0x03 CTC0 - IC87 - UA587D

Port(y)    Obvod/Signál        Funkce
---------- ------------------- ---------------------------------------------------
0x00–0x03  CTC0 (UA587D)       Ch.0–Ch.3; Ch.1 = hodiny pro SIO-B (pomalá linka)
0x04–0x07  CTC1 (UA587D)       Ch.0–Ch.3; Ch.0 = hodiny pro SIO-A (rychlá linka)
0x0C       SIO-A Data          Čtení=RX, Zápis=TX (TNS-NET / rychlá linka)
0x0D       SIO-B Data          Čtení=RX, Zápis=TX (pomalá linka B)
0x0E       SIO-A Status/Ctrl   Bit0=RX ready, Bit2=TX prázdný, Bit5=SYNC/HUNT, Bit6=DCD
0x0F       SIO-B Status/Ctrl   Bit0=RX ready, Bit2=TX prázdný
0x11       PPI1 Port B         DIP spínače – adresa uzlu (bity4:0) + kanál linky (bity7:5)
0x12       PPI1 Port A         Řízení klávesnice / výstupu
0x13       PPI1 Control        Nastavení režimu MHB8255A (0x92 = mode setup)
0x14–0x17  FDC řídicí port     Drive select, motor, strana (WD2797)
0x18       WD2797 CMD/Status   Příkaz (W) / Status (R)
0x1A       WD2797 Sektor       Číslo sektoru
0x1B       WD2797 Data         Datový registr (INI/OUTI transfer)
0x1C       MEM Mapper OFF      Odpojení BootROM z adresního prostoru
0x2B       PPIMAP              Nastavení paměťového mapování

Počítače odvozené od TNS HC-08

Následující počítače vychází z TNS HC-08, nebo byly TNS HC-08 inspirované:

Reference

Small
Medium
Large