05 июля 2015 |
|
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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November