Операционная система машины ( МОС ) [ 2] или ОС — это прекращенная компьютерная операционная система (ОС), использовавшаяся в серии компьютеров BBC компании Acorn Computers . Она включала поддержку четырехканального звука, графики, абстракции файловой системы , а также цифрового и аналогового ввода-вывода (I/O), включая последовательно соединенную шину расширения. Система была однозадачной, монолитной и нереентерабельной .
Версии 0.10–1.20 использовались на BBC Micro , версия 1.00 — на Electron , версия 2 — на B+, а версии 3–5 — в серии BBC Master .
Последний компьютер BBC, BBC A3000, был 32-разрядным и работал под управлением RISC OS , которая сохранила части архитектуры Acorn MOS и разделяла ряд характеристик (например, CLI «звездные команды» , коды управления видео «VDU» и режимы экрана) с более ранней 8-разрядной MOS.
Версии MOS с 0 по 2 имели размер 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 команды ОС могут предваряться звездочкой, чтобы дать указание BASIC переслать эту команду непосредственно ОС. Это привело к тому, что звездочка стала символом приглашения для любого программного обеспечения, предоставляющего командную строку ОС; MOS версии 3 и далее официально использует звездочку как символ командной строки. При ссылке на команду ОС они обычно включают звездочку как часть имени, например *RUN
, *CAT
, *SPOOL
и т. д., хотя только часть после звездочки является командой. Звездочка называлась «звездочкой», а команды назывались «командами-звездочками». [3]
Начиная с BBC BASIC 2, команды также могут быть введены с использованием OSCLI
ключевого слова в сочетании с командной строкой. [4] В качестве альтернативы, процедура OSCLI может быть вызвана напрямую с использованием CALL
ключевого слова после инициализации соответствующих переменных BASIC. [3]
Неопознанные команды предлагаются любым сервисным (расширенным) ПЗУ; ПЗУ файловой системы часто проверяют, соответствует ли файл на диске этому имени, то же самое делают и большинство других интерфейсов командной строки. Вызов операционной системы OSWORD с аккумулятором = 0, однако, предлагает программам однострочный ввод (с ctrl-U для очистки строки и включенными клавишами копирования курсора) с базовой фильтрацией символов и ограничением длины строки.
Интерпретатор командной строки MOS имеет довольно необычную идею: сокращение команд. Для экономии ввода можно использовать точку после первых нескольких символов, например, *L.
for *LOAD
и *SA.
for *SAVE
. *RUN
было сокращено до */
alone. *CAT
, команда каталогизации (перечисления) кассеты или диска может быть сокращена до *.
.
Сторонние ПЗУ обычно также поддерживают сокращение команд, что приводит к двусмысленности, когда два сервисных ПЗУ предоставляют команды, которые очень похожи по названию, но, возможно, различаются по функциям. В этом случае MOS отдаст приоритет команде из ПЗУ в слоте ПЗУ с более высоким номером, например, 7 имеет приоритет над 6.
Некоторые поставщики сторонних услуг обходили это, добавляя к своим командам со звездочкой другие буквы. Например, Watford Electronics ROMS добавляли к своим командам со звездочкой префикс , W
что делало их уникальными.
Нижние 16 КБ карты ПЗУ (от 0x8000 до 0xBFFF) зарезервированы для активного страничного банка адресного пространства Sideways . Система Sideways на BBC Micro позволяет переключать по одному ПЗУ из гнезд на материнской плате (или платах расширения) в основную карту памяти. Программное обеспечение может запускаться из ПЗУ таким образом (оставляя ОЗУ свободной от кода пользовательской программы для большего рабочего пространства), и ОС может быть расширена с помощью таких ПЗУ. Наиболее распространенным боковым ПЗУ после BASIC является Acorn Disc Filing System, используемая для обеспечения поддержки дискет для машины.
Во время сброса каждая выгружаемая ПЗУ включается и спрашивается, сколько публичного и частного рабочего пространства ей нужно. Каждой ПЗУ выделяется часть частного рабочего пространства, которая остается выделенной все время, и один блок публичного рабочего пространства, равный размеру наибольшего запроса, становится доступным для активной ПЗУ. Во время работы выгружаемая область быстро переключается между ПЗУ, когда выдаются команды файловой системы и нераспознанные команды передаются в ОС.
MOS выделяет блок памяти размером 3,5 КБ (от 0x0000 до 0x0DFF) в нижней части карты памяти для операционной системы и рабочего пространства языкового ПЗУ:
[5] [6]
На машине, поддерживающей только кассеты, 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 \ переместить текстовый курсорLDA #10: JSR OSWRCH \ x-координатаLDA #15: JSR OSWRCH \ координата y
(LDA загружает значение в аккумулятор; JSR — это « переход к подпрограмме ».) При третьем вызове ОС курсор переместится. Следующий код нарисует линию от (0, 0) до (0, +100):
LDA #25: JSR OSWRCH \ начать команду "PLOT" (ASCII 25)LDA #4: JSR OSWRCH \ команда k=4, или абсолютное перемещениеLDA #0: JSR OSWRCH: JSR OSWRCH: JSR OSWRCH: JSR OSWRCH \ отправить (0, 0) как младшую, старшую пары байтов
LDA #25: JSR OSWRCH \ начало СЮЖЕТАLDA #1: JSR OSWRCH \ k=1 - рисовать относительноLDA #0: JSR OSWRCH: JSR OSWRCH \ x = 0LDA #100: JSR OSWRCH \ y = 100 (младший байт)LDA #0: JSR OSWRCH \ старший байт
BBC BASIC позволяет выполнять вышеуказанные действия любым из следующих способов:
ВДУ 25 , 4 , 0 ; 0 ; 25 , 4 , 100 ; 0 ; ПЕЧАТЬ CHR$ ( 25 ); CHR$ ( 4 ); CHR$ ( 0 ); ... и т.д. УЧАСТОК 4 , 0 , 0 : УЧАСТОК 1 , 0 , 100 MOVE 0 , 0 : DRAW 0 , 100 : REM только абсолютные координаты! OSWRCH = & FFEE : A% = 25 : ВЫЗОВ OSWRCH : A% = 4 : ВЫЗОВ OSWRCH : A% = 0 : ВЫЗОВ OSWRCH ... и т.д.
Графика в Acorn MOS использует виртуальное графическое разрешение 1280×1024, с позициями пикселей, сопоставленными с ближайшим эквивалентным пикселем в текущем графическом режиме. Переключение разрешения видео не повлияет на форму, размер или позицию графики, отрисованной даже с совершенно другими пиксельными метриками в новом режиме, поскольку все это учитывается ОС.
MOS предоставляет два других вызова ОС, которые обрабатывают текстовый вывод: OSNEWL
и OSASCI
. OSNEWL записывает перевод строки и возврат каретки в текущий выходной поток. OSASCI пересылает все символы напрямую в OSWRCH, за исключением возврата каретки, который вместо этого запускает вызов OSNEWL. Точный код для OSASCI и OSNEWL – пять строк ассемблера 6502 – задокументирован в руководстве пользователя BBC Micro.
MOS реализует распознавание символов, так что текст, напечатанный на экране системным шрифтом, можно выбирать с помощью клавиш со стрелками и вводить с помощью клавиши , COPYкак будто он печатается. Чтобы активировать экранное редактирование, пользователь перемещает аппаратный курсор на текст, который нужно прочитать, а ОС отображает второй курсор в программном обеспечении в исходном положении. Нажатие копирует один символ из аппаратного курсора в программный курсор и перемещает оба, так что удерживание клавиши копирует часть текста, курсоры при необходимости обходят вертикальные края экрана. Если экран прокручивается во время редактирования, положение аппаратного курсора корректируется так, чтобы следовать за текстом. Пользователь может вносить изменения в текст во время копирования, а определяемые пользователем символы распознаются в графических режимах. Экранное редактирование прекращается при нажатии или , которые имеют свои обычные эффекты. Распознавание символов доступно пользователям в API с вызовом для чтения символа в текущей позиции курсора. [ необходима цитата ]COPYRETURNESCAPE
Генерация звука осуществляется посредством другого вызова ОС, 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. Они довольно похожи (попробуйте *ROM
, *OPT 1 2
, *CAT
с установленным подходящим ROM) и имеют много общего кода. Они имеют элементарный механизм защиты от копирования , при котором файл с определенным набором флагов не может быть загружен, кроме как для его выполнения. [7] (До того, как Amstrad выпустила на рынок двухкассетный магнитофон в 1987 году, [8] большинство домашних пользователей не имели возможности перезаписывать кассеты без загрузки файлов в компьютер для повторного сохранения.) Расширенная система хранения дисков (ADFS), установленная в качестве стандарта в серии Master, имеет аналогичный механизм. [9]
Версии для семейства BBC Micro , начиная с 0.10 и заканчивая 1.20. По странному стечению обстоятельств Electron поставлялся с версией 1.00, несмотря на то, что был выпущен после версии 1.20 BBC Micro, поскольку это был первый выпуск ПЗУ для Electron. Номер версии MOS не предназначался как определение API: ПЗУ Electron ни в каком смысле не было «основано» на версии 1.0 ПЗУ BBC Micro.
Эта версия предназначена для модели BBC B+ и по сути является той же версией MOS 1.20, за исключением добавления поддержки боковой и теневой памяти, присутствующей в B+.
MOS 3–MOS 5 поставляются с системами BBC Master Series в моделях Master 128, Master ET и Master Compact соответственно.
Первоначальный выпуск MOS 3 расширил возможности, предоставляемые в MOS 2 на B+, чтобы поддерживать дополнительное оборудование, предоставлять возможности командной строки и расширять код драйвера VDU с улучшенными возможностями графического черчения. Были опубликованы две примечательные версии: версия 3.20 была наиболее распространенной, и версия 3.50 (хотя она имела больше функциональности и исправлений ошибок [10], она не была на 100% совместима с некоторыми популярными прикладными программами [11], поэтому предлагалась только как опциональное обновление).
MOS 4 представляла собой урезанную версию MOS 3, предназначенную для столь же уменьшенного Master ET, и в ней было исправлено несколько незначительных ошибок.
MOS 5 поставлялась с Master Compact и была значительно изменена: некоторые функции были удалены или существенно изменены.
За исключением MOS 3.50, где пространство было освобождено для большего количества кода, область, обычно скрытая ячейками памяти ввода/вывода (768 байт от 0xFC00 до 0xFEFF включительно) в MOS ROM, содержала список имен участников системы. Это можно было восстановить, извлекая ROM и считывая его содержимое в программаторе EPROM . Те, у кого не было такого устройства, могли получить доступ к ROM на Master, установив тестовый бит регистра управления доступом, а затем используя программу машинного кода для копирования ROM непосредственно в текстовую экранную память. [12]
Полный текст строки титров ASCII в MOS 1.20 выглядит следующим образом; после запятых не ставится пробелов для экономии памяти:
(C) 1981 Acorn Computers Ltd.Thanks are due to the following contributors to the development of the BBC Computer (among others too numerous to mention):- David Allen,Bob Austin,Ram Banerjee,Paul Bond,Allen Boothroyd,Cambridge,Cleartone,John Coll,John Cox,Andy Cripps,Chris Curry,6502 designers,Jeremy Dion,Tim Dobson,Joe Dunn,Paul Farrell,Ferranti,Steve Furber,Jon Gibbons,Andrew Gordon,Lawrence Hardwick,Dylan Harris,Hermann Hauser,Hitachi,Andy Hopper,ICL,Martin Jackson,Brian Jones,Chris Jordan,David King,David Kitson,Paul Kriwaczek,Computer Laboratory,Peter Miller,Arthur Norman,Glyn Phillips,Mike Prees,John Radcliffe,Wilberforce Road,Peter Robinson,Richard Russell,Kim Spence-Jones,Graham Tebby,Jon Thackray,Chris Turner,Adrian Warner,Roger Wilson,Alan Wright.
В интервью в 1993 и 2001 годах соучредитель Acorn Герман Хаузер рассказал, что Билл Гейтс из Microsoft пытался продать MS-DOS компании Acorn, но Хаузер посчитал, что принятие MS-DOS было бы «шагом назад» по сравнению с сохранением системы Acorn. [13] [14]
исправление ошибок в исходной MOS, таких как печально известная ошибка CLOSE #0 в DFS... ADFS была ускорена как минимум в два раза... Утилиты Format, Verify и Backup теперь включены в ROM... увеличение скорости в программах, которые выполняют много операций с плавающей точкой... позволяет вводить международные символы с клавиатуры... Acorn решила не включать альтернативный ROM в качестве стандарта в новые Masters. Причина, по их словам, в том, что, хотя новый ROM обладает высокой совместимостью, некоторые существующие программы с ним не работают. В частности, новая обработка 8-битных ключей может сбить с толку некоторые программы, и любая программа, которая напрямую обращается к процедурам в ROM, почти наверняка потерпит неудачу. Я считаю, что Acorn приняла мудрое решение, учитывая объем уже имеющегося программного обеспечения для Master, но не думаю, что вас должна отпугивать несовместимость — на практике большинство программ будут работать.
*FX225,2 выделяет еще одну проблемную область... поскольку действие этой команды теперь было изменено по сравнению с изначально задокументированным, такие программы больше не работают.
установка бита 6 регистра управления доступом ACCON (&FE34) выберет эту часть ПЗУ, и имена могут быть прочитаны ... На странице F.2-3 Главного справочного руководства (часть 1), где каждому биту ACCON дано отдельное имя, бит 6 называется TST