Желудь MOS - Acorn MOS

Операционная система машины (MOS)
Acorn MOS Version 320.png
Разработчик Желудь Компьютеры
Написано в 8-битный машинный код 6502 (v0, v1) 65C02 машинный код (v2 – v5)
Рабочее состояние Снято с производства
Исходная модель Закрытый источник
Первый выпуск Конец 1981 г . ; 40 лет назад  ( 1981 )
Окончательный релиз 5 / начало 1986 года ; 35 лет назад  ( 1986 )
Маркетинговая цель Персональные компьютеры
Доступно в английский
Метод обновления Замена ПЗУ
Платформы BBC Micro , Acorn Electron , серия BBC Master
Тип ядра Монолитный
Пользовательский интерфейс по умолчанию Интерфейс командной строки (v3, v4, v5)
Преемник ARX (снято с производства)
Arthur, переименовано в RISC OS

Операционная система машины ( MOS ) или OS является прекращенной компьютерной операционной системы (ОС) , используемых в Acorn Computers диапазоне компьютера BBC. Он включал поддержку четырехканального звука, графики, абстракции файловой системы , а также цифрового и аналогового ввода / вывода (I / O), включая шину расширения с последовательным подключением. Система была однозадачной, монолитной и безвозвратной .

Версии от 0.10 до 1.20 использовались на BBC Micro , версия 1.00 на Electron , версия 2 использовалась на B +, а версии от 3 до 5 использовались в серии BBC Master .

Последний компьютер BBC, BBC A3000, был 32-разрядным и работал под управлением ОС RISC , которая содержала части архитектуры Acorn MOS и имела ряд общих характеристик (например, интерфейс командной строки «звездные команды» , коды управления видео «VDU» и режимы экрана. ) с более ранней 8-битной MOS.

Версии от 0 до 2 MOS имели размер 16  КиБ , были написаны машинным кодом 6502 и хранились в постоянном запоминающем устройстве (ПЗУ) на материнской плате . Верхняя четверть 16-битного адресного пространства (от 0xC000 до 0xFFFF) зарезервирована для кода ПЗУ и пространства ввода-вывода.

Версии с 3 по 5 по-прежнему были ограничены адресным пространством 16 КиБ, но им удавалось содержать больше кода и, следовательно, более сложные процедуры, отчасти из-за альтернативного центрального процессора (ЦП) 65C102 с его более плотным набором инструкций плюс осторожное использование подкачки .

Пользовательский интерфейс

В исходных версиях MOS, от 0 до 2, не было пользовательского интерфейса как такового: ожидается, что приложения будут перенаправлять командные строки операционной системы в ОС от ее имени, а язык программирования BBC BASIC ROM со встроенным ассемблером 6502 прилагается. с BBC Micro - это приложение по умолчанию, используемое для этой цели. BBC Micro остановится с Language? ошибкой, если отсутствует ПЗУ, которое объявляет ОС о возможности предоставить пользовательский интерфейс (так называемые языковые ПЗУ ). MOS версии 3 и более поздних версий действительно имела простой интерфейс командной строки , обычно видимый только тогда, когда память CMOS не содержала настройки для ПЗУ на языке по умолчанию.

Прикладные программы в ПЗУ, а также некоторые программы на кассетах и ​​дисках обычно предоставляют командную строку, полезную для работы с файловым хранилищем, например для просмотра вставленного в данный момент диска. ОС предоставляет возможность ввода строки и подчиняется введенным командам, но приложение контролирует запуск командной строки.

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

В BBC BASIC командам ОС предшествует звездочка или они передаются через ключевое слово OSCLI, чтобы указать BASIC перенаправить эту команду непосредственно в ОС. Это привело к тому, что звездочка стала символом подсказки для любого программного обеспечения, предоставляющего командную строку ОС; MOS версии 3 официально использует звездочку в качестве символа командной строки. При ссылке на команду ОС они обычно включают звездочку как часть имени, например *RUN , *CAT и *SPOOL т. Д., Хотя командой является только часть после звездочки. Звездочка была названа «звездой», а команды - «звездными командами».

Неизвестные команды предлагаются любым служебным (расширенным) ПЗУ; Системные ПЗУ файловой системы часто проверяют, соответствует ли файл на диске этому имени, как и большинство других интерфейсов командной строки. Однако вызов операционной системы OSWORD с аккумулятором = 0 предлагает программам однострочный ввод (с ctrl-U для очистки строки и включенными клавишами копирования курсора) с базовой фильтрацией символов и ограничением длины строки.

В интерпретаторе командной строки MOS реализована довольно необычная идея: сокращение команд. Чтобы сэкономить, можно использовать точку после нескольких первых символов, например *L. for *LOAD и *SA. for *SAVE . *RUN был сокращен до */ одиночки. *CAT , команда каталогизации (списка) кассеты или диска может быть сокращена до *. .

Сервисные ПЗУ

Сторонние ПЗУ обычно также поддерживают сокращение команд, что приводит к неоднозначности, когда два служебных ПЗУ предоставляют команды, которые очень похожи по названию, но, возможно, различаются по функциям. В этом случае MOS будет отдавать приоритет команде из ПЗУ в слоте ПЗУ с более высоким номером, например, 7 имеет приоритет над 6.

Некоторые сторонние поставщики могли бы обойти это, добавив к своим звездным командам другие буквы. Например, команды ROMS Watford Electronics будут иметь префикс звездочки, W что сделает их уникальными.

Расширение

Младшие 16 КиБ карты ПЗУ (от 0x8000 до 0xBFFF) зарезервированы для активного банка выгружаемого бокового адресного пространства . Система Sideways на BBC Micro позволяет переключать по одному ПЗУ из разъемов на материнской плате (или платах расширения) на карту основной памяти. Таким образом, программное обеспечение можно запускать из ПЗУ (оставляя оперативную память свободной от программного кода пользователя, для большего рабочего пространства), а ОС можно расширять с помощью таких ПЗУ. Наиболее распространенным боковым ПЗУ после BASIC является система хранения дисков Acorn, используемая для обеспечения поддержки дискет для машины.

Во время сброса каждое выгружаемое ПЗУ включается и спрашивает, сколько публичного и частного рабочего пространства ему нужно. Каждому ПЗУ выделяется фрагмент частного рабочего пространства, которое остается выделенным все время, и один блок общедоступного рабочего пространства, равный размеру самого большого запроса, становится доступным для активного ПЗУ. Во время работы выгружаемая область быстро переключается между ПЗУ, когда выдаются команды файловой системы и нераспознанные команды помещаются в ОС.

MOS выделяет блок памяти размером 3,5 КиБ (от 0x0000 до 0x0DFF) снизу карты памяти для рабочей области ПЗУ операционной системы и языка:

Адрес Использовать
0x0000-0x00FF Текущее языковое рабочее пространство, другое системное рабочее пространство
0x0100-0x01FF Стек ЦП
0x0200-0x02FF Векторы ОС, системные переменные, другое рабочее пространство
0x0300-0x03FF Рабочее пространство драйвера VDU, рабочее пространство кассетной системы, буфер ввода с клавиатуры
0x0400-0x07FF Выделено ПЗУ на текущем языке или трубке . BASIC использует 0x0400-0x046B для однобуквенных целочисленных переменных от @% до Z% (4 байта на букву), которые, таким образом, доступны быстрее, чем переменные в куче .
0x0800-0x08FF Звуковая система (хранит огибающие ADSR и тональный буфер; если звук не используется, здесь может храниться небольшой объем пользовательских данных), буфер принтера, определения ENVELOPE
0x0900-0x09FF Буферы кассетного и последовательного ввода (здесь можно разместить пользовательские данные, если кассета не используется, поэтому на странице 9 было собрано множество небольших утилит машинного кода )
0x0A00-0x0AFF Буферы кассетного и последовательного вывода, также используемые для утилит небольшого машинного кода.
0x0B00-0x0BFF Пользовательские клавиши (строки, которые вставляются при нажатии функциональных клавиш, задаются *KEY командой)
0x0C00-0x0CFF Пользовательские символы для режимов без телетекста (здесь могут быть помещены пользовательские данные, если дисплей находится в режиме телетекста)
0x0D00-0x0DFF Процедура обслуживания немаскируемых прерываний, сетевая рабочая область, рабочая область мыши / трекбола, косвенные векторы к выгружаемым ПЗУ и указатели рабочего пространства ПЗУ страниц

На кассетной машине 0x0E00 - это начало памяти пользовательской программы. Если установлены ПЗУ расширения ОС, такие как ПЗУ файловой системы, выше этой точки выделяется больше памяти; ПЗУ DFS обычно используют еще 2,75 КиБ для кэширования каталога дисков и управления буферами произвольного доступа. ПЗУ сетевой файловой системы (для Econet ) выделяет дополнительно 0,5 КБайт. Это серьезная проблема, потому что MOS не поддерживает перемещение машинного кода, который должен запускаться с адреса, по которому он был собран, поэтому некоторые программы, предполагавшие фиксированный запуск памяти пользовательских программ, могли перезаписать рабочее пространство MOS. Проблема была устранена в версиях с 3 по 5, позволяя ПЗУ выделять рабочее пространство в альтернативном банке ОЗУ от 0xC000 до 0xDFFF, который присутствовал в компьютерах серии Master, хотя старые ПЗУ могли продолжать выделять блоки основной памяти.

ОС также поддерживает векторную таблицу всех своих вызовов, которая может быть обновлена ​​для перехвата любых вызовов ОС для расширения пользователя. Изменяя или «зацепляя» эти векторы, разработчики могли заменить свои собственные процедуры на те, которые предоставляются MOS по умолчанию.

Текст, графика, печать

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

Графика и вообще весь экран выводится очень необычным образом. Управляющие символы ASCII почти полностью получили новое значение в MOS: они известны как «драйверы VDU», поскольку в документации они описаны в связи с оператором VDU в BBC BASIC, они интерпретируются как символы управления видео. VDU 30 (т.е. ASCII 30) перемещает курсор в (0, 0), VDU 4 и 5 выбирают, должен ли текст отображаться на графике или текстовом курсоре, VDU 12 очищает экран, а VDU 14 и 15 включают и выключают блокировку прокрутки. Таким образом, нажатие ctrl-L очистит экран, а ctrl-N включит блокировку прокрутки. VDU 2 и 3 переключают, выводится ли вывод с экрана на принтер. Оператор BBC BASIC VDU VDU x [, y[, z...]] эквивалентен обычному BASIC, и многие из управляющих кодов (например, 12 для «чистого экрана» и 7 для «звукового сигнала») имеют те же функции, что и на других современных машинах. PRINT CHR$(x) [; CHR$(y)[; CHR$(z)...]]

Многие другие управляющие символы принимают параметры: один или несколько следующих за ними символов используются исключительно для их битового значения в качестве параметра, а не в качестве управляющего кода. VDU 19 обрабатывает переназначение палитры; следующие пять байтов представляют собой запись палитры, желаемый цвет и три резервных байта. VDU 31 помещает текстовый курсор в позицию, содержащуюся в следующих двух байтах. VDU 17 устанавливает цвет текста, а 18 - цвет графики. VDU 25 использует следующие пять байтов для перемещения графического курсора и построения сплошных и пунктирных линий, точек и закрашенных треугольников, задокументированного объема графики в MOS 0 и 1. Первый байт - это код команды, за которым следуют координаты x и y. -координаты как две пары байтов. Другие графические функции, такие как заливка горизонтальной линии, ограниченной заданным цветом, были доступны за счет использования недокументированных или плохо документированных кодов команд.

BBC BASIC содержал псевдонимы для обычно используемых кодов VDU (например, GCOL для VDU 18 или PLOT для VDU 25). Некоторые операторы были прямыми эквивалентами кодов VDU, например, CLS для VDU 12. Некоторые операторы были менее точными эквивалентами, поскольку они включали функциональные возможности, специфичные для BASIC, а также вызывали процедуры ОС; например, оператор MODE x установит режим экрана x и отрегулирует системную переменную BASIC HIMEM в соответствии с объемом памяти, который новый режим оставил доступным для BASIC, в то время как VDU 22, x установит только режим экрана, не изменяя HIMEM. Это позволяло программисту выделять блок памяти из BASIC - например, для загрузки в него процедур машинного кода - путем понижения значения HIMEM в начале программы, и при этом иметь возможность переключать режимы экрана, не освобождая его в качестве побочного эффекта. .

Существует одна команда операционной системы для записи символа, OSWRCH, которая отвечает за весь текст и графику. Например, чтобы переместить курсор на (10, 15), необходимо в ассемблере 6502 :

LDA #31: JSR OSWRCH \ move text cursor
LDA #10: JSR OSWRCH \ x-coordinate
LDA #15: JSR OSWRCH \ y-coordinate

(LDA загружает значение в аккумулятор; JSR - это «переход к подпрограмме».) При третьем вызове ОС курсор переместится. Следующий код будет рисовать линию от (0, 0) до (0, +100):

LDA #25: JSR OSWRCH \ begin "PLOT" (ASCII 25) command
LDA #4: JSR OSWRCH \ command k=4, or move absolute
LDA #0: JSR OSWRCH: JSR OSWRCH: JSR OSWRCH: JSR OSWRCH
 \ send (0, 0) as low, high byte pairs
LDA #25: JSR OSWRCH \ begin PLOT
LDA #1: JSR OSWRCH  \ k=1 - draw relative
LDA #0: JSR OSWRCH: JSR OSWRCH \ x = 0
LDA #100: JSR OSWRCH \ y = 100 (low byte)
LDA #0: JSR OSWRCH   \ high byte

BBC BASIC позволяет выполнять указанные выше действия одним из следующих способов:

 VDU 25, 4, 0; 0; 25, 4, 100; 0;

 PRINT CHR$(25); CHR$(4); CHR$(0); ... etc.

 PLOT 4, 0, 0: PLOT 1, 0, 100

 MOVE 0, 0: DRAW 0, 100: REM absolute co-ords only!

 OSWRCH=&FFEE: A%=25: CALL OSWRCH: A%=4: CALL OSWRCH: A%=0: CALL OSWRCH ... etc.

Графика в Acorn MOS использует виртуальное графическое разрешение 1280 × 1024 с позициями пикселей, сопоставленными с ближайшим эквивалентным пикселем в текущем графическом режиме. Переключение разрешения видео не повлияет на форму, размер или положение графики, нарисованной даже с совершенно другими пиксельными метриками в новом режиме, потому что все это учитывается ОС.

MOS предоставляет два других вызова ОС, которые обрабатывают текстовый вывод: OSNEWL и OSASCI . OSNEWL записывает перевод строки и возврат каретки в текущий выходной поток. OSASCI перенаправляет все символы непосредственно в OSWRCH, за исключением возврата каретки, который вместо этого вызывает вызов OSNEWL. Точный код OSASCI и OSNEWL - пять строк ассемблера 6502 - задокументирован в Руководстве пользователя BBC Micro.

MOS реализует распознавание символов, так что текст, напечатанный на экране системным шрифтом, можно выбирать с помощью клавиш со стрелками и вводить с помощью COPY клавиши, как если бы он был набран. Чтобы активировать редактирование экрана, пользователь перемещает аппаратный курсор к тексту, который нужно прочитать, и ОС отображает второй курсор в программном обеспечении в исходной позиции. Нажатие COPY копирует один символ из аппаратного курсора в программный курсор и продвигает оба, так что удерживание клавиши нажатой копирует часть текста, курсоры обтекают вертикальные края экрана по мере необходимости. Если экран прокручивается во время редактирования, положение аппаратного курсора регулируется в соответствии с текстом. Пользователь может вносить изменения в текст во время копирования, а определенные пользователем символы распознаются в графических режимах. Редактирование экрана прекращается при нажатии RETURN или ESCAPE , что имеет свои обычные эффекты. Распознавание символов становится доступным для пользователей в API с вызовом для чтения символа в текущей позиции курсора.

Звук

Генерация звука осуществляется через другой вызов ОС, OSWORD, который обрабатывает множество задач, перечисленных с помощью кода задачи, помещенного в аккумулятор. Все вызовы OSWORD содержат блок параметров, используемый для отправки и получения нескольких данных; адрес этого блока передается в регистры X и Y, с младшим байтом в X и старшим байтом в Y. Имеется четыре буферизованных звуковых канала - три мелодических и один шумовой на основе звукового чипа, найденного в BBC Micro. . Для мелодических каналов существует только одна форма волны; поддерживаемые параметры ноты - высота, длительность, амплитуда, выбор огибающей и различные параметры управления. Для параметра амплитуды ноль или отрицательное значение задают статическую амплитуду, а положительное значение выбирает огибающую амплитуды и высоты тона (предварительно определенное изменение во времени) для применения к ноте.

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

OSWORD обрабатывает множество функций, кроме звука, многие из которых не имеют прямой поддержки в BASIC. К ним можно получить доступ из BASIC, установив блок параметров, загрузив его адрес в X% и Y% и код задачи в A%, а затем вызвав процедуру.

Другой ввод / вывод и поддержка второго процессора

BBC Micro поддерживает второй процессор, подключенный через Tube , что обеспечивает прямой доступ к системной шине. Код драйвера для интерфейса Tube не хранится в MOS, обычно предоставляется внешним служебным ПЗУ.

В ОС есть вызовы для обработки чтения и записи всех операций ввода-вывода (порты и экранная память), и программистам настоятельно рекомендуется использовать их в документации Acorn. Причина этого в том, что когда установлен второй процессор, пользовательское программное обеспечение запускается из отдельной карты памяти на дальней стороне шины процессора Tube, и прямой доступ к отображенным в память регистрам ввода-вывода и видеопамяти невозможен. Однако в целях повышения производительности многие приложения, включая многие игры, записывают данные непосредственно в основное адресное пространство для ввода-вывода и, следовательно, дают сбой или выдают пустой экран, если подключен второй процессор 6502. Одной из таких областей, критичных к производительности, является поддержка спрайтов : оборудование BBC Micro не поддерживает спрайты, а игры должны реализовывать спрайты в программном обеспечении. На практике широкое использование прямого доступа вместо вызовов ОС очень редко вызывало проблемы. Вторые процессоры были дорогими, и для их использования было написано очень мало программного обеспечения, поэтому их мало кто покупал, а те, у кого они были, могли просто выключить их или отсоединить кабель, если возникла проблема.

MOS содержит две встроенные файловые системы: кассету и ПЗУ. Они очень похожи (попробуйте *ROM , *OPT 1 2 , *CAT с соответствующим ROM установлен) и разделяют много кода. Они имеют элементарный механизм защиты от копирования, при котором файл с определенным установленным флагом не может быть загружен, кроме как для его выполнения. (До того как в 1987 году компания Amstrad выпустила на массовый рынок двухкассетный магнитофон, у большинства домашних пользователей не было средств для перезаписи кассет без загрузки файлов в компьютер для повторного сохранения.) Установлена ​​усовершенствованная система хранения дисков (ADFS). в стандартной комплектации серии Master имеет аналогичный механизм.

Версии

Релизы 0 и 1

Версии для семейства BBC Micro , начиная с 0.10 и заканчивая 1.20. Как ни странно, Electron поставлялся с версией 1.00, несмотря на то, что был выпущен после версии 1.20 BBC Micro, потому что это был первый выпуск ПЗУ для электрона. Номер версии MOS не был задуман как определение API: электронное ПЗУ ни в каком смысле не было «основано» на BBC Micro ROM версии 1.0.

Выпуск 2

Эта версия предназначена для BBC Model B +, по сути, такая же, как MOS 1.20, за исключением добавления поддержки боковой и теневой RAM, присутствующей в B +.

Релизы с 3 по 5

MOS 3 - MOS 5, поставляемые с системами BBC Master Series , в моделях Master 128, Master ET и Master Compact соответственно.

В первоначальном выпуске MOS 3 были расширены возможности, предоставляемые в MOS 2 на B +, для поддержки дополнительного оборудования, обеспечения возможности командной строки и расширения кода драйвера VDU с улучшенными возможностями построения графики. Были обнародованы две известные версии: наиболее распространенная версия 3.20 и версия 3.50 (хотя в ней было больше функций и исправлены ошибки, она не была на 100% совместима с некоторыми популярными приложениями, поэтому предлагалась только как дополнительное обновление).

MOS 4 была урезанной версией MOS 3, предназначенной для столь же минимизированного Master ET, и в ней было исправлено несколько мелких ошибок.

MOS 5 поставлялся с Master Compact и был сильно изменен, некоторые функции были удалены или сильно изменены.

Кредиты

За исключением MOS 3.50, где пространство было освобождено для большего количества кода, область, обычно скрытая ячейками памяти ввода / вывода (768 байтов от 0xFC00-0xFEFF включительно) в ПЗУ MOS содержала список имен участников системы. . Это можно исправить, извлекая ПЗУ и считывая его содержимое в программаторе СППЗУ. Те, у кого не было такого устройства, могли получить доступ к ПЗУ на Мастере, установив тестовый бит в регистре управления доступом, а затем используя программу машинного кода для копирования ПЗУ непосредственно в экранную память текстового режима.

Полный текст кредитной строки в MOS 1.20 выглядит следующим образом; после запятых пробелы не ставятся для экономии памяти:

"(C) 1981 Acorn Computers Ltd. Благодарности причитаются следующим участникам разработки BBC Computer (среди которых слишком много, чтобы упоминать): - Дэвид Аллен, Боб Остин, Рам Банерджи, Пол Бонд, Аллен Бутройд , Кембридж , Клиртоне, Джон Колл , Джон Кокс, Энди Криппс, Крис Карри , 6502 дизайнера, Джереми Дион, Тим Добсон, Джо Данн, Пол Фаррелл, Ферранти , Стив Фербер , Джон Гиббонс, Эндрю Гордон, Лоуренс Хардвик, Дилан Харрис, Герман Хаузер , Hitachi , Энди Хоппер , ICL , Мартин Джексон, Брайан Джонс, Крис Джордан, Дэвид Кинг, Дэвид Китсон, Пол Кривачек, Компьютерная лаборатория , Питер Миллер, Артур Норман , Глин Филлипс, Майк Прис, Джон Рэдклифф, Уилберфорс-роуд, Питер Робинсон , Ричард Рассел , Ким Спенс-Джонс, Грэм Тебби, Джон Текрей, Крис Тернер, Адриан Уорнер, Роджер Уилсон , Алан Райт ».

Прием

В интервью 1993 и 2001 годов соучредитель Acorn Герман Хаузер рассказывал, что Билл Гейтс из Microsoft , заметив, что было продано 1,5 миллиона BBC Micros, пытался продать MS-DOS компании Acorn, но Хаузер считал, что внедрение MS-DOS было бы «ретроградом». шаг "по сравнению с сохранением системы Желудь.

Рекомендации

Заметки
  • Watford Electronics, "Расширенное справочное руководство для серии BBC Master", 1988 г.