KleinComputer KC 85-4 — модульность из прошлого

в 10:41, , рубрики: KC85/2, KC85/3, KC85/4, Robotron, ретро-компьютеры, старое железо

"О, сколько нам открытий чудных
готовит мир Z80-ых систем."

Процессор Z80 был поистине гениальным, позволившим огромному количеству производителей электроники войти в мир компьютеров со своими вариантами домашних и не только систем. Не стал исключением и немецкий Robotron, выпустивший линейку (а по сути — две независимых) персональных компьютеров KC 85. В неё входили изначальный KC 85/1, получивший продолжение в виде модели KC 87, а также три модели KC85/2...KC 85/4, которые несмотря на название, не были продолжением KC 85/1, а являлись отдельной веткой в развитии и даже производились на другом предприятии — VEB Mikroelektronik Mühlhausen.

Их интересной конструктивной особенностью была заложенная изначально и поддерживаемая модульность конструкции как на уровне аппаратуры, так и программного обеспечения. По сути это означало то, что начав с базовой конфигурации, состоящей из основного блока, клавиатуры и монитора, можно добавлением других блоков и модулей увеличить возможности системы. Но об этом чуть позже. Стоит отметить, что несмотря на 35-летний возраст, у данной системы присутствует довольно внушительная сохранившаяся документация (но, к сожалению, практически вся на немецком).

KleinComputer KC 85-4 — модульность из прошлого - 1

Основные характеристики

KleinComputer KC 85-4 — модульность из прошлого - 2 Все модели построены на базе восточно-германской нелицензированной копии процессора Z80 под названием U880, работающего на частоте 1,75 МГц (в модели KC85/4 частота была незначительно повышена до 1,7735 МГц). Копия по системе команд практически полностью соответствует оригиналу, за исключением некоторых особенностей в выставлении флагов при операции OUTI.

  • Начальная система KC 85/2 включала в себя 16 Кбайт ОЗУ, 16 Кбайт видеопамяти (называемой так же IRM — Image Repetition Memory), 4 Кбайта ПЗУ с базовой системой. При этом ПЗУ содержало базовую ОС (CAOS 2.1), но не содержало даже Бейсик, который предлагалось подгружать дополнительно. Даже набор символов был обрезан до заглавных букв, разумеется, только немецкого алфавита.
  • В последовавшей за ней KC 85/3 была добавлено 8 Кбайтное ПЗУ с Бейсиком, что сделало работу чуть более удобной. Базовая ОС обновлена до версии 3.1, в набор символов добавлены строчные символы.
  • Модель KC 85/4 включала уже 64 Кбайта ОЗУ памяти, 40 Кбайт видеопамяти. Базовая ОС обновлена до версии 4.1.

Разъемы передней панели (указано для модели KC85/3, в последующей модели индикаторы 4 были объединены в один):

KleinComputer KC 85-4 — модульность из прошлого - 3 1 — выключатель питания (фактически — запуск с адреса F000H)
2 — индикатор наличия питания
3 — кнопка перезапуска с сохранением содержимого ОЗУ (запуск компьютера с адреса E000H)
4 — индикаторы работы ПЗУ, ОЗУ и видео-ОЗУ
5 — разъем подключения клавиатуры
6 — разъем подключения магнитофона
7 — индикация сигнала с магнитофона

Разъемы задней панели:

KleinComputer KC 85-4 — модульность из прошлого - 4 10 — слот расширения для подключения других блоков
11 — кабель для подключения ТВ по антенному входу
12 — слот для подключения ТВ через RGB и композитный сигнал
13 — кабель питания

KleinComputer KC 85-4 — модульность из прошлого - 5В качестве графического решения использовался экран разрешением 320х256 точек с 16 цветами для переднего плана и 8 цветами — для заднего. Цвет задавался на блок размером 8х4 пикселя (в модели KC 85/4 — заменен на режим, в котором блок цвета был размером 8х1 пиксель). Данный блок пикселей также можно было сделать мигающим.

Монитор

Устройство отображения стандартно — либо телевизор, либо монитор. Вариантов подключения целых три — антенный выход, композитный и RGB. Качество изображения — от умеренно среднего до очень хорошего. Антенный выход доступен сразу из коробки, остальные варианты требуют использования специального кабеля "TV-RGB — композит" либо "TV-RGB — SCART". В основном использовались черно-белые телевизоры "Роботрон" или "Юность".

К слову, для добавления разъема SCART в телевизоры, в которых таковой разъем отсутствовал изначально, выпускался специальный радиолюбительский комплект. Это существенно поднимало качество изображения, и было особенно полезно при работе, например, в MicroDOS (почему — см.ниже).

Клавиатура

KleinComputer KC 85-4 — модульность из прошлого - 6

В отличие от многих популярных решений клавиатура была внешняя, подключаемая разъемом, аналогичным моно-mini-jack (в модели КС 85/4 заменен на DIN 5). Сама по себе клавиатура, увы, довольно низкого качества с мелкими, иногда заедающими клавишами. Название большинства клавиш понятно без объяснений, кроме, пожалуй, некоторых:

  • BRK (BREAK) — варьируется в зависимости от приложения, в Бейсике вызывает прерывание работающей программы.
  • CLR (CLEAR) — аналог современного BackSpace
  • F1..F6 — вызов предварительно заданных макрокоманд.
    Построена по классическому матричному принципу на базе контроллера U807.

Внешний накопитель

KleinComputer KC 85-4 — модульность из прошлого - 7Для записи и чтения информации в первоначальном варианте предполагалось использовать (как часто бывало) кассетный магнитофон со скоростью обмена от 600 до 2400 бод. Причём специально для этой серии компьютеров был выпущен компактный кассетный рекордер LCR-C DATA, с в общем-то так себе характеристиками (частота звука от 200 Гц до 8 КГц, моно, не применим для воспроизведения аудио). В современном варианте для загрузки программ вполне можно использовать смартфон и его выход под наушники.

С добавлением дополнительных блоков D004 становится доступным накопитель на гибких дисках.
Из несколько экзотичных форматов хранения можно отметить запись программ на пластинках (в формате BASICODE — стандартизированной версии BASIC) и даже на компакт-дисках, когда первая дорожка содержала данные для IBM PC, а остальные треки — аудио для других компьютерных систем (Commodore, Atari и даже ZX Spectrum).

Печатающее устройство

KleinComputer KC 85-4 — модульность из прошлого - 8Для вывода текста на бумагу возможно было использование электронной печатающей машинки Erika S3004 производства Robotron, подключенной к компьютеру посредством специального интерфейса IF 6000 (V24/RS232), либо IF 3000 (параллельный Centronics). Вывод символов — посредством лепесткового печатающего механизма, при этом все возможные знаки (около 100 штук) нанесены на диск и пропечатываются через чернильную ленту. Смена шрифта осуществляется путём замены диска.

Кроме того, подключались термопринтер Robotron K6304, матричные принтеры Robotron K6311, K6312, K6313 and K6314, Prasident K6320/K6325, Soemtron K6319 и даже плоттер Robotron K6418 (в Советский Союз поставлялся под названием СМ6415).

Звук

Два тоновых генератора с выводом на внешний разъем TV-RGB и встроенный динамик. Лучше чем ничего.

Блоки и модули

Как уже было отмечено, конструкция компьютера подразумевала расширяемость за счет блоков и модулей. Каждый блок представлял собой коробку размером примерно 380х250х77 мм, которые предполагалось соединять коннекторами снизу вверх.

Минимальный комплект состоял из блока D001, включающего всю электронную начинку, а также два разъема для подключения двух модулей. В дополнение к нему можно было подключить:

KleinComputer KC 85-4 — модульность из прошлого - 9

блок D002 (т.н. BUSDRIVER), добавляющий к функционалу ещё 4 разъема для подключения модулей. Всего таких блоков можно подключить (в теории) до 14-х штук, но на практике ограничивались двумя.

KleinComputer KC 85-4 — модульность из прошлого - 10блок D004 — по сути состоящий как минимум из двух коробок и содержащих свой собственный процессор U880 с частотой 4 МГц, 64 Кбайта ОЗУ и 8 Кбайт ПЗУ (в одном корпусе) и по одному дисководу гибких дисков в каждом из последующих корпусов. Всего же можно было подключить до 4-х дисководов. Также блок содержал два разъема для подключения модулей расширения и при помощи модулей ОЗУ можно было организовать RAM-диск объемом до 4 Мбайт. Объем дискеты формата 5,25" DD составлял 800 Кбайт.

KleinComputer KC 85-4 — модульность из прошлого - 11

Поскольку изначально идущая в комплекте клавиатура по удобству явно отставала, в качестве замены предлагалась другая — D005. Кнопки на ней были больше, комфортнее, хотя и без ощутимого нажатия. Плюс к этому, некоторые клавиши располагались на других местах, что требовало некоторого привыкания.

KleinComputer KC 85-4 — модульность из прошлого - 12 Для соединения модулей между собой предлагалось использование вот такого коннектора, объединявшего выход OUT нижнего блока со входом IN верхнего.
Кстати, наблюдательные могли отметить отсутствие в списке блока с номером D003. Как гласила рекламная брошюра, это был блок для прошивки и стирания EPROM-микросхем, но в серию он не пошёл.

Как несложно подсчитать, в полном обычном наборе компьютер представлял собой башню из 8 корпусов указанных размеров (базовый D001 + два D002 + контроллер D004 + 4 дисковода)! Впрочем, поскольку сами блоки с дисководами подключались к базовому D004 при помощи уже гибких кабелей, башни можно было составить две.

KleinComputer KC 85-4 — модульность из прошлого - 13

Из наиболее полезных модулей можно отметить следующие:

Модуль Назначение
M001KleinComputer KC 85-4 — модульность из прошлого - 14 Ввод-вывод цифровых сигналов. Два 8-битных порта с управлением через PIO.
M003KleinComputer KC 85-4 — модульность из прошлого - 15 Ввод-вывод сигналов по протоколу V24. Два независимых канала для подключения принтера, иного оборудования или соединения компьютеров между собой.
M006KleinComputer KC 85-4 — модульность из прошлого - 16 ПЗУ с Бейсиком для модели KC85/2
M008KleinComputer KC 85-4 — модульность из прошлого - 17 Подключение джойстика
M010KleinComputer KC 85-4 — модульность из прошлого - 18 Аналогово-цифровой конвертер на 4 канала
M011KleinComputer KC 85-4 — модульность из прошлого - 19 Дополнительное ОЗУ на 64 Кбайта
M022KleinComputer KC 85-4 — модульность из прошлого - 20 Дополнительное ОЗУ на 16 Кбайт
M025KleinComputer KC 85-4 — модульность из прошлого - 21 Пользовательское прошиваемое ПЗУ на 8 Кбайт на четырех микросхемах K573РФ2 советского производства.
M026KleinComputer KC 85-4 — модульность из прошлого - 22 ПЗУ с языком FORTH. По сути представляет собой модуль M025 с уже прошитыми микросхемами.
M027KleinComputer KC 85-4 — модульность из прошлого - 23 Ещё один вариант дополнительного ПЗУ с зашитым ассемблером-дизассемблером
M029KleinComputer KC 85-4 — модульность из прошлого - 24 Цифрово-аналоговый конвертер на два канала по 10 бит.
M036KleinComputer KC 85-4 — модульность из прошлого - 25 Дополнительное ОЗУ на 128 Кбайт

Кроме того, сообществом энтузиастов разработаны несколько дополнительных модулей, расширяющих возможности системы:

Модуль Назначение
M035x4KleinComputer KC 85-4 — модульность из прошлого - 26 Дополнительное ОЗУ на 4 Мбайта на базе SIMM-памяти. Может быть использовано, например, как RAM-диск в блоке D004
M031KleinComputer KC 85-4 — модульность из прошлого - 27 Подключение сканера для оцифровки изображений (черно-белого)
M052KleinComputer KC 85-4 — модульность из прошлого - 28 Настоящий монстр среди модулей! Добавляет в систему поддержку USB-носителей (с возможностью чтения/записи файлов с них) и локальной сети (для передачи файлов по протоколу TFTP).

Память

Поскольку процессор U880D, как и его оригинал Z80 может адресовать максимум 64 Кбайта памяти, для доступа ко всей памяти используется механизм страниц (или ещё называемого "банками"), когда разные куски памяти подключаются к одному и тому же адресу и переключаются по мере необходимости.

В общем виде для KC85/4 схема распределения памяти выглядит следующим образом:

KleinComputer KC 85-4 — модульность из прошлого - 29

Адрес Назначение
0000H-7FFFH 16 Кбайт ОЗУ пользователя, включая стек, системные прерывания
8000H-BFFFH 64 Кбайта видеопамяти (в модели 85/3 — 16 Кбайт), а также 32 Кбайта памяти пользователя, подключаемых странично (в модели 85/3 — отсутствует)
C000H-DFFFH 8 Кбайт ПЗУ с Бейсиком (в модели 85/2 — отсутствует)
E000H-FFFFH 8 Кбайт ПЗУ с CAOS

Также стоит отметить интересную особенность организации видеопамяти.

Начиная с самой первой модели в ряду — KC85/2, экран был цветным, с 16 цветами переднего плана и 8 цветами фона (и дополнительной возможностью мигания пикселями). При этом, подобно ZX Spectrum, цвет задавался не для каждого пикселя, а для блока — 8х4 пикселей. Разрешение при этом было больше, чем у ZX Spectrum примерно в 1,6 раза — 320х256 точек.

Это делило память на 2 области — на так называемую пиксельную (pixel) часть размером 10240 байт и цветовую (color) размером 2560 байт. Все вместе эти части укладывались в 16 КБайт видеопамяти, оставляя ещё место под системные ячейки.

В пиксельной части каждый бит данных отвечал за один пиксель на экране, установка его в 1 окрашивала пиксель в цвет переднего плана, сброс в 0 — в цвет фона. Один байт отвечал за 8 последовательных пикселей, при этом за самый левый из этих пикселей на экране отвечал старший бит, за самый правый пиксель — младший бит.

Далее — пиксельная часть (как и цветовая) делилась на 2 части. Сначала в памяти располагалась левая часть экрана размером 256х256 точек, затем — правая часть экрана размером 64х256. Но даже при этом строки занимали непоследовательное место в памяти, а с шагом в 4 строки. Лучше всего это проиллюстрирует следующая таблица:

    писельная часть                               цветовая часть
    0.............255|256......319                0.............255|256......319
    ------------------------------                ------------------------------
  0|8000.........801F|A000....A007                A800.........A81F|B000....B007
  1|8080.........809F|A080....A087                
  2|8100.........811F|A100....A107                
  3|8180.........819F|A180....A187                
  4|8020.........803F|A020....A027                A820.........A83F|B020.....B027
  5|80A0.........80BF|A0A0....A0A7                
  6|8120.........813F|A120....A127                
  7|81A0.........81BF|A1A0....A1A7                
  8|8040.........805F|A040....A047                A840.........A85F|B040.....B047
  9|80C0.........80DF|A1C0....A1C7                
 10|8140.........815F|A140....A147                
 11|81C0.........81DF|A1C0....A1C7                
 12|8060.........807F|A060....A067                A860.........A87F|B060.....B067
 13|80E0.........80FF|A0E0....A0E7                
 14|8160.........817F|A160....A167                
 15|81E0.........81FF|A1E0....A1E7                
 16|8200.........821F|A008....A00F                A880.........A89F|B008.....B00F
..................................                ...............................
255|9FE0.........9FFF|A7F8....A7FF                AFE0.........AFFF|B1F8.....B1FF

Формат байта цветовой части следующий:

  • биты 1..3 задают один из 8 цветов для фона
  • биты 4..7 задают один из 16 цветов переднего плана
  • бит 8 задает флаг мигания

Мне сложно сказать, почему было выбрано такое решение, но полагаю, что это как-то упрощало схемотехнику видеовывода. Вместе с тем, конфликт доступа к видеопамяти между процессором и видеоадаптером никуда не делся и при интенсивном доступе процессора на экране возникают помехи.

Однако даже этого разработчикам показалось мало и в модели КС85/4 организация видеопамяти поменялась! Во-первых, цветовые атрибуты стали задаваться не на блок 8х4 пикселя, а на блок 8х1 пиксель. Это увеличило цветовую часть видеопамяти в 4 раза — до 10240 байт и она вместе с пиксельной перестала влезать в отведенный для видеопамяти участок в 16 Кбайт. Во-вторых, разработчики сделали второй буфер экрана для двойного буферирования. В итоге это вылилось в 4-х страничную организацию видеопамяти, когда страницы 0 и 2 по 10 Кбайт отвечали за пиксельную часть первого и второго буферов экрана, а 1 и 3 (также по 10 Кбайт) — за цветовую.
Одновременно с этим поменялась и адресация пикселей — вместо горизонтальной (хоть и чересстрочной) адресации она стала вертикальной сверху вниз и слева направо. Адреса 8000...80FF адресовали полосу в 8 пикселей шириной и 256 пикселей высотой, 8100...81FF — следующую полосу и т.д.

В конечном результате программы, написанные для моделей KC85/2 и 3 и использующие прямой доступ к видеопамяти, стали несовместимы с моделью KC85/4 и зачастую существовало несколько версий одного и того же ПО! Хотя адресация пикселей на экране стала более понятной.
KleinComputer KC 85-4 — модульность из прошлого - 30Кроме того, в KC85/4 появился ещё один видеорежим — т.н. HIRES. Несмотря на название, разрешение в нём осталось то же (320х256 точек), но каждый пиксель теперь мог иметь независимый от соседних пикселей цвет из 4-х цветной палитры (черный, белый, голубой и красный). Однако, видимо, разработчики на этот режим забили сразу и он по большому счёту не поддерживался ни в CAOS, ни в Бейсике. Хотя графическое ПО (написанное, правда, уже сторонними разработчиками) в данном режиме работало. Пример такой картинки приведён слева.

Кодовая таблица символов

KleinComputer KC 85-4 — модульность из прошлого - 31Для вывода символов стандартными средствами используется набор символов, включающий цифры, буквы английского алфавита (заглавные и строчные), знаки препинания, умляуты и небольшое количество спецсимволов. Вывод символов с кодами из области 00H-1FH по факту — как это часто бывало на компьютерах той эпохи — осуществляет некоторые действия (перевод курсора, редактирование текста и очистку экрана) и за их визуальное отображение отвечают коды 80H-9FH. Символы с кодами 20Р-7FH дублируются в область A0H-FFH

Операционная система

KleinComputer KC 85-4 — модульность из прошлого - 32После включения управление передаётся ПЗУ с базовым набором команд CAOS (Cassette Aided Operating System), позволяющей включить/отключить разные модули, изменить и просмотреть содержимое памяти, сохранить/прочитать фрагмент памяти на диск и передать управление на определенный адрес.

  • %BASIC — "холодный" запуск Бейсика из ПЗУ с очисткой ОЗУ (начиная с модели KC85/3).
  • %REBASIC — "теплый" запуск Бейсика с сохранением содержимого ОЗУ.
  • %MENU — вывод списка всех доступных команд и загруженных программ
  • %SAVE ssss eeee [aaaa] — сохранение участка памяти c адреса ssss по адрес eeee на ленту с автозапуском с адреса aaaa.
  • %VERIFY — проверка программы на магнитной ленте
  • %LOAD [nnn] [a]- загрузка программы с магнитной ленты со смещением nnn (относительно адреса загрузки) и с отключением автозапуска (если параметр a присутствует)
  • %COLOR [n] [m] — установка цвета символов n и фона m
  • %MODIFY aaaa — просмотр и изменение содержимого памяти начиная с адреса aaaa
  • %DISPLAY ssss eeee — вывод содержимого памяти с адреса ssss по адрес eeee
  • %KEYLIST — вывод списка доступных макросов, висящих на клавишах F1..F6
  • %KEY — изменение макроса

Начиная с CAOS 4.1 добавились также:

  • %WINDOW — задание окна вывода
  • %SYSTEM — вывод текущего состояния системы
  • %V24OUT/V24DUP — инициализация вывода через разъемы V24
  • %CEN — инициализация Centronics-совместимого принтера

Также при подключении блока дисковода D004 и модулей с ПЗУ FORTH и Ассемблера становится доступен ряд команд, рассчитанных на работу с дискетами: FLOAD, FSAVE, DIR, FORTH (запуск Форта), EDAS (запуск ассемблера).

KleinComputer KC 85-4 — модульность из прошлого - 33 Данные на ленту сохраняются блоками по 128 байт, при этом корректность каждого блока проверяется независимо друг от друга, что позволяет в случае ошибки чтения не перечитывать всю программу, а только дефектные блоки. Кроме того, у программы может быть установлен адрес автозапуска, причём он может не совпадать с адресом загрузки.

Конфигурирование модулей и команда %SWITCH

Теоретически, в системе может быть установлено до 60 модулей, используя 14 блоков D002, один базовый блок D001 и один блок дисководов D004. На практике такое не использовалось, поскольку возникали проблемы с прохождением сигналов до далеко расположенных модулей, поэтому ограничивались максимум 2 блоками D002 (всего 10-12 модулей). При этом некоторые модули (в частности — оперативная память в виде страниц) могут располагаться в одних и тех же адресах, и иметь разный приоритет. Для доступа к модулю (странице памяти) с более низким приоритетом требуется сначала отключить перекрывающий его модуль с более высоким приоритетом, располагающийся в тех же адресах памяти.

Для того, чтобы каждым модулем в каждом блоке можно было управлять независимо, используется адресация, включающая в себя два значения.

  • первое значение — это номер блока. За базовым блоком резервировано значение 0H, за блоком D004 — FH. Соответственно, блоки расширения D002 получают номера от 1H до EH (задаются в самом блоке при помощи перемычек), при этом нижний блок должен иметь номер меньше, чем верхний. Блок D004, соответственно, должен быть самым верхним в стопке.
  • второе значение — это номер слота в блоке. Четыре слота в блоке D002 имеют номера 0H, 4H, 8H и CH, два слота в блоке D004 нумеруются 0H и 4H, два слота в блоке D001 — 8H и CH. Таким образом, полные номера модулей получаются: 08H, 0CH, 10H, 14H, 18H, 1CH, 20H, 24, 28H, 2CH и т.д. до F0H, F4H. Кроме того, в базовом блоке номерами 00H, 01H, 02H обозначены ОЗУ, видео-ОЗУ и ПЗУ с Бейсиком соответственно.

С конфигурированием модуля связано понятие байта структуры (Structure Byte) — однобайтного значения, определяющего, как именно интерпретируется управляющий код. Модули, которые по-разному конфигурируются, имеют разный байт структуры, а также верно и обратное. По сути это — тип модуля. Каждый модуль сообщает свой байт структуры при чтении из адреса, отведенного под слот. Например, модули M026 и M027 (дополнительное ПЗУ), по сути одинаковые и управляемые одинаково, имеют один и тот же байт структуры FBH. Программное обеспечение, знающее варианты байта структуры может управлять как существующими, так и ещё неизвестными модулями. Аналогично, разработчики модулей также могут сделать модули уже совместимыми с существующим ПО, установив для них уже известный байт структуры. Кроме того, ПО, требующее, например, определённое количество памяти, может проверять наличие в системе определённых модулей ОЗУ и взаимодействовать с ними.

Для управления модулями на уровне CAOS используется команда SWITCH. При помощи неё можно включать и отключать модули, конфигурировать их (например, задавать параметры расположения в памяти и выбранные страницы).

В качестве аргументов команда принимает полный номер модуля и управляющий код, принимающий в зависимости от модуля (а точнее — от байта структуры) набор значений.

В общем случае структура управляющего байта следующая:

  • бит 1 (младший) — указывает активность модуля (0 — выключен, 1 — включен)
  • бит 2 — указывает защиту от записи (0 — включена, 1 — выключена)
  • биты 3-8 — зависят от модуля и задают дополнительные параметры. Например, для модулей с байтом структуры FBH биты 7 и 8 задают старшие биты адреса размещения страницы в памяти 00 — 0000H, 01 — 4000H, 10 — 8000H, 11 — C000H. Следует однако заметить, что поскольку адреса 0000H — BFFFH уже заняты другими модулями (ОЗУ и видео-ОЗУ) подключить ПЗУ по этим адресам невозможно без отключения ОЗУ (что само по себе требует предварительной работы по перемещению кода программы в другие сегменты памяти).

Например, для модуля 02H (встроенное ПЗУ с Бейсиком):

  • SWITCH 02 00 — отключит модуль
  • SWITCH 02 01 — включит модуль

Для модуля 00H (системное ОЗУ):

  • SWITCH 00 00 — отключит модуль
  • SWITCH 00 01 — включит модуль в режиме только чтения
  • SWITCH 00 03 — включит модуль в режиме чтения/записи (ОЗУ)

Например, для модулей M026 и M027, имеющих байт структуры FBH, управляющий байт может принимать значения:

  • 00H — отключить ПЗУ
  • С1H — подключить ПЗУ по адресу C000H

Для вывода списка установленных в слотах модулей используется команда %MODUL (начиная с CAOS 4.1).

KleinComputer KC 85-4 — модульность из прошлого - 34Например, пусть в системе присутствуют модуль M027 (Ассемблер-дизассемблер) в слоте 08 и модуль M036 (128 Кбайт ОЗУ) в слоте 0C. Команда %MODUL в этом случае сообщит о наличии в системе двух модулей с байтами структуры FBH и 78H и управляющим кодом 00 (оба модуля отключены).

KleinComputer KC 85-4 — модульность из прошлого - 35В системе при этом включено и доступно ПЗУ Бейсика, о чем и сообщает команда %MENU.

KleinComputer KC 85-4 — модульность из прошлого - 36Теперь командой %SWITCH 08 C1 можно включить ПЗУ в слоте 08 и разместить его по адресу C000H. Как теперь показывает команда %MENU, у нас появился ряд дополнительных команд (EDAS, REEDAS, DISASM и т.д.), расположенных в данном ПЗУ.

Выполнив команду %SWITCH 08 00 мы снова отключим модуль с ПЗУ и вернём систему в изначальное состояние.

Теперь немного о расширяемости самой CAOS.

Как можно заметить, при подключении дополнительных модулей, а также при загрузке программ, в меню становятся доступны дополнительные команды (причём даже с параметрами). Достигается это за счет следующей особенности системы. После команд, изменяющих содержимое или конфигурацию памяти, система сканирует доступное ОЗУ на поиск "волшебных" заголовков следующего вида:

  • два байта 7F7FH (т.н. пролог)
  • строка символов ASCII (название команды символами верхнего регистра и цифрами)
  • байт 00 или 01 (эпилог). 00 означает, что необходимо отключить видео-ОЗУ при запуске программы, 01 — что делать этого не нужно.
  • дальнейшее содержимое рассматривается как код, который будет вызван при вводе команды и должен заканчиваться командой RET

Данная структура рассматривается как описание команды (или просто загруженной программы), которую можно выполнить ровно так же, как и системные команды.

Например, добавим в систему команду HELLO, которая при запуске будет выводить фразу 'HELLO, HABR!':

0200                          .ORG   200h   
0200   7F 7F                  DB   7Fh,7Fh   ;Magic Bytes
0202   48 45 4C 4C 4F         DB   "HELLO"   ;название команды
0207   01                     DB   01h   ;отключать видео-ОЗУ не нужно
0208   CD 03 F0               CALL   0xF003h   ;вызов системной подпрограммы
020B   23                     DB   23h   ;подпрограмма OSTR (вывод строки)
020C   48 45 4C 4C 4F 2C 20 48 41 42 52 21 DB   "HELLO, HABR!"   ;строка для вывода
0218   0D 0A                  DB   0dh,0ah   
021A   00                     DB   0h   ;конец строки
021B   C9                     RET  

KleinComputer KC 85-4 — модульность из прошлого - 37 KleinComputer KC 85-4 — модульность из прошлого - 38
Для вывода строки используется вызов системной подпрограммы с параметром 23H (ОSTR). Необходимые параметры задаются при этом прямо в коде — в данном случае, строка для вывода.
Для такой маленькой программы достаточно будет встроенных средств CAOS — команды MODIFY 200, после вызова которой последовательно заносятся шестнадцатеричные коды. Завершается ввод точкой.

Если после этого снова ввести команду %MENU, то список стандартных команд пополнится ещё одной — %HELLO, которая при запуске выводит сообщение HELLO, HABR! и возвращает управление в CAOS.

Программное обеспечение

KleinComputer KC 85-4 — модульность из прошлого - 39Первой неотъемлемой частью ПО (начиная с модели KC85/3) помимо самой CAOS стал, конечно, встроенный интерпретатор Бейсик (HC-BASIC). Он представлял собой несколько измененный вариант стандартного языка, включающий:

  • стандартные операторы CLS, CLEAR, LET, PRINT, INPUT, REM, FOR..NEXT, IF...THEN, DEF (объявление функции), RND (случайное число), RANDOMIZE, PAPER (установка цвета фона), INK (установка цвета переднего плана), COLOR (установка обоих цветов), PSET, PRESET, CIRCLE, LINE, GOSUB, RETURN, ON...GOTO, DATA, READ, RESTORE, TRON, TROFF, STOP, BEEP, DIM, PEEK, POKE, OPEN, CLOSE, PRINT#, LIST#, INPUT#
  • стандартные команды NEW, LIST, AUTO, RENUMBER (перенумерация строк), DELETE (удаление строк)
  • дополнительно команды CLOAD, CSAVE (чтение/запись текста на ленту), BLOAD (чтение бинарных данных с ленты), PTEST (определение цвета пикселя), WINDOW (задание окна вывода), SOUND (генерация тона), VPEEK, VPOKE (доступ к памяти видео-ОЗУ), DEEK, DOKE (аналог PEEK/POKE но для двухбайтных слов), CALL, USR, SWITCH
  • набор операторов для работы со строками (ASC, CHR, LEFT, MID, RIGHT и другие) и числами (COS, SIN, LN, EXP)
    При подключении дисковой системы для запуска на процессоре блока D004 применялась дисковая версия HC-BASIC, кроме того, доступны были ещё две версии Бейсика — BASI (BASic Interpreter) — интерпретирующая версия Бейсика и BASC (BASic Compiler) — компилирующая версия, с примерно схожим синтаксисом.

Для системы с диском производителем была разработала адаптированная версия системы Паскаль (Pascal 880/S), однако сделана она, видимо, была как-то второпях (дорабатывалась уже силами других предприятий) и не до конца оформлена (документация присутствовала только в форме файлов).

KleinComputer KC 85-4 — модульность из прошлого - 40В более качественном виде язык Паскаль был представлен в KC-PASCAL, работавшем как в дисковой версии, так и в кассетных версиях для систем K85/2..85/4. Эта версия реализовывала компилятор языка Паскаль в среде, похожей на среду Бейсика. Более того, для ввода текста программы использовалась такая же нумерация строк, как в Бейсике!
Поддерживались простые (Integer, Real, Char, Boolean), массивы и указатели. Присутствовал набор встроенных процедур для ввода-вывода и операций с памятью и даже ключи компиляции. Такой вот "Паскаль на минималках".

Помимо этого существовал также компилятор языка C (HITEC-C), производителем выпускался модуль с ПЗУ Форт и компилятор языка ассемблер для операционной системы MicroDOS.

Дополнительный софт включает:

  • редактор текстов TPKC (TextProcessor KleinComputer). Или даже более лучший вариант — WordPro
  • электронные таблицы KALK
  • графический редактор UniPic

MicroDOS

KleinComputer KC 85-4 — модульность из прошлого - 41При подключении блока D004 становилась возможным работа с дисковой операционной системой MicroDOS (вроде как CP/M 2.2 — совместимой, но не на 100%), загружаемой с дискеты. При этом возможна также мультипроцессорная работа — основной блок при этом работает под управлением CAOS, а блок D004 — под управлением MicroDOS.

Несколько моментов работы в данной ОС:

  • вывод на экран происходит в режиме 24 строки по 80 символов в строке — насколько возможно, приближенно к режиму IBM PC. Размер знакоместа — 4 на 10 точек, из-за чего некоторые символы могут быть трудноразличимы, особенно на плохом мониторе. 7 пикселей вверху экрана и 9 — внизу — не используются. К слову, именно из-за похожести формата вывода на экран в документации этот режим называется "PC-режимом".
  • система написана исключительно под набор команд i8080, без использования специфических для Z80 инструкций (видимо, адаптировались исходники с другой системы).
  • сама MicroDOS и программы для неё запускаются на процессоре, находящемся в блоке D004 и используют память, расположенную в нём. При этом доступным становится около 50 Кбайт т.н. ТРА-памяти (Transient Program Area).
  • Также в памяти D004 располагаются CCP (command interpreter) — командный интерпретатор, BDOS (basic system for disk management) — базовая система для управления дисками, BIOS (basic system for input/output control) — базовая система для ввода/вывода и с адреса FC00H — специальная область памяти (Coupling RAM), предназначенная для обмена данными между базовым блоком и D004. Хотя части системы — CCP, BDOS и BIOS оформлены вроде как отдельными модулями (чтобы теоретически менять их по отдельности), взаимодействие между ними настолько сложное, что обновлять по факту можно только всё вместе.
  • Поддержка внешних устройств происходит за счёт драйверов, располагающихся в памяти базового блока. Взаимодействие с ними производится через ту же Coupling RAM, что, конечно, несколько снижает производительность операций ввода-вывода.
  • Часть памяти, находящаяся в базовом блоке (по адресам видео-ОЗУ), а также память из дополнительных модулей подключается как RAM-диск (A:).
  • Системный диск, с которого система была загружена подключается как диск B:
  • При помощи специального драйвера (DEP — Diskette extension program) появляется возможность читать/записывать дискету в том числе в классических приложениях типа Бейсика.

А как же игры!?

А вот тут мы переходим к самой трагичной части нашей статьи. Игр под эту систему мало и они, скажем так — слабенького качества. Подавляющая их часть написана в расчёте на кассетную загрузку а значительная часть — вообще на среду Бейсик. При этом почти все они выглядят, увы, как поделки студентов на досуге. Низкое качество изображений, отсутствие разнообразия в сюжетах (по большей части это либо копии Boulder Dash, либо простенькие лабиринты на один экран) и в 99% случаев — только немецкий язык в интерфейсе.

Несмотря на то, что по графическим возможностям KC85/3 (и уж тем более — KC85/4) превосходит тот же ZX Spectum, ряд фатальных недостатков ограничил разработку игрового ПО:

  • процессор. Частота в 1,75 МГц — в 2 раза ниже, чем на том же ZX. При том, что даже на частоте 3,5 МГц Z80 — не самый шустрый экземпляр, заниженная в угоду простоты конструкции частота сделала его ещё медленнее. Низкая скорость доступа к видеопамяти, помноженная на встроенный интерпретирующий Бейсик делает вывод чего бы то ни было на экран не просто медленным, а оооочень медленным. Ни о какой динамической игре в таких условиях не идёт и речи.
  • достаточно высокая цена. Несмотря на то, что ценник через некоторое время после выпуска был значительно снижен, для большинства энтузиастов он оставался неприлично высоким. А уж в комплекте с дисковым модулем — тем более.
  • клавиатура. Низкое качество клавиш делает клавиатуру слабо предназначенной для игр.
  • региональность. Компьютер производился и продавался только на территории ГДР. 99% всех пользователей — немецкоговорящие, почти 100% всей документации — только на немецком. Это жёстко ограничивало количество потенциальных разработчиков. Это сейчас можно закинуть уже распознанный текст в Гугл-переводчик и получить более-менее вменяемую инструкцию, а вот тогда...

В целом, об играх для КС85 можно судить по следующим скриншотам (взято с сайта https://www.iee.et.tu-dresden.de/~kc-club/):

KleinComputer KC 85-4 — модульность из прошлого - 42 KleinComputer KC 85-4 — модульность из прошлого - 43
KleinComputer KC 85-4 — модульность из прошлого - 44 KleinComputer KC 85-4 — модульность из прошлого - 45
KleinComputer KC 85-4 — модульность из прошлого - 46 KleinComputer KC 85-4 — модульность из прошлого - 47
KleinComputer KC 85-4 — модульность из прошлого - 48 KleinComputer KC 85-4 — модульность из прошлого - 49
KleinComputer KC 85-4 — модульность из прошлого - 50 KleinComputer KC 85-4 — модульность из прошлого - 51
KleinComputer KC 85-4 — модульность из прошлого - 52 KleinComputer KC 85-4 — модульность из прошлого - 53

KleinComputer KC 85-4 — модульность из прошлого - 54Наиболее качественной и более-менее играбельной мне показалась только одна — DIGGER, которая несмотря на название, является адаптацией Boulder Dash (маленький землекоп прогрызает ходы и собирает алмазы, стараясь не попасть под камень и избегая местных жителей). Есть хотя бы на что посмотреть и над чем подумать. В остальном же всё очень и очень грустно. Для сравнения, другому региональныму советскому компьютеру (БК-0010/01) удалось за счёт снижения цены (пусть и в ущерб характеристикам) получить гораздо большую аудиторию, что разительно и в лучшую сторону сказалось на качестве и количестве игр для него.

Эмуляция

KleinComputer KC 85-4 — модульность из прошлого - 55А вот с этим всё обстоит более-менее хорошо. Есть два основных эмулятора, относительно неплохо работающих в Windows 10:

  • KCEmu 0.5.1 — поддерживает эмуляцию KC85/1..KC85/5, а также некоторых других систем, блок D004 и ряд модулей (в основном — ОЗУ и ПЗУ). Дополнительно эмулируется загрузка с магнитофона и дискет. Имеет английский (что удивительно) интерфейс и систему профилей для настройки различных эмулируемых систем. Из недостатков — несколько заторможенная реакция на клавиатуру, что делает игры в нём несколько неотзывчивыми.
  • JKCEmu — мультиплатформенный эмулятор, написанный на Java и также эмулирующий несколько машин и конфигураций, включая модули памяти и ПЗУ, но, к сожалению, имеющий только немецкий интерфейс.
  • также по адресу http://floooh.github.io/virtualkc/ доступен онлайн-эмулятор с гораздо более бедным функционалом, но позволяющий в общих чертах ознакомиться с системой. В нём есть выбор модели, а также комплект из некоторых игр.

Внутреннее устройство

KleinComputer KC 85-4 — модульность из прошлого - 56

Конструктивно основной модуль состоит из двух соединенных между собой плат — основной и платы подключения модулей, включающей также генератор видеосигналов (на фото не показана, подключается сверху тремя шлейфами). На основной можно заметить сам микропроцессор U880 (слева вверху), три микросхемы ПЗУ под CHAOS и Бейсик (справа вверху) и 8 микросхем U6164 (по 8 Кбайт) основного ОЗУ (справа). Слева в третьей и четвертой строке, рядом с зелеными конденсаторами находятся микросхемы ОЗУ видеопамяти.

Для мелкой логики применяются в том числе и советские 555ЛА3 и 555КП5.

Внутренности D004:

KleinComputer KC 85-4 — модульность из прошлого - 57

Также две платы (основная и подключения модулей).

Заключение

Представляя из себя довольно интересный вариант реализации модульной архитектуры, компьютеры серии КС85/2… КС85/4 содержали ряд недостатков — в основном, низкую базовую производительность и одноязычную направленность — что сделало их распространение ограниченным одной страной и не позволило получить широкую известность.

Ссылки и руководства

За предоставленные фото и руководства автор выражает благодарность:

  • сайту http://www.mpm-kc85.de/ — большое количество материалов по блоками и модулям компьютера, чьи фотографии были использованы в статье.
  • сайту https://www.iee.et.tu-dresden.de/~kc-club — за информацию о CAOS и дисковых операционных системах вообще и за коллекцию ПО в частности
  • сайту http://susowa.homeftp.net/ — за большую коллекцию ПО
  • Виктору Куприянову и его Кибер-музею (г.Муром) за предоставленный экземпляр компьютера KC85/3.

Автор: vicsoftware

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js