TNS HC-08

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

Inhalt
Teile dieses Themas wurden möglicherweise maschinell übersetzt.

Es wurden etwa 4.000 Einheiten produziert (nach Angaben der HC-16-Autoren).

Der HC-08 kann an das TNS-NET-Netzwerk angeschlossen werden und ermöglicht das Systemstarten über das Netzwerk.

Tastatur identisch mit TNS HC-16.

Varianten

Peripherie

BootROMs

Insgesamt sind 3 Varianten erhalten geblieben:

Bei Varianten mit zwei 2716-Speichern ist der erste ab Adresse 0x0000, der zweite ab Adresse 0x1000 (d. h. es gibt eine Lücke, offenbar aufgrund der Planung einer größeren Schaltung). Der Code kopiert zunächst den Inhalt ins RAM, dann wird das ROM vom Speicherbereich getrennt.

Bootloader-Beschreibung

Der TNS-HC-Bootloader lädt das Betriebssystem von Disketten (Laufwerke 0, 1) oder aus dem Netzwerk (schnelle Leitung – UPP-NET, langsame Leitung – Stromschleife der A/B-Kanäle über ASK/QASK). Fast Line und Kanal A teilen sich die gleiche Hardware und können daher nicht gleichzeitig verwendet werden; Es ist immer nur eine Variante entsprechend den Schaltern aktiv.

Nach dem Zurücksetzen druckt der Bootloader den Header und testet automatisch die Festplatten (0 → 1). Wenn die Diskette gefunden wird, versucht es, OSBOOT zu laden. Bei Erfolg lädt es SYS.SYS und übergibt die Kontrolle an das Betriebssystem. Bei einem Fehler friert das System ein. Wenn die Disketten nicht gefunden werden, werden Sie aufgefordert, eine Quelle auszuwählen.

Herausforderung:

xxx fragt, von wo gebootet werden soll (A,B,L,X,Y,0-31 + Take)?

Auswahlmöglichkeiten:

Der Bootloader testet immer zuerst die Disketten. Dieser Schritt kann übersprungen werden, indem Sie die Option gleichzeitig mit RESET gedrückt halten, wodurch die gewünschte Ressource sofort verwendet wird.

Beim Tippen kann ein Fehler mit der Taste [<-] korrigiert werden.

Das Vorhandensein einer Diskette bedeutet nicht, dass diese nutzbar ist – entscheidend ist das erfolgreiche Laden von OSBOOT und SYS.SYS.

Beispiele

📋Lader TNS (FWLP) – in 1.2 JZD Slušovice 1989


Diskette 0
Diskette 1
003 fragt, wo (A,B,0-31 + Take) eingeführt werden soll? 2
Die Leitung verbindet sich ... ok
Lesen des Betriebssystems ... ddd
Ich übergebe die Kontrolle an OS

TNS HC-08 Bootloader – Technische Dokumentation

HC-08 v1.2 Bootloader-Binärbildanalyse (MD5: c7e98595cb45e562e8613a67110a50f4),

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

Übersicht über Bootloader-Subroutinen

Beschreibung des Adressnamens
------- ---------------------- --------------------------------------------------------------------
0x0000 reset_vec Initialisierungsvektor im ROM; PPI setzen, Bit testen
und entscheidet, ob vom RAM gebootet oder direkt gesprungen werden soll.
0x0124 reset_ram_start Hauptinitialisierung nach dem Verschieben des Codes in den RAM.
Es überprüft den Speicher-CRC, initialisiert die Hardware und zeigt das Banner an.
0x01DF get_boot_option Liest eine Option von der Tastatur (BDOS-Aufruf C=3).
0x01E5 init Initialisierung: PPI-Ports 0x12/0x2B, Memory-Mapper,
Bildschirmreinigung, Bannerauflistung.
0x025A do_netboot_selected Gibt den Zeilennamen aus und ruft Netboot auf.
0x0267 boot_from_floppy Booten Sie das Betriebssystem von einer Diskette (5x wiederholen).
0x02EE reloc_bootcode_restart Verschiebung: 0x2400 B von 0x2400 → 0x0100 kopieren, neu starten.
0x0302 parse_decimal_str Analysieren der Ziffern 1–3 aus dem Textpuffer.
0x036C print_dollarstr Setze C=9, falle in bootromdoscall.
0x036E bootromdoscall Mini-BDOS-Dispatcher (C=1,2,3,9,0Ah).
0x038A kbd_input Sperrschlüssel gelesen + Echo.
0x039C aux_input Nicht blockierender Tastaturtest.
0x03A5 print_until_dollar Gibt die Zeichenfolge als „$“-Zeichen aus.
0x03B1 read_cons_buf Lesen einer Zeile von der Konsole (CP/M-Pufferformat).
0x04D4 bgd_clear Video-RAM löschen (0xF580-0xFFFF).
0x04E9 putchar Zeichen-Dump; LF/CR/BS/FF, Scrollen.
0x0530 kbdscan Tastaturmatrix scannen (17 Spalten, Ports 0x11–0x21).
0x0543 getkey Blockieren des Schlüssellesens + Entprellen.

FDC – Festplattenlaufwerk (WD2797)

Beschreibung des Adressnamens
------- ---------------------- --------------------------------------------------------------------
0x0610 floppy_routine Haupt-FDC-Dispatcher: init/read/info durch (IX+0).
0x069F fdc_select_and_spinup Einheitenauswahl (Port 0x14), wartet auf Motor-Spinup.
0x06DE fdc_motor_off Motor aus (Port 0x14 = 1), Byte_79B = 0xFF.
0x06FF fdc_check_diskette Diskettenpräsenztest.
0x070E fdc_read_sector Sektor über WD2797 lesen.
0x0730 fdc_read_to_buffer Daten vom FDC in den Puffer lesen (INI-Anweisung, Port 0x1B).
0x0752 fdc_send_cmd_wait Schreibbefehl an WD2797 + Warten auf Abschluss.
0x075B fdc_wait_drq Warten auf DRQ/Ende des Vorgangs; Timeout = 0xD8 zurücksetzen.
0x0772 fdc_save_track_regs Sichern Sie 4B der Track-/Seitenparameter auf unk_797.
0x077F fdc_restore_track_regs Wiederherstellen der Parameter von unk_797 zurück auf 0x66.
0x078C delay_ms_loop Verzögerungsschleife (E × 0xBB-Iterationen).

= Tabellen mit Sequenznummern =

unk_92E[64]: RX-Tabelle – nächste erwartete Sequenz von jedem Knoten (0-63)
Initialisierung: 0x80 (nicht initialisiert = immer akzeptieren)
unk_974[64]: TX-Tabelle – nächste Sequenz beim Senden an jeden Knoten
Initialisierung: 0x40 (nicht initialisiert)

= Übersicht über TNS-NET-Unterprogramme =

Beschreibung des Adressnamens
------- -----------------------------------------------
0x07D1 Netboot Haupt-Net-Boot-Funktion.
0x09B4 sio_fast_line_init SIO-A für TNS-NET initialisieren.
0x09D0 sio_receive_or_ack RX/TX-Dispatcher für schnelle Leitung.
0x09E8 delay_network_slots Verzögerungsschleife (Backoff, HL-Zeitschlitze).
0x09F5 sio_poll_and_decode_frame Abfrage von SIO RX + Frame-Dekodierung, Timeout 200.
0x0AD4 sio_transmit_packet Paket senden: TX-Aktivierung, Adresse, Daten.
0x0B1A sio_random_backoff Zufälliger Backoff bei Kollision (über R-Register).
0x0B29 sio_receive_ack_frame Warten auf ACK-Frame von SIO-A.
0x0B73 sio_send_with_ack Senden + auf ACK warten, bei Kollision erneut versuchen.
0x0B7F sio_send_frame Senden Sie den gesamten Datenrahmen (OUTI pro Byte).
0x0BBA sio_decode_incoming Empfangenen Frame von SIO-A dekodieren.
0x08B4 net_transceive Senden/Empfangen eines Netzwerkpakets (2x Anrufleitungen).
0x08D0 net_print_block_counter Gibt einen dreistelligen Blockzähler an die Konsole aus.
0x0901 net_setup_node_params Adress- und Kanalinitialisierung über DIP-Schalter.
0x091E net_call_tx_init Indirekter Sprung über unk_2211 (Zeileninit).
0x0922 net_call_rx_tx Indirekter Sprung über unk_2213 (RX/TX-Leitungen).

= Übersicht über Slow-Line-Unterprogramme =

Beschreibung des Adressnamens
------- -----------------------------------------------
0x0D3C serial_init_channel SIO + CTC-Initialisierung für langsame Verbindung.
0x0D83 serial_rx_tx_block Empfangs- oder Sendeblock (C=0 TX, C≠0 RX).
0x0DDB serial_send_ctrl_byte Steuerbyte (ACK/NAK) an SIO-Datenport senden.
0x0E5F serial_tx_fsm TX-Zustandsmaschine (6 Zustände, jeweils 1 Frame-Byte).
0x0EB6 serial_rx_fsm RX-Zustandsmaschine (7 Zustände, SOH-Erkennung, Daten, CRC).
0x0F48 serial_check_ack_nak Testen Sie, ob das empfangene Byte ACK (0x06) oder NAK (0x15) ist.
0x0F54 serial_bit_delay Verzögerungsschleife für das Bit-Timing.
0x0F61 crc16_compute CRC-16 berechnen (Nibble-XOR, Eingabe HL/B/DE).
0x0F8C serial_setup_tx_buffer TX/RX-Puffer-Setup (Verschiebung der Zeiger um 4 B).

= TX-Zustandsmaschine (unk_22E4) =

Zustand 1 → SOH kam heraus (0x01) → Zustand 2
Zustand 2 → Sie haben SEQ (unk_22E7) veröffentlicht → Zustand 3
Zustand 3 → Bytes außerhalb des Puffers (unk_22E0→22E2) → Zustand 3 (Schleife)
Nach leerem Puffer → Zustand 4
Zustand 4 → ~CRC_LO (Komplement unk_22E5) → Zustand 5 beendet
Zustand 5 → ~CRC_HI (Ergänzung unk_22E6) → Zustand 6 kam heraus
Status 6 → Status zurücksetzen (Ende des Frames)

= RX-Zustandsmaschine (unk_22D9) =

Zustand 0 → Leerlauf: SOH/ACK/NAK-Erkennung
Zustand 1 → Nach dem Befehl: Warten auf ACK → Zustand 2
Zustand 2 → Empfängt SEQ → unk_22DC → Zustand 3
Zustand 3 → Akzeptiert Länge + setzt Puffer; wenn 0 → erneut versuchen
Zustand 4 → Empfängt Datenbytes in unk_22D5 (ptr wird inkrementiert)
Zustand 5 → Ende der Daten (Signal für äußere Schleife)
Zustand 6 → CRC_LO empfangen → unk_22DA, CRC_HI → unk_22DB → Zustand 0

RAM-Zuordnung (0x2200–0x22FF)

Adresse Länge Name Beschreibung
------- ------ ------------------- ----------------------------------------------------
0x2200 14 B-Stack Stack + Arbeitsbereich (IX Parameter)
0x220E 2 B floppy_driver_ptr Zeiger auf die Diskettentreiberfunktion
0x2210 1 B hw_node_address Knotenadresse von DIP-Schaltern (Port 0x11)
0x2211 2 B net_tx_init_ptr Zeiger auf die Zeileninitialisierungsfunktion
0x2213 2 B net_rx_tx_ptr Zeiger auf RX/TX-Leitungsfunktion
0x2215 2 B boot_sel_title Zeiger auf einen String mit dem Zeilennamen
0x2217 1 B net_packet_type Pakettyp/Modus-Flag
0x2218 1 B net_dest_node Zielknotenadresse für den Start
0x221B 1 B net_own_node Eigene Knotenadresse (Bits 4:0 von 0x2210)
0x221C 1 B net_channel_num Kanalnummer (aus Bits 7:5, rotiert +1)
0x22CC 1 B serial_ch_select 0=Kanal A (SIO-A), 1=Kanal B (SIO-B)
0x22CD 1 B serial_ctc_port CTC-Port (0x04 oder 0x01)
0x22CE 1 B serial_data_port SIO-Datenport (0x0C oder 0x0D)
0x22CF 1 B serial_status_port SIO-Statusport (0x0E

TNS HC-08

Referenzen