iS-DOS/TASiS
Отвязаться от Тырдоса:
о базовых принципах
программирования под ОС iS-DOS/TASiS
Максим Тимонин
(Максагор/NedoPC group)
Выражаю огромную благодарность создате─
лям iS-DOS - сотрудникам фирмы Iskra-Soft
- и автору ядра TASiS Юрию Корсунину за
прекрасное семейство ОС для Спектрума и за
материалы по ним,которые были использованы
при написании данной статьи.
Зачем? Или об устаревшем TR-DOS
и iS-DOS/TASiS как его замене
Старожилы Спектрума времён его расцве─
та в экс-СССР в 90-е годы помнят ту роман─
тическую атмосферу стремления к развитию
своей любимой машины - создания удобных
инструментов работы с данными и разработки
программ, служебные утилиты, и прочее, и
прочее,и прочее. Делались попытки развития
как аппаратной части, так и программной
среды исходя их базового восприятия Спект─
рума как пусть и не самого мощного, но КО─
МПЬЮТЕРА, как отдельной платформы, которую
можно ВСЕСТОРОННЕ и полноценно ИСПОЛЬЗО─
ВАТЬ. В этой же плоскости лежали и много─
численные попытки написания полноценной
операционной системы, графических интерфе─
йсов, многозадачности и прочее.
Последнее - ОСеписание - хочу отметить
особо и на нем остановиться. Ведь что по─
лучалось? Хочется расширить память? Вот
вам схема её напайки. Повысить скорость?
Вот турбо-режим. Улучшить графику? Вот
схема напайки всяких гигаскринов и прочих
аппаратных мультиколоров. Звук? Вот вам аж
целый General Sound. И только одно ограни─
чение было не по зубам тогдашним умельцам:
какие бы навороты они ни припаивали к сво─
им Спектрумам, всё это продолжало запуска─
ться и работать из-под ОС TR-DOS, являю─
щейся по сути эмулятором ленточного интер─
фейса на дисководе, с её четырьмя дискет─
ками ёмкостью 6ЧOКБ, "которых хватит на
всё". А вот стало быстро не хватать, даже
с учётом скромных запросов Спекки. И я го─
ворю не о нескольких игрушках на 2-3 дис─
кеты целиком.Просто количество софта (игр,
демок,системок) все 90-е годы росло уважа─
ющими себя темпами, а пропорционально этим
темпам росли и ряды дискет у спекки-поль─
зователей,которые удручённо вздыхали,глядя
на "коллег" с других машин (и ладно, если
только пользователей IBM PC), удобно заг─
ружающихся с винчестеров. А железячники и
рады были бы ответить на эти вздохи: "есть
решение!" - и даже представляли в ответ
IDE-контроллеры, но смысла в этом было ни─
какого, ибо новый носитель требовал новые
принципы работы с ним, коренным образом
отличаясь от "стандартных" точек входа в
ПЗУ TR-DOS. Быстро и неизбежно возникла, в
принципе, здравая идея эмулировать (пусть
и с частичной потерей совместимости) дис─
кетки в виде фалов-образов. Это на первых
порах породило такого монстра, как коллек─
ции виртуальных дискет, выбираемых через
сервис-монитор клона Scorpion ZS 256 +
SMUC. Но это были почти "те же грабли, вид
сбоку" - пользователь все равно был огра─
ничен рамками 6ЧOКБ и сменяемыми (пусть и
виртуально) дискетами. Остро нужна была
среда для полноценной работы с любыми вне─
шними устройствами хранения данных. И та─
кие ОСи тоже появились.
Это,во-первых, CP/M (на разных Спектру─
мах было порядка 15 реализаций, начиная с
1986 года), прижившаяся полноценно на не─
которых клонах и иногда прошиваемая в их
ПЗУ; во-вторых, iS-DOS разных модификаций
(Classic и Chic). iS-DOS, как менее требо─
вательная, запускаемая практически на всех
клонах, более-менее прижилась. По неё был
написан ряд серьёзных программных пакетов
и множество утилит помельче. Но в жизнь
"каждого Спектрумиста" она всё же войти не
смогла. И причиной тому оказались гири ог─
ромного количества написанного под TR-DOS
и идущего только с флопа софта, не подле─
жавшего какой-либо очевидной адаптации под
иную Ось. Плюс сила привычки программиро─
вать только под "Тырдосину" оказалось сли─
шком большой - лень переучиваться под тре─
бования и соглашения иной Оси сыграла не
последнюю роль.
Первое ограничение было преодолено на
машинах с 1024 и более КБ ОЗУ, что позво─
лило организовывать виртуальные дискеты в
ОЗУ,загружая их с внешних устройств и пре─
жде всего с винта. Получалось удобно - ОС
играет роль среды, через которую старый
TR-DOS'ный софт (точнее, значительную его
часть) можно, храня на ОСевых устройствах
хранить и оттуда запускать, а уже новый
софт, демки и игры писать под возможности
новой системы.
Но, как уже говорилось, второе ограни─
чение - сила привычки - сыграло роковую
роль, и Спектрум в целом остался TRD-зави─
симым,что,по моему мнению,для него,как для
ПОЛНОЦЕННОГО КОМПЬЮТЕРА привело к печаль─
ным последствиям в наши дни, несмотря на
то, что ОЗУ достигло 4 МБ, освоены HDD,
CD-ROM, SD-карточки. На них в современных
Спектрумах легко может размещаться практи─
чески всё программное обеспечение,написан─
ное за все годы, но, пусть и в файловой
системе FAT, всё равно в виде практически
исключительно коллекций образов TRD (разве
что помимо пары коммандеров и нескольких
показательных демок). Никакой программной
среды нет и в помине,а работа с FAT и мон─
тирование образов осуществляется через ко─
ренным образом развившееся ПЗУ.
Но эта концепция, безусловно имеющая
право на существование, привела к тому,что
лишённый обязательной универсальной про─
граммной и пользовательской среды Спектрум
всё больше стал напоминать игровые приста─
вки DENDY, вся "работа" за которыми своди─
тся к "вставил картридж, поиграл, вставил
другой".Логичным образом появилось большое
количество таких пользователей, для кото─
рых Спектрум - только повод запустить дем─
ку/игру, поностальгировать и выключить. А
если и писать под него, то только
кросс-средствами на ПиСи.
Нет, это неплохо. Это очень помогает в
работе,и никто не собирается фанатично за─
ставлять отказываться от них. Однако отказ
от собственно РАБОТЫ на Спектруме и прев─
ращение его в глазах определенной катего─
рии Спектрумистов в ностальгическую DENDY-
приставку с клавиатурой повлекло за собой
деградацию целого ряда направлений софта.
Для многих уже не дикими звучат даже не
вопросы, а самоуверенные утверждения на
форумах типа "Текстовые редакторы? А зачем
они нужны? Разве на Спектруме их ещё
кто-нибудь использует?" Такие люди правы
со своей колокольни в том смысле, что если
Спектрум нужен только поностальгировать и
поиграть в старую или новую игрушку, то
редакторы/конвертеры/языки действительно
не нужны. ALASM тоже не нужен - всё можно
написать на ПЦ и скомпилировать прямо в
TRD-образ, который, в свою очередь, запус─
тить с SD-карточки на реальном Спектруме.
Это нормально. Для Спектрума-ПРИСТАВКИ.
Но для Спектрума-КОМПЬЮТЕРА - глухой
тупик. И ненормально, что эта концепция
"приставки" многими "на автомате" начинает
восприниматься единственно верной - что
уже породило ряд ранее немыслимых псевдо─
религиозных споров типа "ХХХ - это не
Спектрум, настоящий Спектрум - это 128K+AY
+TR-DOS, а всё,что сверх этого, - ересь!".
Да,Спектрум сам по себе - андеграундная
ретро-машина исключительно для любителей
старины и ностальгически "вспомнить детст─
во". Однако виды такой ностальгии и увле─
чения стариной могут быть самыми разными.
И что делать тем, для которых предмет нос─
тальгии - это полноценно РАБОТАТЬ за ПОЛ─
НОЦЕННЫМ 8-битным компьютером? Что может
предложить им Спектрум-ПРИСТАВКА? Те же
коллекции сотен дискет, ограниченных убо─
гой керналью TR-DOS и 6ЧOКБ флопика. Выход
в свет ZX-Vega - это последняя точка де─
градации, когда Спекки лишили даже послед─
него атрибута персонального компьютера -
его клавиатуры. И пусть есть достаточное
количество "геймеров" - пусть себе радуют─
ся, никто не запрещает. Но статья написана
для совсем других людей - спектрумистов-
компьютерщиков. А для таких людей, которых
вполне достаточное количество, вопрос об
универсальной программной среде, иными
словами - операционной системы - никуда не
делся, а только со временем становился все
острее. Ведь какой смысл в рамках 6ЧOКБ
мечтать о разработке графической оконной
среды? О многозадачности? Нет, тут нужна
полноценная ОС как база, пусть пока и не─
совершенная, но позволяющая на её основе
дальше разрабатывать и развивать софт, а
не просто писать для ностальгических утех
очередные демки и игрушки.
А между тем, эта операционная система
есть. Точнее - никуда не девалась. Ибо ОС
iS-DOS выжила. Более того, для двух клонов
Спектрума она в прошлом и настоящем сумела
как раз стать основной, используемой "по
умолчанию" - это KAY-1024 + HDD, ныне поч─
ти "вымерший", и возрождённый в середине
2000-х годов ATM-turbo 2+, где iS-DOS по─
лучила своё второе дыхание в виде новой
реинкарнации OS TASiS. KAY как клон уже
практически ушёл в прошлое, а вот ATM -
жив и производится до сих пор как собст─
венно в классическом варианте, так и в ви─
де дальнейшего развития в рамках ZX
Evolution/Baseconf. Правда, стандартный
дистрибутив TASiS на ZX Evo пока что можно
запустить только с дискеты, так как из-за
иного стандарта контроллера IDE и своих
особенностей в ПЗУ для установки системы
на винт требуется переделка драйверов и
автозагрузчика с винта. Но я, как один из
разработчиков софта под iS-DOS и соавтор
TASiS, могу уверенно сказать, что данная
работа в ближайшем будущем будет сделана.
Кстати, раз уж был упомянут ZX
Evolution/Baseconf, то там в последнее
время наметились положительные сдвиги в
сторону "компьютеризации" - адаптирована
штатная ATM-версия CP/M, ведутся работы по
переносу не много не мало, а самой
MSX-DOS2. И за ОС TASiS дело не заржавеет.
К слову, CP/M тоже достойная система, и
программированию под неё обязательно надо
будет вернуться в одной из следующих ста─
тей. А пока замечу, что у iS-DOS/TASiS
есть одно неоспоримое преимущество - эта
система была написана специально на Спект─
руме и для Спектрумистов. В ней нет ка─
ких-то "международных" устоявшихся станда─
ртов, без нарушения которых невозможно её
дальнейшее развитие.
Поэтому в рамках данной статьи я оста─
новлюсь на азах программирования под ОС
iS-DOS и прежде всего под её современную
версию под ATM-совместимые машины - ОС
TASiS, делая при необходимости отдельные
уточнения по поводу того, является ли ка─
кая-то функция общей для всех iS-DOS или
только для TASiS (как более продвинутой
системы, совместимой "сверху вниз").
О стереотипах и фобиях
написания программ под новую систему
Прежде чем приступить к конкретным при─
мерам,необходимо остановиться на стандарт─
ных фобиях и предубеждениях по поводу про─
граммирования под Систему тех, кто всю
жизнь писал программы исключительное в
среде TR-DOS (а таких подавляющее большин─
ство), а теперь ему придется учитывать ес─
тественные для любой настоящей Системы
"великие и ужасные" Правила и Соглашения.
Ниже я постараюсь показать, что не так
страшен чёрт, как его малюют.
Какие у нас, если не брать всякие особо
вычурные случаи, есть правила при работе в
TR-DOS? Да практически никаких. Помимо си─
стемных переменных бейсика, которые лучше
не затирать, дополнительно надо помнить
лишь о 112 байтах системных переменных
TR-DOS. Ну, ещё за стеком следить - лучше
опустить его прямо в бейсик-загрузчике ко─
мандой CLEAR перед загружаемым блоком ко─
дов, хотя и это опционально, но если вы
используете переключение страниц через
порт #7FFD,то весьма желательно. При опре─
делённых условиях следует проявлять осто─
рожность в играх с режимами прерываний,
регистрами I, IY и HL'. И всё. А в осталь─
ном - полная свобода:грузи блоки кода куда
угодно и располагай их в каких угодно про─
межутках адресного пространства,а сама ис─
полняемая программа затем может изменять
какие угодно ячейки памяти, используя их
как свои переменные, и т.д...
Да, к этой свободе использовать адрес─
ное пространство процессора как угодно
быстро привыкаешь, и в дальнейшем любое
предположение, что придется учитывать на─
личие в памяти ещё чего-то (а ведь совер─
шенно верно - ядро iS-DOS находится именно
в основном адресном пространстве), сразу
вызывает отторжение и мысли типа "нет, так
мы не договаривались!". Это фобия -
по-другому её не назовешь. И она порождает
ряд стереотипов по iS-DOS, основные из ко─
торых, относящиеся к тематике статьи - это
то, что "iS-DOS рассчитана на 48К ОЗУ, за─
нимает в нём кучу места, и свободного про─
странства остается совсем немного, так что
ничего серьёзного не напишешь". Разрушению
данных стереотипов я и посвящаю данную
статью.
Я не буду грузить читателя тоннами
информации по всем рестартам и режимам си─
стемы. Я разберу лишь несколько примеров,
как человеку, привыкшему к "вольнице в
ОЗУ" без лишних проблем средствами систе─
мы загрузить и запустить... нет, не мале─
нькую системную программку, написанную из─
начально под iS-DOS (а значит, и с учетом
всех правил и соглашений), а исполняемый
блок кодов игрушки (написанной как угодно,
без учета системы - всё равно наша ОС кон─
сольная и с графикой работать не умеет), а
потом столь же безболезненно вернуться об─
ратно в оболочку системы, туда, откуда и
пришёл - точно так, как на "больших маши─
нах" с MS-DOS или виндой.
Для этого разберём только базовые прин─
ципы работы и размещения системы и самые
необходимые для загрузки кода и конфигури─
рования ОС рестарты. Если моя цель будет
достигнута и читатель на приведённых при─
мерах избавится от предрассудков в отноше─
нии iS-DOS, то опираясь на полученную ин─
формацию, он уже сам легко сможет освоить
все остальные глубины возможностей работы
с этой ОС - благо iS-DOS очень хорошо и
подробно документирована.
В процессе описания примеров будет под─
разумеваться, что у вас современный Спекки
с ОЗУ больше 128 КБ - ATM Turbo 2(+) или
его реализация в ZX-Evolution/BaseConf, с
ОС TASiS или, на худой конец, iS-DOS Chic
(что будет оговариваться отдельно).
Распределение памяти в iS-DOS Classic,
Chic, Chic-ATM, TASiS
Итак, как устроена любая iS-DOS? Распо─
лагается она в основном адресном простран─
стве.Её ядро растет сверху вниз,начиная от
адреса #FFFF и до конкретной конечной точ─
ки, которая может сдвигаться выше или ни─
же, в зависимости от количества загружен─
ных драйверов, уровней и проч. А именно:
В самом адресе #FFFF и десятке байт ни─
же расположен первичныйобработчик преры─
ваний IM 2,вся работа которого заключается
в переходе на штатный системный обработ─
чик. Сразу под ним несколько сотен байт
свободного пространства,зарезервированного
под "свободно плавающий" по немустек, за─
тем последовательно,один под другим в сто─
рону уменьшения адресов в памяти,следуют5
(из восьми теоретически возможных)штатных
уровней ядра - от нулевого до четвёртого,
вместе с их наборами системных переменных.
Расположение этих уровней фиксировано для
конкретного типа системы и версии её ядра
- на какой адрес они скомпилированы, так
неизменно и будут располагаться. Три оста─
вшихся возможных пользовательских уровня
(используются некоторыми программами, под─
соединяющими их на время своей работы) в
любом случае будут добавляться ниже. А под
этими пятью фиксированными уровнями идёт
область с плавающими размерами - сразу под
уровнями идёт область резидентов, фоновых
задач и драйверов (которые все так или
иначе являются подвидами резидентов) и в
зависимости от количества подсоединённых
резидентов или раздувается дальше вниз,
или, при удалении их, растёт вверх. Ниже
этой области идётобласть каналов, которую
также можно увеличить или уменьшить. А под
ней -область КЭШа блочных устройств,также
колеблющаяся от минимума в 6 блоков по 256
байт (плюс по 4 байта заголовка на каждый
блок) до стольких, сколько хватит памяти.
А уже от нижней границы КЭШа и дальше вниз
идёт область программ пользователя, куда
можно грузить всё, что вздумается.
Запускаемая программа пользователя,име─
ющая,по аналогии с MS-DOS или CP/M, расши─
рение .COM, в отличие от этих систем,у ко─
торых есть единый физический адрес запуска
#0100, может,как и в TR-DOS, быть откомпи─
лирована и запущена с ЛЮБОГО адреса.
По аналогии с TR-DOS в описателе файлов
зарезервирована пара байт под адрес загру─
зки и запуска (что создаёт много проблем
при прямом переносе запускаемых файлов из
MS-DOS, так как эти два байта при копиро─
вании в FAT теряются,как и байты контроль─
ной суммы - кстати, и их надо восстанавли─
вать вручную в редакторе атрибутов файла).
Если при попытке запустить программу поль─
зователя средствами системы из оболочки
"хвост" файла залезет в системные области
(КЭШ и выше), то система откажется от за─
грузки и обругает ошибкой 130 (нехватка
памяти). И тогда придётся освобождать мес─
то, уменьшая или размер КЭШа, или размер
области каналов, или удаляя лишние резиде─
нты. Подзагружая данные уже из самой прог─
раммы, можно средствами системы узнать ни─
жнюю границу КЭШа для принятия решения о
выдаче ошибки или продолжении работы, а
также регулировать в разумных пределах его
размеры. Подробнее это будет описано в со─
ответствующей части статьи.
Большинство исполняемых файлов под
"обычные" версии iS-DOS, тем не менее, от─
компилированы под адрес 24000 (реже ниже,
иногда - 25000, выше тоже редко). В таких
версиях определённая нижняя граница загру─
зки запускаемых файлов - это область сис─
темных переменных бейсика и TR-DOS (распо─
лагающихся с адреса 23552 по 23866). Сама
система в переменных по большому счёту не
нуждается, кроме двух исключений:
Во-первых, дело в том,что все обращения
в систему (любой версии) происходят через
единую точку вызова - по команде RST #10,
при этом в регистре C содержится номер фу─
нкции, а в других регистрах - дополнитель─
ные параметры. В случае iS-DOS Classic по
адресу #0010 располагается подпрограмма
ПЗУ с Бейсиком-48, которая передаёт управ─
ление подпрограмме вывода в канал (адрес
её лежит в описателе, адресованном систем─
ной переменной для текущего потока ввода-
вывода). В нашем случае - подпрограмме вы─
зова процедуры из ядра (её номер в рег.C).
А во-вторых, некоторые системные пере─
менные TR-DOS могут использоваться драйве─
ром FDD, если он обращается при работе с
контроллером ВГ93 к процедурам ПЗУ TR-DOS.
Есть ещё 256 свободных байт в области
лежащего сразу под областью переменных
бейсика буфера принтера (с адреса 23296 по
23551), который системой не используется.
Этот буфер тоже можно использовать под не─
большие программки, что иногда и делается.
А ниже идут 6912 байт экрана и, в случае с
iS-DOS Classic, ПЗУ бейсика.
Сколько же в итоге мы имеем пространст─
ва для программы пользователя?
Ядро iS-DOS, как уже упоминалось, может
менять свои размеры, однако средние его
размеры колеблются в районе 22-24 КБ. Ещё
примерно 24 КБ (16 КБ ПЗУ + 8 КБ экрана и
системных переменных) недоступно снизу.
Итого непрерывного пространства в основной
памяти на программу пользователя в iS-DOS
Classic остаётся порядка 15-18 КБ.Негусто.
Однако Classic - устаревшая система, рас─
считанная на машины с 48 КБ памяти, либо
версии Спектрума-128К с неотключаемым ПЗУ.
Другая картина - в iS-DOS Chic.Основное
различие с Classic в том, что она рассчи─
тана на работу с машинами, которые позво─
ляют вместо ПЗУ включать по адресу #0000
страницу ОЗУ. Для этой цели было переписа─
но и перекомпилировано ядро: все неизменя─
емые процедуры штатных пяти его уровней
перенесены в блок, загружаемый в страницу,
включаемую вместо ПЗУ, а вверху остались
только системные переменные,да адреса про─
цедур перехода в "нижнюю" страницу ОЗУ.
Это, даже с учетом оставшихся областей ре─
зидентов, каналов и КЭШа, сократило размер
"верхней" части ядра до 8-10 КБ, а это уже
даёт свободное пространство почти 30 КБ.
Кроме того, для обработки RST #10 уже не
нужны системные переменные бейсика - про─
цедура обработки вызова уже присутствует в
подключаемой внизу странице ОЗУ.
Ещё лучше со свободной памятью в АТМ-
версии iS-DOS Chic - драйвера FDD в этой
системе используют возможности железа это─
го клона по прямому доступу к портам ВГ93,
так что отпадает необходимость и в систем─
ных переменных TR-DOS, что позволяет гру─
зить полноценные программы сразу после эк─
рана,начиная с 23296,что даёт нам примерно
700 дополнительных байт.В TASiS,основанной
на АТМ-Chic, штатно используется не стан─
дартный экран, а текстовая консоль, к тому
же располагающаяся в альтернативной видео─
странице (в порту #7FFD бит D3=1). В итоге
6912 байт из области стандартного экрана
также можно использовать под программы
пользователя, начиная их с адреса #4000 -
это увеличивает "пользовательскую" область
до 38-40 КБ. В перспективе в новых версиях
TASiS будет возможно подключать внизу и
иные пользовательские страницы ОЗУ, что
увеличит пространство ещё примерно на 15
КБ - до 53-55 КБ.
iS-DOS Classic просто грузит себя в не─
изменное адресное пространство процессора
Z80 (на 128К - в стандартную конфигурацию,
где с #0000 лежит ПЗУ BASICЧ8, с #4000 -
страница 5, с #8000 - страница 2,а с #C000
для ядра включена страница 0; программы
пользователя,например,копировщики или дра─
йвера ОЗУ, могут включать и иные страницы,
но вне рамок работы с вызовами системы).
iS-DOS с версии Chic использует пере─
конфигурирование адресного пространства. И
эта смена конфигурации различна для разных
типов машин в зависимости от использован─
ного в них способа включения ОЗУ в нижней
части адресного пространства. Правда, обы─
чно конфигурация устанавливается раз и на─
всегда и в штатных программах системы не
используется. Однако бывают исключения,
прежде всего в драйверах - когда надо, к
примеру, отключить ОЗУ, чтобы добраться до
подпрограмм TR-DOS. И в этом случае надо
понимать, на какой машине запущена система
и как менять конфигурацию. Система позво─
ляет программно это узнать. Но о способах
реконфигурации далее. А сначала о самой
структуре адресного пространства в iS-DOS
Chic и TASiS.
Если запустить iS-DOS Classic на 128K
машинах, то ядро системы в верхней части
(от адреса #FFFF) будет располагаться в
ОЗУ в странице 0. Но в случае с Chic всё
несколько по-другому. На компьютерах
KAY-256/1024 при отключении ПЗУ внизу
включается как раз страница 0, куда гру─
зится неизменяемая часть ядра. Поэтому
оставшаяся часть ядра с переменными, рези─
дентами и КЭШем записывается в страницу 8,
которая включается по адресу #C000 - по
сути, для порта #7FFD и для софта, в том
числе использующего страницу 128K ОЗУ,
подмена совершенно "прозрачная". Также эта
схема работает и на всех вариантах PROFI.
Отдельно стоит тут упомянуть версию Chic
для клонов Scorpion. В них в странице RAM8
сидит часть теневого монитора,поэтому ядро
перенесено в страницу RAM #0D, что сказа─
лось на совместимости с несколькими 128К-
утилитами, потребовавшими коррекции таблиц
использующихся в них страниц.Но эту версию
следует рассматривать как исключение.
В целом же при такой схеме расположения
ядра система Chic рассчитана на машины с
минимумом 25бКБ ОЗУ. 128КБ ОЗУ достаточно
на спектрумах с отдельным напаянным 1бКБ
статическим ОЗУ-"кэшем" или, как самый
экзотический вариант, - с прошитой в ПЗУ
неизменяемой частью ядра.
Немного другая схема применена в систе─
мах для ATM-turbo 2+ - как в iS-DOS Chic,
так и в TASiS. На этом клоне, как правило,
минимум ОЗУ - 512КБ, а то и все 102ЧКБ, и
система изначально рассчитывает на их на─
личие.Также особенностью данных клонов яв─
ляется наличие полноценного диспетчера па─
мяти, позволяющего включать любую страницу
ОЗУ или ПЗУ в любую четверть адресного
пространства, причём имеется две независи─
мые программируемые карты памяти - для
BASЧ8 (D4 порта #7FFD, далее "ROM2", =1) и
для BAS128 (ROM2=0). Другими словами, в
этом клоне отключение ПЗУ не ограничивает─
ся страницей ОЗУ 0. Мы можем включить в
нижнюю область что угодно, причём отдельно
вместо ПЗУ BASICЧ8 и ПЗУ BASIC128. Этим и
пользуются Chic с TASiS. Верхняя часть яд─
ра остается в странице ОЗУ 0, а в нижней
части включается страница ОЗУ #1D (из об─
ласти в конце первых 512КБ ОЗУ, в одной из
страниц, используемых специальным резиден─
том из ПЗУ машины). Причем включается он
вместо ПЗУ BASIC-128, а BASIC-48 остается
на месте. И в итоге оперативная смена кон─
фигурации для доступа, к примеру, к портам
TR-DOS (через область #ЗDxx бейсика-48)
происходит через вывод байта в порт #7FFD:
для iS-DOS Chic значение #00 для отключе─
ния ПЗУ и #10 для его включения.А в TASiS,
где для вывода текста используется альтер─
нативная видеостраница (в порту #7FFD сиг─
нал D3=1 - далее SCR2), эти значения будут
#08 и #18 соответственно.
Дополнительно созданными системными
функциями можно прозрачно менять страницы
ОЗУ и в области #4000 и #8000,а в перспек─
тивных разработках по дальнейшему развитию
TASiS планируется ещё шире использовать
возможности диспетчера памяти и подключать
дополнительные модули с библиотеками функ─
ций в область #0000 в иные страницы ОЗУ,
подменяя временно страницу #1D со штатным
ядром системы. Но это тема для отдельной
статьи.
В качестве подведения итогов варианты
конфигурации ОЗУ в iS-DOS можно предста─
вить в виде таблички:
│Classic│ Chic │ChicATM│ TASiS
Порт │ │ #1FFD │ │
конфи-│ нет (KAY/Scorp)#7FFD │ #7FFD
гурир-я│ │ #DFFD │ │
│ │(PROFI)│ │
ROM2= │ 1(B48)│ 1(B48) │0(B128)│ 0(B128)
SCR2= │ 0 │ 0 │ 0 │ 1
CPUЗ= │RAM#00*│RAM#08**│ RAM#00│ RAM#00
│(ядро │(ядро системы,и в остатке
системы)│область прог.пользователя)
CPU2= │RAM#02 │ RAM#02 │ RAM#02│RAM#02***
(частично│ │ │
ядро сис.,│ (область программ
обл.прог.│ пользователя)
польз-ля)│ │ │
CPU1= │RAM#05 │ RAM#05 │RAM#05 │RAM#05***
│ (обл.прог.польз-ля, (обл.прог.
│ сис.переменные │польз-ля)
│ BASЧ8/TR-DOS,экран) │
CPUO= │BASICЧ8│ RAM#00 │RAM#1D │RAM#1D***
Примечания:
"*" - без использования программ, обращаю─
щихся к порту #7FFD (таких немного), стра─
ница может быть любая, кроме 2 и 5.
"**" - для скорпионовской версии Chic-ZS
это страница RAM #0D.
"***" - средствами системы в программах
пользователя временно могут устанавливать─
ся и другие страницы, но штатными при ра─
боте из оболочки являются именно эти и
только эти значения.
Прерывания и стек
в iS-DOS Classic, Chic, Chic-ATM, TASiS.
Определение типа системы
Одна из важных процедур в любой системе
- это обработка прерываний. В iS-DOS для
этого используется режим IM 2. Система его
обработки устроена по методу, описанному
Николаем Родионовым в книге "ZX Spectrum и
TR-DOS для пользователей и программистов":
вектор прерывания устанавливается таким
образом, чтобы считанный адрес процедуры
обработки прерываний был равен #FFFF, т.е.
располагался в самом конце адресного про─
странства. А там вставлен код #18 (команда
JR xxxx - безусловный переход). Следующий
байт команды считывается из адреса #0000,а
там, что в ПЗУ BASIC-48 в iS-DOS Classic,
что в странице ОЗУ в Chic/TASiS, распола─
гается байт #F3. В итоге сочетание байтов
#18 и #F3 даёт нам команду JR #FFFЧ, где
расположена 11-байтная процедурка первич─
ного сохранения регистров и передачи упра─
вления основной процедуре обработки преры─
ваний в теле ядра. Это действительно для
всех версий ядра. А вот что различается -
так это регистр I, т.е. вектор прерываний.
Его значения в зависимости от типа системы
следующие:
iS-DOS Classic: I = #3B
iS-DOS Chic (любой): I = #06
TASiS: I = #00
Исходя из этого, опрос значения вектора
прерываний является самой простой первич─
ной процедурой определения типа системы
(хотя ничего не мешает резидентам и прог─
раммам пользователя временно записывать
туда иное значение и перехватывать обрабо─
тку прерываний на себя - но это уже из
раздела "хитростей", которые не являются
темой данной статьи), примерно так:
systyp LD A,I
OR A;CP #00
JR Z,tasis;мы находимся в ОС TASiS
CP #06
JR Z,chic;...в ОС iS-DOS Chic
CP #3B
JR Z,class;...в ОС iS-DOS Classic
JP unknown;тип системы неопределён
Определив, что мы находимся в iS-DOS
Chic, нам может потребоваться дополнитель─
ное определение типа машины,ибо,как мы уже
говорили, в зависимости от этого типа раз─
личаются и способы реконфигурирования ад─
ресного пространства. А для этого в iS-DOS
Chic существует состоящий из 5 байт и рас─
положенный по адресу #OOFA т. н. "вектор
системы":
#OOFA(1 байт)- содержимое страничного
порта #7FFD при штатной работе
#OOFB(1 байт)- содержимое порта конфигу─
рации для включения ПЗУ
#OOFC(1 байт)- содержимое порта конфигу─
рации для включения ОЗУ
#OOFD(2 байта)- номер порта конфигурации
Этот "вектор системы" существует и в
TASiS, но там его чтение не столь важно,
ибо если мы определили, что находимся в
этом типе системы, то это подразумевает,
что мы находимся на ATM Turbo 2(+),ZX Evo/
BaseConf или Pentagon 2.666, где способы
реконфигурирования через диспетчер памяти
одинаковы.Но для наглядности значения век─
торов системы для ATM,KAY,Scorpion и PROFI
представлены в виде таблички:
#OOFA #OOFB #OOFC #OOFD
Chic KAY #10 #10 #11 #1FFD
Chic-ZS Scorp #15 #10 #11 #1FFD
PROFI #10 #01 #11 #DFFD
Chic ATM #00 #10 #00 #7FFD
TASiS #08 #18 #08 #7FFD
Ещё для понимания работы системы необ─
ходимо рассмотреть особенности работы со
стеком.Но тут всё достаточно просто.Штатно
стек находится внутри верхней части ядра
системы, где ему выделено несколько сот
байт свободного пространства, примерно
между #F800 и #F900. При работе "чисто
iS-DOS'овских" утилит, работающих только в
основном адресном пространстве, переназна─
чать стек вообще не требуется. Но если вам
надо будет лезть в страничный порт #7FFD,
то может возникнуть необходимость его вре─
менного переназначения в тело программы
пользователя. Система переживает это пере─
назначение легко - вы также свободно може─
те использовать системные рестарты. Чтобы
вернуться в оболочку системы по команде
RET, надо будет восстановить прежнее зна─
чение стека. Если же по какой-то причине
это невозможно, то и тут не беда - можно
будет выйти в оболочку посредством неско─
льких системных рестартов вызова оболочки
SHELL системы.Они сами восстановят необхо─
димое значение стека. Но об этом в следую─
щей части.
Other articles: