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).

Содержание
Этот текст может быть частично переведен средствами машинного перевода.

Было выпущено около 4000 единиц (по данным авторов HC-16).

Подключаемый к сети TNS-NET, HC-08 позволяет загружать систему по сети.

Клавиатура идентична TNS HC-16.

Варианты

Периферия

Загрузочные ПЗУ

Всего сохранилось 3 варианта:

Для вариантов с двумя памятью 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)?

Выбор:

Загрузчик всегда сначала проверяет дискеты; этот шаг можно пропустить, удерживая нажатой опцию одновременно с 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 Блокировка чтения ключа + устранение дребезга.

FDC — Дисковод (WD2797)

Адрес Имя Описание
------- ---------------------- -----------------------------------------------------
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 (неинициализировано)

= Обзор подпрограмм TNS-NET =

Адрес Имя Описание
------- ---------------------------------------------------------------
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–0x22FF)

Длина адреса Имя Описание
------- ------ ------------------ -------------------------------------
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 (0x0E

TNS HC-08

Ссылки