TNS HC-08
Home computer 8bit. 1988 JZD AK Slušovice.
TNS GC. U880D @ 3 MHz. TNS-DOS(TurboDOS).
- Варианты
- Периферия
- Загрузочные ПЗУ
- Описание загрузчика
- Примеры
- Загрузчик TNS HC-08 - Техническая документация
- Обзор функций загрузчика
- FDC — Дисковод (WD2797)
- = Таблицы порядковых номеров =
- = Обзор подпрограмм TNS-NET =
- = Обзор подпрограмм Slow Line =
- = Конечный автомат TX (unk_22E4) =
- = Конечный автомат RX (unk_22D9) =
- Карта ОЗУ (0x2200–0x22FF)
Было выпущено около 4000 единиц (по данным авторов HC-16).
Подключаемый к сети TNS-NET, HC-08 позволяет загружать систему по сети.
Клавиатура идентична TNS HC-16.
- TNS HC: базовый вариант, для подключения к сети TNS-NET.
- TNS HCF: мини-дискеты.
- TNS HCC: соединитель
- TNS HCFC: муфта+флп
- Мышь Tesla 3WN 16605
- 320 КБ ОЗУ
Всего сохранилось 3 варианта:
- Сетевой загрузчик HC-8 V 1.2 (RL) Slušovice Software 1988 г.
- 2048 байт CRC-32 2F0D5716
- Погрузчик TNS (FWL) - 1.0 JZD Slušovice 1989 г.
- 2x 2048 байт MD5: 1.0: c82a94264d590e60c2f3fff992a4affc rom1.bin + f6e39746e474850c3bb8451c4954ed26 rom2.bin
- Погрузчик TNS (FWLP) - 1.2 JZD Slušovice 1989 г.
- 2x 2048 байт MD5: 12504d6db4e44800d3912a7caa0070a7 hc08rom12_TNSROM1.BIN + 4be12ee31684fc48c9d32f425b82618f hc08rom12_TNSROM2.BIN
Для вариантов с двумя памятью 2716 первая с адреса 0x0000, вторая с адреса 0x1000 (т.е. есть пробел, видимо из-за замысла большей схемы). Код сначала копирует содержимое в ОЗУ, затем ПЗУ отключается от области памяти.
Загрузчик TNS-HC загружает ОС с дискет (дисководы 0, 1) или из сети (быстрая линия - UPP-NET, медленная линия - токовая петля каналов A/B через ASK/QASK). Быстрая линия и канал A используют одно и то же аппаратное обеспечение, поэтому не могут использоваться одновременно; всегда активен только один вариант в соответствии с переключателями.
После сброса загрузчик печатает заголовок и автоматически тестирует диски (0 → 1). Если дискета найдена, она пытается загрузить OSBOOT; в случае успеха он загружает SYS.SYS и передает управление ОС, в случае неудачи система зависает. Если он не найдет дискеты, он предложит вам выбрать источник.
Задача:
xxx спрашивает, откуда загрузиться (A,B,L,X,Y,0-31 + Take)?
Выбор:
- Загрузка с дискеты в дисковод 0; если дискета отсутствует или не является системной (невозможно загрузить OSBOOT или SYS.SYS), загрузка не удалась и потребуется перезагрузка.
- B Загрузка с дискеты в привод 1; поведение ошибки такое же, как и A (несистемная дискета или ошибка чтения → сбой).
- F Попробует загрузиться сначала с диска 0, а если диска нет, то с диска 1; если обнаруживается несистемная дискета, то она зависает так же, как и прямой дозвон.
- L Переключает загрузчик на быструю линию (состояние по умолчанию) и готовит загрузку по сети; после этого варианта необходимо ввести номер узла (0-31), при этом в случае ошибки соединения возникает проблема с линией (кабельной, UPP-NET), когда на удаленной машине не начинается чтение.
- X Переключение на медленную линию, канал А (токовая петля); он использует общее аппаратное обеспечение с быстрой линией, поэтому его выбор означает деактивацию быстрой линии, и необходимо проверить ASK/QASK и физическое соединение в случае ошибки связи.
- Y Переключение на медленную линию, канал В; функционально такой же, как X, но другой канал, подходящий для проблем на A.
- 0-31 Указывает номер удаленного компьютера, с которого будет загружаться система; вводится после выбора строки, и загрузчик попытается установить соединение и загрузить SYS.SYS, при этом сбой соединения указывает на проблему со строкой, а нулевой прогресс чтения — на проблему с исходным компьютером.
Загрузчик всегда сначала проверяет дискеты; этот шаг можно пропустить, удерживая нажатой опцию одновременно с RESET, что сразу же будет использовать нужный ресурс.
При наборе ошибку можно исправить клавишей [<-].
Наличие дискеты не означает, что она пригодна к использованию – решающим фактором является успешная загрузка OSBOOT и SYS.SYS.
Погрузчик TNS (FWLP) - 1.2 JZD Slušovice 1989 г.
Дискета 0
Дискета 1
003 спрашивает, куда ввести (A,B,0-31 + Take)? 2
Линия подключается... ок
чтение операционной системы... ддд
Я передаю управление ОС
Загрузчик TNS HC-08 - Техническая документация
Анализ двоичного образа загрузчика HC-08 v1.2 (MD5: c7e98595cb45e562e8613a67110a50f4),
2 × 2 КБ EPROM (TNSROM1 + TNSROM2), JZD Slušovice 1989.
Адрес Имя Описание ------- ---------------------- ----------------------------------------------------- 0x0000 reset_vec Вектор инициализации в ПЗУ; установить PPI, тестовый бит и решает, загружаться ли из оперативной памяти или переходить напрямую. 0x0124 reset_ram_start Основная инициализация после перемещения кода в ОЗУ. Он проверяет CRC памяти, инициализирует аппаратное обеспечение, отображает баннер. 0x01DF get_boot_option Считывает параметр с клавиатуры (вызов BDOS C=3). 0x01E5 init Инициализация: порты PPI 0x12/0x2B, устройство отображения памяти, очистка экрана, листинг баннеров. 0x025A do_netboot_selected Печатает имя строки и вызывает netboot. 0x0267 boot_from_floppy Загрузите ОС с дискеты (повторите попытку 5 раз). 0x02EE reloc_bootcode_restart Перемещение: скопируйте 0x2400 B из 0x2400 → 0x0100, перезапустите. 0x0302 parse_decimal_str Анализ числа 1–3 цифр из текстового буфера. 0x036C print_dollarstr Установите C=9, перейдите в bootromdoscall. 0x036E bootromdoscall Диспетчер Mini-BDOS (C=1,2,3,9,0Ah). 0x038A kbd_input Блокировка чтения ключа + эхо. 0x039C aux_input Тест неблокирующей клавиатуры. 0x03A5 print_until_dollar Вывести строку в символ '$'. 0x03B1 read_cons_buf Чтение строки из консоли (формат буфера CP/M). 0x04D4 bgd_clear Очистить видеопамять (0xF580-0xFFFF). 0x04E9 putchar Дамп символов; LF/CR/BS/FF, прокрутка. 0x0530 kbdscan Сканировать матрицу клавиатуры (17 столбцов, порты 0x11–0x21). 0x0543 getkey Блокировка чтения ключа + устранение дребезга.
Адрес Имя Описание ------- ---------------------- ----------------------------------------------------- 0x0610 floppy_routine Главный диспетчер FDC: инициализация/чтение/информация с помощью (IX+0). 0x069F fdc_select_and_spinup Выбор устройства (порт 0x14), ожидание раскрутки двигателя. 0x06DE fdc_motor_off Двигатель выключен (порт 0x14 = 1), byte_79B = 0xFF. 0x06FF fdc_check_diskette Проверка наличия дискеты. 0x070E fdc_read_sector Чтение сектора через WD2797. 0x0730 fdc_read_to_buffer Чтение данных из FDC в буфер (инструкция INI, порт 0x1B). 0x0752 fdc_send_cmd_wait Запись команды в WD2797 + ожидание завершения. 0x075B fdc_wait_drq Ожидание DRQ/окончания операции; тайм-аут = сброс 0xD8. 0x0772 fdc_save_track_regs Резервное копирование 4B параметров трека/страницы в unk_797. 0x077F fdc_restore_track_regs Восстановление параметров из unk_797 обратно в 0x66. 0x078C Delay_ms_loop Цикл задержки (итерации E × 0xBB).
= Таблицы порядковых номеров =
unk_92E[64]: таблица RX — следующая ожидаемая последовательность от каждого узла (0–63) Инициализация: 0x80 (неинициализировано = всегда принимать) unk_974[64]: Таблица TX — следующая последовательность при передаче на каждый узел Инициализация: 0x40 (неинициализировано)
Адрес Имя Описание ------- --------------------------------------------------------------- 0x07D1 netboot Основная функция сетевой загрузки. 0x09B4 sio_fast_line_init Инициализировать SIO-A для TNS-NET. 0x09D0 sio_receive_or_ack Диспетчер RX/TX для быстрой линии. 0x09E8 Delay_network_slots Цикл задержки (отсрочка, временные интервалы HL). 0x09F5 sio_poll_and_decode_frame Опрос SIO RX + декодирование кадра, тайм-аут 200. 0x0AD4 sio_transmit_packet Отправить пакет: разрешение передачи, адрес, данные. 0x0B1A sio_random_backoff Случайное отключение при столкновении (через регистр R). 0x0B29 sio_receive_ack_frame Ожидание кадра подтверждения от SIO-A. 0x0B73 sio_send_with_ack Отправка + ожидание подтверждения, повторная попытка при коллизии. 0x0B7F sio_send_frame Отправить весь кадр данных (OUTI побайтно). 0x0BBA sio_decode_incoming Декодировать полученный кадр от SIO-A. 0x08B4 net_transceive Отправка/получение сетевого пакета (2 линии вызова). 0x08D0 net_print_block_counter Выведите на консоль трехзначный счетчик блоков. 0x0901 net_setup_node_params Инициализация адреса и канала с помощью DIP-переключателей. 0x091E net_call_tx_init Косвенный переход через unk_2211 (строка init). 0x0922 net_call_rx_tx Косвенный переход через unk_2213 (линии RX/TX).
= Обзор подпрограмм Slow Line =
Адрес Имя Описание ------- ---------------------------------------------------------------- 0x0D3C Инициализация Serial_init_channel SIO + CTC для медленного канала. 0x0D83 Serial_rx_tx_block Блок приема или передачи (C=0 TX, C≠0 RX). 0x0DDB Serial_send_ctrl_byte Отправить управляющий байт (ACK/NAK) на порт данных SIO. 0x0E5F Serial_tx_fsm Конечный автомат TX (6 состояний, по 1 байту кадра). 0x0EB6 Serial_rx_fsm Конечный автомат RX (7 состояний, обнаружение SOH, данные, CRC). 0x0F48 Serial_check_ack_nak Проверяет, является ли полученный байт ACK (0x06) или NAK (0x15). 0x0F54 Serial_bit_delay Цикл задержки для синхронизации битов. 0x0F61 crc16_compute Вычисление CRC-16 (полусловное исключающее ИЛИ, ввод HL/B/DE). 0x0F8C Serial_setup_tx_buffer Настройка буфера TX/RX (сдвиг указателей на 4 B).
= Конечный автомат TX (unk_22E4) =
Состояние 1 → SOH вышел (0x01) → состояние 2 Состояние 2 → Они выпустили SEQ (unk_22E7) → состояние 3. Состояние 3 → Байты вне буфера (unk_22E0 → 22E2) → состояние 3 (цикл) После пустого буфера → состояние 4 Состояние 4 → ~CRC_LO (дополнение unk_22E5) → выход из состояния 5 Состояние 5 → ~CRC_HI (дополнение unk_22E6) → вышло состояние 6 Состояние 6 → Состояние сброса (конец кадра)
= Конечный автомат RX (unk_22D9) =
Состояние 0 → Ожидание: обнаружение SOH/ACK/NAK Состояние 1 → После команды: ожидание подтверждения → состояние 2 Состояние 2 → Получает SEQ → unk_22DC → состояние 3 Состояние 3 → Принимает длину + устанавливает буфер; если 0 → повторить попытку Состояние 4 → Получает байты данных в unk_22D5 (приращение ptr) Состояние 5 → Конец данных (сигнал внешнего цикла) Состояние 6 → Получение CRC_LO → unk_22DA, CRC_HI → unk_22DB → состояние 0
Длина адреса Имя Описание ------- ------ ------------------ ------------------------------------- 0x2200 14 B стек Стек + рабочая область (параметры IX) 0x220E 2 B floppy_driver_ptr Указатель на функцию драйвера гибких дисков 0x2210 1 B hw_node_address Адрес узла от DIP-переключателей (порт 0x11) 0x2211 2 B net_tx_init_ptr Указатель на функцию инициализации строки 0x2213 2 B net_rx_tx_ptr Указатель на функцию линии RX/TX 0x2215 2 B boot_sel_title Указатель на строку с именем строки 0x2217 1 B net_packet_type Тип пакета/флаг режима 0x2218 1 B net_dest_node Адрес узла назначения для загрузки 0x221B 1 B net_own_node Адрес собственного узла (биты 4:0 из 0x2210) 0x221C 1 B net_channel_num Номер канала (начиная с битов 7:5, повернуто +1) 0x22CC 1 B Serial_ch_select 0=канал A (SIO-A), 1=канал B (SIO-B) 0x22CD 1 B Serial_ctc_port Порт CTC (0x04 или 0x01) 0x22CE 1 B Serial_data_port Порт данных SIO (0x0C или 0x0D) 0x22CF 1 B Serial_status_port Порт состояния SIO (0x0ETNS HC-08
Ссылки
- 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)