Юниор ФВ-6506/Техническая информация
| Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0. |
Материал собран при написании эмулятора Юниора для eCat3 (2026). Всё, что здесь написано, снято с ПЗУ монитора, с сохранившихся образов лент и с поведения самой системы TCP/M; там, где что-то принято на веру или выведено косвенно, это сказано прямо.
Схема Юниора сохранилась, и это сильно отличает его от Арго — родственной машины, про которую почти всё приходилось выводить из поведения.
Коротко о машине
Киевская разработка 1989–1991 годов, выпускалась заводом управляющих вычислительных машин, затем объединением «Электроприбор». Формально — развитие Радио 86РК, но от прототипа осталась только идея:
- КР580ВМ80А на 2.2 МГц;
- 128 Кбайт ОЗУ, плюс расширение блоками по 64 Кбайт (в полной комплектации семь блоков, 512 Кбайт);
- экран 80×25 с цветом на КР580ВГ75, знакоместо 6×10;
- второй знакогенератор и графический режим 80×64 знакоместа по 6×4 точки (240×128 псевдопикселей), переключается разрядом 3 порта C;
- строчные буквы;
- звук на КР580ВИ53;
- клавиатура на 88 клавиш, матрица 11×8 через дешифратор К555ИД3;
- всё периферийное вынесено в пространство портов.
Штатная система — TCP/M-80М: CP/M, у которой вместо дисковода магнитофон.
Лента как накопитель
Это главная особенность машины и главное, что стоило разобрать.
Лента у Юниора не звуковая дорожка, а накопитель. ОС обращается с кассетой как с диском, а лентопротяжку («Маяк-231» и более поздние) компьютер перематывает сам по разъёму дистанционного управления. Обмен идёт байтами через КР580ВВ51 в синхронном режиме: модуляция аппаратная, а не программная, как у РК-86.
Скорость — 2400 бод, то есть 300 байт в секунду. Сектор в 2 Кбайта проходит головку около семи секунд, и загрузка системы занимает минуты.
Как лента размечена
Кассета размечена парами «маркер — блок»:
[32 байта маркера][~48 мс][2057 байт данных][~2.9 с][следующий маркер]...
В маркере, кроме синхросимвола и контрольной суммы, лежат номер блока (16 разрядов, младший байт вперёд) и метка кассеты.
Ни скорость воспроизведения, ни скорость перемотки конкретного магнитофона машине не известны, и знать их не нужно: где головка, написано на самой ленте. Поиск блока — это чтение маркеров подряд со сравнением номера. Загрузчик так и делает: сравнение по адресу +4 в буфере маркера, «меньше» — проскочили, «не равно» — читаем следующий.
Метка кассеты отвечает на второй вопрос — та ли это лента. Если системе нужен другой том, она печатает «Установите любую кассету, но не CII. A» и ждёт пробела.
Что делает лентопротяжка, видно в верхней строке экрана: драйвер пишет туда
>>, << или WR.
Перемотка
Перемотка — только способ сэкономить время, и она не обязана быть точной:
- если нужный блок ближе трёх блоков вперёд, драйвер не мотает вообще, а дочитывает ленту воспроизведением;
- иначе он считает время перемотки по модели «время от начала ленты до блока N» и мотает разность двух таких времён. Модель нелинейная — скорость перемотки зависит от намотанного радиуса, — а набор её констант выбирается параметром: тип кассеты для системы настройка, а не открытие;
- назад драйвер целится на блок раньше нужного и дочитывает вперёд;
- после перемотки идёт пуск, и где машина оказалась на самом деле, ей снова сообщает маркер.
Ошибка модели съедается на этом последнем шаге. Для эмулятора это означает, что скорость перемотки можно задавать любую: система всё равно найдёт себя по маркеру.
Отсюда и заметная пауза после каждого блока данных — около секунды ленты, запас на торможение и разгон лентопротяжки. Перед маркером пауза больше (≈1.1 с), перед блоком данных меньше (≈0.7 с).
Формат .bt
Контейнер образов лент Юниора и Арго. Заголовок файла в четыре байта, дальше для каждой записи три слова и сами данные.
Первые два слова — это не пауза, а время: когда запись начинается и сколько длится. Единица такова, что на байт приходится 3.3–3.6, то есть миллисекунда при скорости около 2400 бод. Отношение длительности к длине одно и то же у всех записей всех имеющихся лент, и Юниора, и Арго.
Настоящая пауза — это начало записи минус конец предыдущей. Это не придирка: прочитанное как пауза второе слово даёт перед маркером 111 мс вместо 1100, и драйвер ленточного тома перестаёт находить блоки — именно на этом и встал Арго, пока формат читали неверно.
Третье слово — длина записи, причём она считает преамбулу.
Образ из одного заголовка — это чистая кассета: записей нет, а лента есть. Длину такой ленты из файла взять неоткуда; разумное значение — полчаса, сторона С-60.
Диски TCP/M
Дисков у системы три, и лента из них — только два:
A:— квазидиск в дополнительной памяти (блок 1). Загрузчик с кассеты раскладывает систему туда и оттуда её запускает, так чтоDIRбез буквы показывает квазидиск, а не кассету;B:— заряженная кассета: к букве привязан сам образ, и его метка видна в верхней строке экрана (B: = CII. A);C:— второй кассетный том на том же магнитофоне.
Каталог кассеты система держит в памяти, поэтому DIR B: отвечает сразу —
лента пойдёт только за самим файлом.
Под TCP/M запись доходит до ленты не сразу: система держит сектор в памяти и выносит его на кассету, когда он ей больше не нужен — на перезапуске ОС или при обращении к другому сектору. Тогда лентопротяжка ищет место по маркерам и переписывает блок, а следом, отдельной операцией, каталог.
Запись на кассету
Штатный COPY пишет ленту не как остальная система: лентопротяжку он
не трогает вовсе, а просто выкладывает блоки точкой входа монитора $F80C.
Запись включает человек — кнопкой на магнитофоне.
COPY CT:=A:CPM55 кассета пишется с нуля COPY A:=CT:CPM55 файл читается обратно
Получается настоящая кассета: заголовок с именем файла и числом записей, дальше пары «маркер — блок» с паузами.
А вот разметить кассету под сектора TCP/M с клавиатуры не удалось. Процедура в
драйвере это умеет (два сектора оглавления), но система находит место на ленте
только по маркерам, ПЗУ ждёт синхросимвол без таймаута ($FBB3), и любой
путь к записи на незнакомую кассету начинается с чтения. Кассета без маркеров поэтому
уводит машину в ожидание до конца ленты.
Звук
Канал 2 КР580ВИ53 стробируется разрядом 4 порта C, а тактируется строчной частотой ВГ75 — 14675 Гц при текстовом растре.
Высоту тона это задаёт целиком, и она следует за развёрткой: перепрограммировал экран — поехал тон. Для эмулятора это значит, что таймер нельзя тактировать системной частотой, иначе весь звук машины уйдёт мимо.
Цвет
Палитра снимается из ПЗУ К555РТ4. В сохранившемся дампе есть только первая страница; вторая (разряд 6 порта C) неизвестна.
Атрибут поля ВГ75 действует до конца экрана, а не до конца строки. На Юниоре это видно прямо: в экранном буфере всего два атрибута, оба в нулевой строке — красный для строки состояния и ещё один ближе к её концу, от которого весь остальной экран зелёный.
Команды монитора
Одиннадцать команд, латинские буквы от C до M. Диспетчер и таблица переходов лежат
по $FD51: у каждой команды там свой адрес и число аргументов.
C начало,конец |
контрольная сумма блока (простая сумма байт) |
D начало,конец |
дамп памяти |
E начало,конец |
запись блока на ленту, лентопротяжку включает сама |
F байт,начало,конец |
заполнение памяти |
G адрес |
просмотр и правка памяти |
H |
просмотр и правка регистров: D, B, H, A, S, P |
I |
ввод с магнитофона и запуск прочитанного |
J адрес |
побайтный просмотр с правкой |
K, M |
пересылка между основной и дополнительной памятью: канал 0 ПДП адресует основную память, канал 1 — блок, направление задаёт триггер $50
|
L |
загрузка 16 Кбайт из блока расширения 7 по адресу 0040 и запуск |
Те же команды доступны с дополнительного блока клавиш: К1–К5 дают A–E, а ПОМ, УСТ и ИСП — G, H и I.
Клавиатура
Таблица кодов ПЗУ лежит по $F9E0. Соответствие клавиш проверено прогоном
всех 88.
Модификаторы лежат в самой матрице, и их состояние ведёт ПЗУ, а не схема; оно же показано в верхней строке экрана справа. НР и УПР защёлкиваются до следующей клавиши, АЛФ (РУС/ЛАТ), ГРАФ и ФИКС переключают разряды признака в ПЗУ.
Две клавиши не определены однозначно: стрелки ← и ↑ различаются только кодами 14 и 15, а ПЗУ их не обрабатывает.
Что осталось невыясненным
- разметка кассеты средствами самой ОС;
- вторая страница палитры.
Источники
- Статья в Википедии;
- Схема, дампы ПЗУ, образы лент и фотографии — каталог Алексея Морозова. В образе
jn.a.btпервая запись повреждена, с него система не грузится.