TNS HC-08
Home computer 8bit. 1988 JZD AK Slušovice.
TNS GC. Die Hardware basiert auf U880D @ 3 MHz. TNS-DOS(TurboDOS).
- Varianten
- Peripherie
- BootROMs
- Bootloader-Beschreibung
- Beispiele
- TNS HC-08 Bootloader – Technische Dokumentation
- Übersicht über Bootloader-Subroutinen
- FDC – Festplattenlaufwerk (WD2797)
- = Tabellen mit Sequenznummern =
- = Übersicht über TNS-NET-Unterprogramme =
- = Übersicht über Slow-Line-Unterprogramme =
- = TX-Zustandsmaschine (unk_22E4) =
- = RX-Zustandsmaschine (unk_22D9) =
- RAM-Zuordnung (0x2200–0x22FF)
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.
- TNS HC: Basisvariante, zum Anschluss an das TNS-NET-Netzwerk
- TNS HCF: Mini-Disketten
- TNS HCC: Koppler
- TNS HCFC: Koppler+Flp
- Maus Tesla 3WN 16605
- 320 KB RAM
Insgesamt sind 3 Varianten erhalten geblieben:
- Netzwerk-Bootloader HC-8 V 1.2 (RL) Slušovice Software 1988
- 2048 Byte CRC-32 2F0D5716
- Lader TNS (FWL) – in 1.0 JZD Slušovice 1989
- 2x 2048 Byte MD5: 1.0: c82a94264d590e60c2f3fff992a4affc rom1.bin + f6e39746e474850c3bb8451c4954ed26 rom2.bin
- Lader TNS (FWLP) – in 1.2 JZD Slušovice 1989
- 2x 2048 Bytes MD5: 12504d6db4e44800d3912a7caa0070a7 hc08rom12_TNSROM1.BIN + 4be12ee31684fc48c9d32f425b82618f hc08rom12_TNSROM2.BIN
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.
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:
- A Booten von Diskette in Laufwerk 0; Wenn die Diskette fehlt oder nicht im System ist (OSBOOT oder SYS.SYS können nicht geladen werden), schlägt der Start fehl und ein Reset ist erforderlich.
- B Booten von Diskette in Laufwerk 1; Das Fehlerverhalten ist das gleiche wie bei A (Nicht-System-Disketten- oder Lesefehler → Fehler).
- F Versucht zuerst, von Laufwerk 0 zu booten, und wenn die Festplatte nicht vorhanden ist, von Laufwerk 1; Wenn eine Nicht-Systemdiskette gefunden wird, friert sie ein, genau wie bei einer Direktwahl.
- L Schaltet den Bootloader auf Fast Line (Standardzustand) und bereitet den Netzwerkstart vor; Nach dieser Option muss die Nummer des Knotens (0-31) eingegeben werden. Im Falle eines Verbindungsfehlers liegt ein Problem mit der Leitung (Kabel, UPP-NET) vor, wenn das Lesen auf dem Remote-Computer nicht beginnt.
- X Schaltet auf langsame Leitung, Kanal A (Stromschleife); Es teilt sich die HW mit der Fast-Leitung, daher bedeutet die Auswahl, dass die Fast-Leitung deaktiviert wird, und es ist notwendig, ASK/QASK und die physische Verbindung im Falle eines Kommunikationsfehlers zu überprüfen.
- Y Wechselt zur langsamen Leitung, Kanal B; Funktionell gleich wie X, aber anderer Kanal, geeignet für Probleme auf A.
- 0-31 Gibt die Nummer des Remote-Computers an, von dem das System gebootet wird; wird eingegeben, nachdem eine Zeile ausgewählt wurde und der Bootloader versucht, eine Verbindung herzustellen und SYS.SYS zu laden, wobei ein Verbindungsfehler auf ein Leitungsproblem und ein Lesefortschritt von Null auf ein Problem mit der Quellmaschine hinweist.
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.
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
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 (0x0ETNS HC-08
Referenzen
- Kolektiv aut.: ASSEMBLER Z-80 ; II. vydání - Slušovice 1987
- Ing. M. Muselík: Systémový popis mikroprocesoru Z80 (technika + programování) ; Slušovice 1982
- P. Dvořák a kol.: Mikroprocesorový systém Z80 ; TESLA VÚST 1981 interní zpráva
- Ing. P. Valášek, CSc.: Mikroprocesor 8080 a jeho základní obvody, Svazek 2, díl 1; Knižnice ČSVTS - 1986
- J. Neštický a kol.: Stavebnice Z 80 ; Slušovice ....
- https://www.youtube.com/watch?v=iPhmtdLzlNg (WebArchive) (archive.is)
- https://vetusware.com/download/TNS-DOS%20for%20TNS%20HC-08%202.23%20CZ/?id=18563 (WebArchive) (archive.is)