TNS-NET
Содержание
Сеть для 8-битных компьютеров TNS GC и TNS HC-08, также называемая «быстрой линией». Скорость 100 кбит/с, коаксиальный кабель макс 1км, Манчестер.- TNS-NET – Быстрая линия (канал SIO A)
- Формат сетевого кадра
- Порты ввода-вывода HC08 SIO-A
- Последовательность инициализации SIO-A (byte_9C2, 14 B)
- Медленная линия (токовая петля, канал SIO A или B)
- = Выбор канала =
- = Инициализация канала (serial_init_channel) =
- = Формат кадра медленной линии =
- = Управляющие байты =
- = CRC-16 (crc16_compute, 0x0F61) =
- = Ход сетевой загрузки (сетевая загрузка HC08) =
Для TNS-GC была произведена карта TNS-UPP-NET с Z80 A SIO, в TNS-HC она решена на материнской плате с помощью Z80 SIO.
Преемником этой сети является TNS-NET 900 для 16-битных компьютеров.
TNS-NET – Быстрая линия (канал SIO A)
Байт 0: SRC_ADDR (биты 5:0 = адрес источника узла, 6 бит) Байт 1: ФЛАГИ бит7 = 0: кадр данных бит7 = 1: кадр управления (ACK/NACK/шины) биты 5:0: порядковый номер или тип управляющего кадра. Байт 2..N: данные (кадр данных) (CRC обеспечивает аппаратный SIO в режиме SDLC) Управляющие кадры (бит7=1, биты5:0): 0x01 (0x81): ACK – кадр данных получен правильно. 0x02 (0x82): NACK – ошибка, повторный запрос. 0x04 (0x84): BUSY – линия занята, подождите
Функция направления порта ------ ----- -------------------------------------------------------------------- 0x0C R/W Данные SIO-A: чтение = полученный байт, запись = переданный байт 0x0EE R SIO-A RR0: Бит0 = RX готов, Бит 2 = TX пуст, Бит 5 = SYNC, Бит 6 = DCD 0x0EE W SIO-A WRx: команды (сброс канала, WR1–WR7)
Последовательность инициализации SIO-A (byte_9C2, 14 B)
Из загрузочного кода HC08
Байт Значение Регистр Описание ----- ------- ----- -------------------------------------------------------------------- 1 0xD8 WR0 Сброс канала (D7:D6=11) 2 0x40 Команда WR0 (D7:D5=010) 3 0x80 WR0 Сброс Rx CRC/SDLC 4 0x01 Указатель WR0 → WR1 5 0x00 WR1 Нет прерывания (опрос) 6 0x03 Указатель WR0 → WR3 7 0xDD WR3 8-битный Rx, включение Rx, режим поиска, включение CRC 8 0x04 Указатель WR0 → WR4 9 0x20 WR4 1 стоповый бит, синхронизация SDLC, ×1 тактовый сигнал 10 0x05 Указатель WR0 → WR5 11 0x61 WR5 8-битная передача, включение передачи, DTR 12 0x07 Указатель WR0 → WR7 (флаг SDLC) 13 0x7E WR7 байт флага HDLC/SDLC 14 0x06 Указатель WR0 → WR6 (адрес SDLC) +1 own_addr WR6 Адрес собственного узла (byte_926)
Медленная линия (токовая петля, канал SIO A или B)
Ключ Обозначение Канал SIO Порт данных Порт состояния CTC -------- --------- ---------- ---------- ----------- ----------- X Канал A SIO-A 0x0C 0x0E CTC1 канал 0 (порт 0x04) Y Канал B SIO-B 0x0D 0x0F CTC0 канал 1 (порт 0x01)
= Инициализация канала (serial_init_channel) =
CTC: 0x45 = режим таймера, /16, программный триггер; временная константа = 0x0A (скорость передачи данных) SIO (8 Б байт_D7B): WR4 = 0x44 (×16 тактовых импульсов, 1 стоповый бит, асинхронный, без четности) WR3 = 0xC1 (8-битный прием, включение приема) WR5 = 0x68 (8-битная передача, включение передачи, DTR) WR1 = 0x00 (без прерывания)
= Формат кадра медленной линии =
┌───────┬──────┬──────────┄ │ 01h │ SEQ │ LEN + DATA[0..N] │ ~CRC_L │ ~CRC_H │ └──────┴─────├ СОХ сек. нет. длина N + N байт Дополняет CRC-16 SOH = 0x01: начало кадра SEQ = unk_22E7: порядковый номер, увеличивается после каждого блока. LEN = первый байт части данных; CRC рассчитывается из [LEN, DATA...] ~CRC = битовое дополнение полученного CRC-16 (ло, привет)
0x06 ACK: кадр получен правильно 0x15 NAK: ошибка CRC, повторный запрос
= CRC-16 (crc16_compute, 0x0F61) =
Ввод: HL = адрес данных, B = количество байтов, DE = начальное значение (0xFFFF). Вывод: DE = результирующий CRC-16. Алгоритм: побайтовое исключающее ИЛИ, вариант CRC-16/CCITT (полином 0x1021 или 0x8005) CRC рассчитывается на основе [LEN, DATA[0]..DATA[N-1]]; в кадре сохраняется битовое дополнение.
= Ход сетевой загрузки (сетевая загрузка HC08) =
TNS HC-08 может загружаться как с медленных, так и с быстрых линий.
1. net_setup_node_params(A) – инициализация адресов узлов с помощью DIP-переключателей. 2. net_call_tx_init() – инициализация линии (SIO init) 3. Напечатайте «подключение...» 4. net_transceive(type=0x12) – рукопожатие: запрос файла SYSHC.SYS. → Ошибка: «- ошибка связи» → Файл не найден: «- файл не может быть открыт» 5. Выведите «ok\nptu операционная система...» 6. Инициализация счетчика блоков (unk_22C8 = 0xFFFF) 7. Цикл приема блоков (по 128 байт): а. net_transceive(type=0x0C) – запрос блокировки б. net_print_block_counter() – распечатка счетчика «ддд» в. Копирование блока на адрес назначения (unk_22CA) д. Если последний блок (флаг в FLAGS): выход 8. Переместите ОС по адресу назначения (LDIR или LDDR). 9. JP (exec_addr) – передача управления ОС