TNS HC-08

TNS HC-08 (Home computer 8bit. 1988 JZD AK Slušovice.) Home computer 8bit. 1988 JZD AK Slušovice. TNS GC. U880D @ 3 MHz. TNS-DOS(TurboDOS).

Treść
Fragmenty tego tematu mogły zostać przetłumaczone maszynowo.

Wyprodukowano około 4000 sztuk (wg autorów HC-16).

Dzięki możliwości podłączenia do sieci TNS-NET, HC-08 umożliwia uruchamianie systemu przez sieć.

Klawiatura identyczna z TNS HC-16.

Warianty

Pyferia

BootROMy

W sumie przetrwały 3 warianty:

Dla wariantów z dwiema pamięciami 2716 pierwsza jest z adresu 0x0000, druga z adresu 0x1000 (czyli jest przerwa, najwyraźniej wynikająca z planu większego układu). Kod najpierw kopiuje zawartość do pamięci RAM, następnie ROM jest odłączany od zakresu pamięci.

Opis programu ładującego

Bootloader TNS-HC ładuje system operacyjny z dyskietek (napędy 0, 1) lub z sieci (szybka linia - UPP-NET, wolna linia - pętla prądowa kanałów A/B poprzez ASK/QASK). Szybka linia i kanał A korzystają z tego samego sprzętu, więc nie można ich używać w tym samym czasie; tylko jeden wariant według przełączników jest zawsze aktywny.

Po zresetowaniu bootloader drukuje nagłówek i automatycznie testuje dyski (0 → 1). Jeśli znajdzie dyskietkę, spróbuje załadować OSBOOT; w przypadku powodzenia ładuje SYS.SYS i przekazuje kontrolę systemowi operacyjnemu, w przypadku niepowodzenia system zawiesza się. Jeśli nie znajdzie dyskietek, wyświetli się monit o wybranie źródła.

Wyzwanie:

xxx pyta, skąd uruchomić komputer (A,B,L,X,Y,0-31 + Take)?

Wybory:

Bootloader zawsze najpierw testuje dyskietki; ten krok można pominąć przytrzymując opcję jednocześnie z RESETEM, co spowoduje natychmiastowe wykorzystanie żądanego zasobu.

Podczas wpisywania błąd można poprawić klawiszem [<-].

Obecność dyskietki nie oznacza, że ​​nadaje się ona do użytku - decydującym czynnikiem jest pomyślne załadowanie OSBOOT i SYS.SYS.

Przykłady

📋Ładowarka TNS (FWLP) - w 1.2 JZD Slušovice 1989


Dyskietka 0
Dyskietka 1
003 pyta, gdzie wprowadzić (A,B,0-31 + Take)? 2
Linia się łączy... OK
czytanie systemu operacyjnego... ddd
Przekazuję kontrolę systemowi operacyjnemu

Program ładujący TNS HC-08 - Dokumentacja techniczna

Analiza obrazu binarnego bootloadera HC-08 v1.2 (MD5: c7e98595cb45e562e8613a67110a50f4),

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

Przegląd podprogramów programu ładującego

Adres Nazwa Opis
------------------------------- ----------------------------------------------------------------------------------
0x0000 reset_vec Wektor inicjujący w ROM; ustaw PPI, bit testowy
i decyduje, czy uruchomić komputer z pamięci RAM, czy przejść bezpośrednio.
0x0124 reset_ram_start Główna inicjalizacja po przeniesieniu kodu do pamięci RAM.
Sprawdza CRC pamięci, inicjuje sprzęt, wyświetla baner.
0x01DF get_boot_option Odczytuje opcję z klawiatury (wywołanie BDOS C=3).
0x01E5 init Inicjalizacja: porty PPI 0x12/0x2B, mapowanie pamięci,
czyszczenie ekranu, wyświetlanie banerów.
0x025A do_netboot_selected Wypisuje nazwę linii i wywołuje funkcję netboot.
0x0267 boot_from_floppy Uruchom system operacyjny z dyskietki (ponów próbę 5x).
0x02EE reloc_bootcode_restart Relokacja: skopiuj 0x2400 B z 0x2400 → 0x0100, uruchom ponownie.
0x0302 parse_decimal_str Parsowanie liczby 1-3 cyfr z bufora tekstowego.
0x036C print_dollarstr Ustaw C=9, wpadnij do bootromdoscall.
0x036E bootromdoscall Mini-BDOS dyspozytor (C=1,2,3,9,0Ah).
0x038A kbd_input Klucz blokujący odczyt + echo.
0x039C aux_input Test klawiatury nieblokującej.
0x03A5 print_until_dollar Wydrukuj ciąg znaków do znaku „$”.
0x03B1 read_cons_buf Odczyt linii z konsoli (format bufora CP/M).
0x04D4 bgd_clear Wyczyść pamięć RAM wideo (0xF580-0xFFFF).
0x04E9 putchar Zrzut znaków; LF/CR/BS/FF, przewijanie.
0x0530 kbdscan Skanuj matrycę klawiatury (17 kolumn, porty 0x11–0x21).
0x0543 getkey Blokowanie odczytu klucza i odbicia.

FDC – napęd dyskowy (WD2797)

Adres Nazwa Opis
------------------------------- ----------------------------------------------------------------------------------
0x0610 floppy_routine Główny dyspozytor FDC: init/read/info przez (IX+0).
0x069F fdc_select_and_spinup Wybór jednostki (port 0x14), oczekiwanie na uruchomienie silnika.
0x06DE fdc_motor_off Silnik wyłączony (port 0x14 = 1), bajt_79B = 0xFF.
0x06FF fdc_check_diskette Test obecności dyskietki.
0x070E fdc_read_sector Odczyt sektora za pomocą WD2797.
0x0730 fdc_read_to_buffer Odczyt danych z FDC do bufora (instrukcja INI, port 0x1B).
0x0752 fdc_send_cmd_wait Zapisanie polecenia do WD2797 + oczekiwanie na zakończenie.
0x075B fdc_wait_drq Oczekiwanie na DRQ/koniec operacji; limit czasu = reset 0xD8.
0x0772 fdc_save_track_regs Utwórz kopię zapasową 4B parametrów ścieżki/strony w unk_797.
0x077F fdc_restore_track_regs Przywracanie parametrów z unk_797 z powrotem do 0x66.
0x078C opóźnienie_ms_loop Pętla opóźnienia (itatacje E × 0xBB).

= Tablice numerów sekwencyjnych =

unk_92E[64]: Tablica RX - następna oczekiwana sekwencja z każdego węzła (0-63)
Inicjalizacja: 0x80 (niezainicjowana = zawsze akceptuj)
unk_974[64]: Tablica TX - następna sekwencja przy transmisji do każdego węzła
Inicjalizacja: 0x40 (niezainicjowana)

= Przegląd podprogramów TNS-NET =

Adres Nazwa Opis
-------- ------------------------------------------------------------------------
0x07D1 netboot Główna funkcja rozruchu sieciowego.
0x09B4 sio_fast_line_init Zainicjuj SIO-A dla TNS-NET.
0x09D0 sio_receive_or_ack Dyspozytor RX/TX dla szybkiej linii.
0x09E8 opóźnienie_network_slots Pętla opóźnienia (wycofanie, szczeliny czasowe HL).
0x09F5 sio_poll_and_decode_frame Odpytywanie SIO RX + dekodowanie ramki, limit czasu 200.
0x0AD4 sio_transmit_packet Wyślij pakiet: włączenie TX, adres, dane.
0x0B1A sio_random_backoff Losowe wycofanie w przypadku kolizji (poprzez rejestr R).
0x0B29 sio_receive_ack_frame Oczekiwanie na ramkę ACK od SIO-A.
0x0B73 sio_send_with_ack Wyślij + czekaj na potwierdzenie, ponawia próbę w przypadku kolizji.
0x0B7F sio_send_frame Wyślij całą ramkę danych (OUTI po bajcie).
0x0BBA sio_decode_incoming Dekoduj ramkę odebraną z SIO-A.
0x08B4 net_transceive Wysyłanie/odbieranie pakietu sieciowego (2x linie telefoniczne).
0x08D0 net_print_block_counter Wydrukuj 3-cyfrowy licznik bloków na konsoli.
0x0901 net_setup_node_params Inicjalizacja adresu i kanału z przełączników DIP.
0x091E net_call_tx_init Skok pośredni przez unk_2211 (init linii).
0x0922 net_call_rx_tx Skok pośredni przez unk_2213 (linie RX/TX).

= Przegląd podprogramów wolnej linii =

Adres Nazwa Opis
-------------------------------------------------------------------------------
0x0D3C serial_init_channel Inicjalizacja SIO + CTC dla wolnego łącza.
0x0D83 serial_rx_tx_block Odbierz lub nadaj blok (C=0 TX, C≠0 RX).
0x0DDB serial_send_ctrl_byte Wyślij bajt kontrolny (ACK/NAK) do portu danych SIO.
0x0E5F serial_tx_fsm Maszyna stanu TX (6 stanów, 1 bajt ramki każdy).
0x0EB6 serial_rx_fsm Maszyna stanu RX (7 stanów, detekcja SOH, dane, CRC).
0x0F48 serial_check_ack_nak Sprawdza, czy odebrany bajt to ACK (0x06) lub NAK (0x15).
0x0F54 serial_bit_delay Pętla opóźnienia dla taktowania bitów.
0x0F61 crc16_compute Obliczenie CRC-16 (nibble XOR, wejście HL/B/DE).
0x0F8C serial_setup_tx_buffer Konfiguracja bufora TX/RX (przesunięcie wskaźników o 4 B).

= Maszyna stanu TX (unk_22E4) =

Stan 1 → Wyszedł SOH (0x01) → stan 2
Stan 2 → Wydali SEQ (unk_22E7) → stan 3
Stan 3 → Bajty poza buforem (unk_22E0 → 22E2) → stan 3 (pętla)
Po pustym buforze → stan 4
Stan 4 → ~CRC_LO (uzupełnienie unk_22E5) → stan 5 zakończył działanie
Stan 5 → ~CRC_HI (uzupełnienie unk_22E6) → pojawił się stan 6
Stan 6 → Stan resetowania (koniec ramki)

= Maszyna stanu RX (unk_22D9) =

Stan 0 → Bezczynność: Wykrywanie SOH/ACK/NAK
Stan 1 → Po poleceniu: oczekiwanie na ACK → stan 2
Stan 2 → Odbiera SEQ → unk_22DC → stan 3
Stan 3 → Akceptuje długość + ustawia bufor; jeśli 0 → spróbuj ponownie
Stan 4 → Odbiera bajty danych do unk_22D5 (zwiększanie ptr)
Stan 5 → Koniec danych (sygnał dla pętli zewnętrznej)
Stan 6 → Odbierz CRC_LO → unk_22DA, CRC_HI → unk_22DB → stan 0

Mapa pamięci RAM (0x2200–0x22FF)

Adres Długość Nazwa Opis
------------------ ------ ------------------ ------------------------------------------------------------------
0x2200 14 B stos Stos + obszar roboczy (parametry IX)
0x220E 2 B floppy_driver_ptr Wskaźnik do funkcji sterownika dyskietki
0x2210 1 B hw_node_address Adres węzła z przełączników DIP (port 0x11)
0x2211 2 B net_tx_init_ptr Wskaźnik do funkcji inicjującej linię
0x2213 2 B net_rx_tx_ptr Wskaźnik do funkcji linii RX/TX
0x2215 2 B boot_sel_title Wskaźnik do ciągu znaków z nazwą linii
0x2217 1 B net_packet_type Flaga typu/trybu pakietu
0x2218 1 B net_dest_node Adres węzła docelowego dla rozruchu
0x221B 1 B net_own_node Adres własnego węzła (bity 4:0 z 0x2210)
0x221C 1 B net_channel_num Numer kanału (od bitów 7:5, obrócony +1)
0x22CC 1 B serial_ch_select 0=kanał A (SIO-A), 1=kanał B (SIO-B)
0x22CD 1 B serial_ctc_port Port CTC (0x04 lub 0x01)
0x22CE 1 B serial_data_port Port danych SIO (0x0C lub 0x0D)
0x22CF 1 B serial_status_port Port stanu SIO (0x0E

TNS HC-08

Bibliografia / Odniesienia