"О, сколько нам открытий чудных
готовит мир Z80-ых систем."
Процессор Z80 был поистине гениальным, позволившим огромному количеству производителей электроники войти в мир компьютеров со своими вариантами домашних и не только систем. Не стал исключением и немецкий Robotron, выпустивший линейку (а по сути — две независимых) персональных компьютеров KC 85. В неё входили изначальный KC 85/1, получивший продолжение в виде модели KC 87, а также три модели KC85/2...KC 85/4, которые несмотря на название, не были продолжением KC 85/1, а являлись отдельной веткой в развитии и даже производились на другом предприятии — VEB Mikroelektronik Muhlhausen.
Их интересной конструктивной особенностью была заложенная изначально и поддерживаемая модульность конструкции как на уровне аппаратуры, так и программного обеспечения. По сути это означало то, что начав с базовой конфигурации, состоящей из основного блока, клавиатуры и монитора, можно добавлением других блоков и модулей увеличить возможности системы. Но об этом чуть позже. Стоит отметить, что несмотря на 35-летний возраст, у данной системы присутствует довольно внушительная сохранившаяся документация (но, к сожалению, практически вся на немецком).
Основные характеристики
Все модели построены на базе восточно-германской нелицензированной копии процессора 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 были объединены в один):
1 — выключатель питания (фактически — запуск с адреса F000H)
2 — индикатор наличия питания
3 — кнопка перезапуска с сохранением содержимого ОЗУ (запуск компьютера с адреса E000H)
4 — индикаторы работы ПЗУ, ОЗУ и видео-ОЗУ
5 — разъем подключения клавиатуры
6 — разъем подключения магнитофона
7 — индикация сигнала с магнитофона
Разъемы задней панели:
10 — слот расширения для подключения других блоков
11 — кабель для подключения ТВ по антенному входу
12 — слот для подключения ТВ через RGB и композитный сигнал
13 — кабель питания
В качестве графического решения использовался экран разрешением 320х256 точек с 16 цветами для переднего плана и 8 цветами — для заднего. Цвет задавался на блок размером 8х4 пикселя (в модели KC 85/4 — заменен на режим, в котором блок цвета был размером 8х1 пиксель). Данный блок пикселей также можно было сделать мигающим.
Монитор
Устройство отображения стандартно — либо телевизор, либо монитор. Вариантов подключения целых три — антенный выход, композитный и RGB. Качество изображения — от умеренно среднего до очень хорошего. Антенный выход доступен сразу из коробки, остальные варианты требуют использования специального кабеля "TV-RGB — композит" либо "TV-RGB — SCART". В основном использовались черно-белые телевизоры "Роботрон" или "Юность".
К слову, для добавления разъема SCART в телевизоры, в которых таковой разъем отсутствовал изначально, выпускался специальный радиолюбительский комплект. Это существенно поднимало качество изображения, и было особенно полезно при работе, например, в MicroDOS (почему — см.ниже).
Клавиатура
В отличие от многих популярных решений клавиатура была внешняя, подключаемая разъемом, аналогичным моно-mini-jack (в модели КС 85/4 заменен на DIN 5). Сама по себе клавиатура, увы, довольно низкого качества с мелкими, иногда заедающими клавишами. Название большинства клавиш понятно без объяснений, кроме, пожалуй, некоторых:
- BRK (BREAK) — варьируется в зависимости от приложения, в Бейсике вызывает прерывание работающей программы.
- CLR (CLEAR) — аналог современного BackSpace
- F1..F6 — вызов предварительно заданных макрокоманд.
Построена по классическому матричному принципу на базе контроллера U807.
Внешний накопитель
Для записи и чтения информации в первоначальном варианте предполагалось использовать (как часто бывало) кассетный магнитофон со скоростью обмена от 600 до 2400 бод. Причём специально для этой серии компьютеров был выпущен компактный кассетный рекордер LCR-C DATA, с в общем-то так себе характеристиками (частота звука от 200 Гц до 8 КГц, моно, не применим для воспроизведения аудио). В современном варианте для загрузки программ вполне можно использовать смартфон и его выход под наушники.
С добавлением дополнительных блоков D004 становится доступным накопитель на гибких дисках.
Из несколько экзотичных форматов хранения можно отметить запись программ на пластинках (в формате BASICODE — стандартизированной версии BASIC) и даже на компакт-дисках, когда первая дорожка содержала данные для IBM PC, а остальные треки — аудио для других компьютерных систем (Commodore, Atari и даже ZX Spectrum).
Печатающее устройство
Для вывода текста на бумагу возможно было использовать электронную печатающую машинку 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, включающего всю электронную начинку, а также два разъема для подключения двух модулей. В дополнение к нему можно было подключить:
Блок D002 (т.н. BUSDRIVER), добавляющий к функционалу ещё 4 разъема для подключения модулей. Всего таких блоков можно подключить (в теории) до 14-х штук, но на практике ограничивались двумя.
блок D004 — по сути состоящий как минимум из двух коробок и содержащих свой собственный процессор U880 с частотой 4 МГц, 64 Кбайта ОЗУ и 8 Кбайт ПЗУ (в одном корпусе) и по одному дисководу гибких дисков в каждом из последующих корпусов. Всего же можно было подключить до 4-х дисководов. Также блок содержал два разъема для подключения модулей расширения и при помощи модулей ОЗУ можно было организовать RAM-диск объемом до 4 Мбайт. Объем дискеты формата 5,25" DD составлял 800 Кбайт.
Поскольку изначально идущая в комплекте клавиатура по удобству явно отставала, в качестве замены предлагалась другая — D005. Кнопки на ней были больше, комфортнее, хотя и без ощутимого нажатия. Плюс к этому, некоторые клавиши располагались на других местах, что требовало некоторого привыкания.
Для соединения модулей между собой предлагалось использование вот такого коннектора, объединявшего выход OUT нижнего блока со входом IN верхнего.
Кстати, наблюдательные могли отметить отсутствие в списке блока с номером D003. Как гласила рекламная брошюра, это был блок для прошивки и стирания EPROM-микросхем, но в серию он не пошёл.
Как несложно подсчитать, в полном обычном наборе компьютер представлял собой башню из 8 корпусов указанных размеров (базовый D001 + два D002 + контроллер D004 + 4 дисковода)! Впрочем, поскольку сами блоки с дисководами подключались к базовому D004 при помощи уже гибких кабелей, башни можно было составить две.
Из наиболее полезных модулей можно отметить следующие:
Модуль | Назначение |
---|---|
M001 | Ввод-вывод цифровых сигналов. Два 8-битных порта с управлением через PIO. |
M003 | Ввод-вывод сигналов по протоколу V24. Два независимых канала для подключения принтера, иного оборудования или соединения компьютеров между собой. |
M006 | ПЗУ с Бейсиком для модели KC85/2 |
M008 | Подключение джойстика |
M010 | Аналогово-цифровой конвертер на 4 канала |
M011 | Дополнительное ОЗУ на 64 Кбайта |
M022 | Дополнительное ОЗУ на 16 Кбайт |
M025 | Пользовательское прошиваемое ПЗУ на 8 Кбайт на четырех микросхемах K573РФ2 советского производства. |
M026 | ПЗУ с языком FORTH. По сути представляет собой модуль M025 с уже прошитыми микросхемами. |
M027 | Ещё один вариант дополнительного ПЗУ с зашитым ассемблером-дизассемблером |
M029 | Цифрово-аналоговый конвертер на два канала по 10 бит. |
M036 | Дополнительное ОЗУ на 128 Кбайт |
Кроме того, сообществом энтузиастов разработаны несколько дополнительных модулей, расширяющих возможности системы:
Модуль | Назначение |
---|---|
M035x4 | Дополнительное ОЗУ на 4 Мбайта на базе SIMM-памяти. Может быть использовано, например, как RAM-диск в блоке D004 |
M031 | Подключение сканера для оцифровки изображений (черно-белого) |
M052 | Настоящий монстр среди модулей! Добавляет в систему поддержку USB-носителей (с возможностью чтения/записи файлов с них) и локальной сети (для передачи файлов по протоколу TFTP). |
Память
Поскольку процессор U880D, как и его оригинал Z80 может адресовать максимум 64 Кбайта памяти, для доступа ко всей памяти используется механизм страниц (или ещё называемых "банками"), когда разные куски памяти подключаются к одному и тому же адресу и переключаются по мере необходимости.
В общем виде для KC85/4 схема распределения памяти выглядит следующим образом:
Адрес | Назначение |
---|---|
0000H-7FFFH | 32 Кбайт ОЗУ пользователя, включая стек, системные прерывания (в моделях 85/2 и 85/3 область 4000H-7FFFH отсутствовала) |
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 и зачастую существовало несколько версий одного и того же ПО! Хотя адресация пикселей на экране стала более понятной.
Кроме того, в KC85/4 появился ещё один видеорежим — т.н. HIRES. Несмотря на название, разрешение в нём осталось то же (320х256 точек), но каждый пиксель теперь мог иметь независимый от соседних пикселей цвет из 4-х цветной палитры (черный, белый, голубой и красный). Однако, видимо, разработчики на этот режим забили сразу и он по большому счёту не поддерживался ни в CAOS, ни в Бейсике. Хотя графическое ПО (написанное, правда, уже сторонними разработчиками) в данном режиме работало. Пример такой картинки приведён слева.
Кодовая таблица символов
Для вывода символов стандартными средствами используется набор символов, включающий цифры, буквы английского алфавита (заглавные и строчные), знаки препинания, умляуты и небольшое количество спецсимволов. Вывод символов с кодами из области 00H-1FH по факту — как это часто бывало на компьютерах той эпохи — осуществляет некоторые действия (перевод курсора, редактирование текста и очистку экрана) и за их визуальное отображение отвечают коды 80H-9FH. Символы с кодами 20Р-7FH дублируются в область A0H-FFH
Операционная система
После включения управление передаётся ПЗУ с базовым набором команд 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 (запуск ассемблера).
Данные на ленту сохраняются блоками по 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).
Например, пусть в системе присутствуют модуль M027 (Ассемблер-дизассемблер) в слоте 08 и модуль M036 (128 Кбайт ОЗУ) в слоте 0C. Команда %MODUL в этом случае сообщит о наличии в системе двух модулей с байтами структуры FBH и 78H и управляющим кодом 00 (оба модуля отключены).
В системе при этом включено и доступно ПЗУ Бейсика, о чем и сообщает команда %MENU.
Теперь командой %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
Для вывода строки используется вызов системной подпрограммы с параметром 23H (ОSTR). Необходимые параметры задаются при этом прямо в коде — в данном случае, строка для вывода.
Для такой маленькой программы достаточно будет встроенных средств CAOS — команды MODIFY 200, после вызова которой последовательно заносятся шестнадцатеричные коды. Завершается ввод точкой.
Если после этого снова ввести команду %MENU, то список стандартных команд пополнится ещё одной — %HELLO, которая при запуске выводит сообщение HELLO, HABR! и возвращает управление в CAOS.
Программное обеспечение
Первой неотъемлемой частью ПО (начиная с модели 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), однако сделана она, видимо, была как-то второпях (дорабатывалась уже силами других предприятий) и не до конца оформлена (документация присутствовала только в форме файлов).
В более качественном виде язык Паскаль был представлен в KC-PASCAL, работавшем как в дисковой версии, так и в кассетных версиях для систем K85/2..85/4. Эта версия реализовывала компилятор языка Паскаль в среде, похожей на среду Бейсика. Более того, для ввода текста программы использовалась такая же нумерация строк, как в Бейсике!
Поддерживались простые (Integer, Real, Char, Boolean), массивы и указатели. Присутствовал набор встроенных процедур для ввода-вывода и операций с памятью и даже ключи компиляции. Такой вот "Паскаль на минималках".
Помимо этого существовал также компилятор языка C (HITEC-C), производителем выпускался модуль с ПЗУ Форт и компилятор языка ассемблер для операционной системы MicroDOS.
Дополнительный софт включает:
- редактор текстов TPKC (TextProcessor KleinComputer). Или даже более лучший вариант — WordPro
- электронные таблицы KALK
- графический редактор UniPic
MicroDOS
При подключении блока 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/):
Наиболее качественной и более-менее играбельной мне показалась только одна — DIGGER, которая несмотря на название, является адаптацией Boulder Dash (маленький землекоп прогрызает ходы и собирает алмазы, стараясь не попасть под камень и избегая местных жителей). Есть хотя бы на что посмотреть и над чем подумать. В остальном же всё очень и очень грустно. Для сравнения, другому региональныму советскому компьютеру (БК-0010/01) удалось за счёт снижения цены (пусть и в ущерб характеристикам) получить гораздо большую аудиторию, что разительно и в лучшую сторону сказалось на качестве и количестве игр для него.
Эмуляция
А вот с этим всё обстоит более-менее хорошо. Есть два основных эмулятора, относительно неплохо работающих в Windows 10:
- KCEmu 0.5.1 — поддерживает эмуляцию KC85/1..KC85/5, а также некоторых других систем, блок D004 и ряд модулей (в основном — ОЗУ и ПЗУ). Дополнительно эмулируется загрузка с магнитофона и дискет. Имеет английский (что удивительно) интерфейс и систему профилей для настройки различных эмулируемых систем. Из недостатков — несколько заторможенная реакция на клавиатуру, что делает игры в нём несколько неотзывчивыми.
- JKCEmu — мультиплатформенный эмулятор, написанный на Java и также эмулирующий несколько машин и конфигураций, включая модули памяти и ПЗУ, но, к сожалению, имеющий только немецкий интерфейс.
- также по адресу http://floooh.github.io/virtualkc/ доступен онлайн-эмулятор с гораздо более бедным функционалом, но позволяющий в общих чертах ознакомиться с системой. В нём есть выбор модели, а также комплект из некоторых игр.
Внутреннее устройство
Конструктивно основной модуль состоит из двух соединенных между собой плат — основной и платы подключения модулей, включающей также генератор видеосигналов (на фото не показана, подключается сверху тремя шлейфами). На основной можно заметить сам микропроцессор U880 (слева вверху), три микросхемы ПЗУ под CAOS и Бейсик (справа вверху) и 8 микросхем U6164 (по 8 Кбайт) основного ОЗУ (справа). Слева в третьей и четвертой строке, рядом с зелеными конденсаторами находятся микросхемы ОЗУ видеопамяти.
Для мелкой логики применяются в том числе и советские 555ЛА3 и 555КП5.
Внутренности D004:
Также две платы (основная и подключения модулей).
Заключение
Представляя из себя довольно интересный вариант реализации модульной архитектуры, компьютеры серии КС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.
MuseumComputer
Очень подробная и проработанная статья, на 100% уверен — единственная в рунете про этот интересный компьютер. Спасибо!