Info Guide #11
05 июля 2015

Системки - iS-DOS/TASiS: о базовых принципах программирования под ОС iS-DOS/TASiS (часть 1).

        iS-DOS/TASiS
          Отвязаться от Тырдоса:
          о базовых принципах
  программирования под ОС iS-DOS/TASiS
Максим Тимонин 
(Максагор/NedoPC group) 

  Выражаю огромную благодарность создате─
лям iS-DOS - сотрудникам  фирмы Iskra-Soft
- и автору  ядра  TASiS  Юрию Корсунину за
прекрасное семейство ОС для Спектрума и за
материалы по ним,которые были использованы
при написании данной статьи.

     Зачем? Или об устаревшем TR-DOS
      и iS-DOS/TASiS как его замене

   Старожилы  Спектрума времён его расцве─
та в экс-СССР в 90-е годы помнят ту роман─
тическую  атмосферу  стремления к развитию
своей  любимой  машины - создания  удобных
инструментов работы с данными и разработки
программ, служебные  утилиты, и  прочее, и
прочее,и прочее. Делались попытки развития
как  аппаратной  части, так  и программной
среды исходя их базового восприятия Спект─
рума как пусть и не самого мощного, но КО─
МПЬЮТЕРА, как отдельной платформы, которую
можно  ВСЕСТОРОННЕ  и полноценно ИСПОЛЬЗО─
ВАТЬ. В  этой же плоскости лежали и много─
численные  попытки  написания  полноценной
операционной системы, графических интерфе─
йсов, многозадачности и прочее.
   Последнее - ОСеписание - хочу  отметить
особо  и на нем остановиться. Ведь что по─
лучалось?  Хочется  расширить  память? Вот
вам  схема  её напайки. Повысить скорость?
Вот  турбо-режим.  Улучшить  графику?  Вот
схема  напайки всяких гигаскринов и прочих
аппаратных мультиколоров. Звук? Вот вам аж
целый General Sound. И только одно ограни─
чение было не по зубам тогдашним умельцам:
какие бы навороты они ни припаивали к сво─
им Спектрумам, всё это продолжало запуска─
ться  и работать  из-под ОС TR-DOS, являю─
щейся по сути эмулятором ленточного интер─
фейса  на дисководе, с её четырьмя дискет─
ками ёмкостью  640КБ, "которых  хватит  на
всё". А  вот стало быстро не хватать, даже
с учётом скромных запросов Спекки. И я го─
ворю  не о нескольких игрушках на 2-3 дис─
кеты целиком.Просто количество софта (игр,
демок,системок) все 90-е годы росло уважа─
ющими себя темпами, а пропорционально этим
темпам  росли и ряды дискет у спекки-поль─
зователей,которые удручённо вздыхали,глядя
на "коллег" с других  машин (и ладно, если
только  пользователей IBM PC), удобно заг─
ружающихся  с винчестеров. А железячники и
рады были бы ответить на эти вздохи: "есть
решение!" - и  даже  представляли  в ответ
IDE-контроллеры, но смысла в этом было ни─
какого, ибо  новый носитель требовал новые
принципы  работы  с  ним, коренным образом
отличаясь  от  "стандартных" точек входа в
ПЗУ TR-DOS. Быстро и неизбежно возникла, в
принципе, здравая  идея эмулировать (пусть
и  с частичной потерей совместимости) дис─
кетки  в виде фалов-образов. Это на первых
порах породило такого монстра, как коллек─
ции  виртуальных  дискет, выбираемых через
сервис-монитор  клона  Scorpion  ZS  256 +
SMUC. Но это были почти "те же грабли, вид
сбоку" - пользователь  все равно был огра─
ничен  рамками 640КБ и сменяемыми (пусть и
виртуально)  дискетами. Остро  нужна  была
среда для полноценной работы с любыми вне─
шними  устройствами хранения данных. И та─
кие ОСи тоже появились.
   Это,во-первых, 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 и 640КБ флопика. Выход
в свет  ZX-Vega - это  последняя точка де─
градации, когда Спекки лишили даже послед─
него  атрибута  персонального компьютера -
его  клавиатуры. И  пусть есть достаточное
количество "геймеров" - пусть себе радуют─
ся, никто не запрещает. Но статья написана
для  совсем  других людей - спектрумистов-
компьютерщиков. А для таких людей, которых
вполне  достаточное  количество, вопрос об
универсальной   программной  среде,  иными
словами - операционной системы - никуда не
делся, а только со временем становился все
острее. Ведь  какой  смысл  в рамках 640КБ
мечтать  о  разработке графической оконной
среды? О  многозадачности? Нет, тут  нужна
полноценная  ОС как база, пусть пока и не─
совершенная, но  позволяющая  на её основе
дальше  разрабатывать  и развивать софт, а
не  просто писать для ностальгических утех
очередные демки и игрушки.
   А  между  тем, эта операционная система
есть. Точнее - никуда  не девалась. Ибо ОС
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 лежит ПЗУ BASIC48, с #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 рассчитана на машины с
минимумом  256КБ ОЗУ. 128КБ ОЗУ достаточно
на  спектрумах  с отдельным напаянным 16КБ
статическим  ОЗУ-"кэшем"  или,  как  самый
экзотический  вариант, - с прошитой  в ПЗУ
неизменяемой частью ядра.
   Немного другая схема применена в систе─
мах для ATM-turbo 2+ - как  в iS-DOS Chic,
так и в TASiS. На этом клоне, как правило,
минимум  ОЗУ - 512КБ, а то и все 1024КБ, и
система  изначально рассчитывает на их на─
личие.Также особенностью данных клонов яв─
ляется наличие полноценного диспетчера па─
мяти, позволяющего включать любую страницу
ОЗУ  или  ПЗУ  в  любую четверть адресного
пространства, причём имеется две независи─
мые   программируемые  карты  памяти - для
BAS48 (D4 порта #7FFD, далее "ROM2", =1) и
для  BAS128  (ROM2=0). Другими  словами, в
этом клоне отключение ПЗУ не ограничивает─
ся  страницей  ОЗУ  0. Мы можем включить в
нижнюю область что угодно, причём отдельно
вместо  ПЗУ BASIC48 и ПЗУ BASIC128. Этим и
пользуются Chic с TASiS. Верхняя часть яд─
ра  остается  в странице ОЗУ 0, а в нижней
части  включается страница ОЗУ #1D (из об─
ласти в конце первых 512КБ ОЗУ, в одной из
страниц, используемых специальным резиден─
том  из  ПЗУ машины). Причем включается он
вместо  ПЗУ BASIC-128, а BASIC-48 остается
на месте. И в итоге оперативная смена кон─
фигурации для доступа, к примеру, к портам
TR-DOS  (через  область  #3Dxx бейсика-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 
CPU3= │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*** 
       │  (обл.прог.польз-ля,   (обл.прог.
       │    сис.переменные      │польз-ля)
       │  BAS48/TR-DOS,экран)   │
CPU0= │BASIC48│ 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 #FFF4, где
расположена  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 байт и рас─
положенный  по  адресу #00FA т. н. "вектор
системы":
#00FA(1 байт)- содержимое страничного
            порта #7FFD при штатной работе
#00FB(1 байт)- содержимое порта конфигу─
            рации для включения ПЗУ
#00FC(1 байт)- содержимое порта конфигу─
            рации для включения ОЗУ
#00FD(2 байта)- номер порта конфигурации
   Этот  "вектор  системы"  существует и в
TASiS, но  там  его чтение не столь важно,
ибо  если  мы  определили, что находимся в
этом  типе  системы, то это подразумевает,
что мы находимся на ATM Turbo 2(+),ZX Evo/
BaseConf  или  Pentagon 2.666, где способы
реконфигурирования  через диспетчер памяти
одинаковы.Но для наглядности значения век─
торов системы для ATM,KAY,Scorpion и PROFI
представлены в виде таблички:
               #00FA  #00FB  #00FC  #00FD
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 системы.Они сами восстановят необхо─
димое значение стека. Но об этом в следую─
щей части.



Другие статьи номера:

Об оболочке - журнал состоит из разделов, а разделы из статей.

От авторов - предисловие: Прошло 8 лет с момента выхода прошлого номера Info Guide. Что изменилось на Спектруме за это время?

Комьюнити - Spectrum в глубинке: в городе, население которого не превышает 15 тысяч человек, появление компьютера было сравнимо с изготовлением атомной бомбы в гараже.

Комьюнити - Forever 2015: отчет с демопати для всех 8-битных компьютеров.

Комьюнити - DiHalt 2015: отзывы от Lilka и Louisa.

Комьюнити - Как это было в Бразилии: история развития Спектрума в Бразилии от Paulo Silva.

Комьюнити - Беседа с Tiboh/Debris - программистом из Красноярска, долгие годы занимавшимся обработкой архивов спектрумовских программ.

Комьюнити - интервью с Raver/Phantasy взятое на irc.forestnet.org

Code - Этюды: Вызов функции по номеру, Поиск текста по номеру, Определение наличия музыкального сопроцессора, Установка пикселя на ATM Turbo 2, Библиотеки процедур в ALASM, Короткий генератор случайных чисел, Ускорение LD:PUSH.

Code - точка зрения: проекция пространства на экран из одной точки.

Code - чанковый эффект: Magnets stretching

Code - О мерцающем бордере: использование мерцание для повышения разрешения на бордере.

Code - Скриптование в демо: синхронизация эффектов под музыку и не только.

Графика - режиссура в демо: палитра изобразительных средств в Демомейкинге.

Графика - Мини-опрос художников: Dimidrol, Einar Saukas, Sand, Rion, riskej.

Графика - интервью с художником RayNoa/MAYhEM.

Музыка - Синхронизация музыки: nq рассказывает о создании треков под таймлайн.

Музыка - Беседа с MmcM/Sage group, известным AY-музыкантом, о его знаменитой технике.

Музыка - Беседа с Manwe/SandS - известным композитором, одним из старейших демосценеров России.

Музыка - Однобитная музыка: почему бипер ZX Spectrum продолжает вызывать восхищение?

Музыка - Горизонты турбосаунда: Cj Splinter делится опытом работы с TurboSound.

Музыка - Снова о плейерах Pro Tracker 3.x

Музыка - Музыкальный движок Muse 128b.

Системки - Как приручить IAR C Compiler.

Системки - Оберон для ZX Spectrum: Тонкости при разработке на Обероне в среде ZXDev (часть 1).

Системки - Оберон и ассемблер: Сопряжение с ассемблером (часть 2).

Системки - ZX-Basic Compiler: расширяемый кросс-компилятор.

Системки - Программы с поддержкой HDD, или "Linux" для Спектрума с винтом (или SD-картой).

Системки - iS-DOS/TASiS: о базовых принципах программирования под ОС iS-DOS/TASiS (часть 1).

Системки - iS-DOS/TASiS: как писать игры под iS-DOS/TASiS (часть 2).

Системки - iS-DOS/TASiS: Работа с палитрой и переключение графических режимов в TASiS (часть 3).

Металлолом - о строении экрана 6912 с аппаратной точки зрения.

Металлолом - Палитра для ZX Spectrum в различных графических режимах.

Металлолом - Эмуляция контроллера дисковода 1818ВГ93.

Дикий ум - Генерация и оптимизация кода в компилятора (часть 1)

Дикий ум - Генерация и оптимизация кода в компилятора (часть 2).

Дикий ум - ловля багов: самые типичные ошибки, при разработке на ассемблере Z80 (часть 1).

Дикий ум - ловля багов: самые типичные ошибки, при разработке на ассемблере Z80 (часть 2).

Дикий ум - алгоритм сжатия видео - 16 цветов на точку.

Игрушки - Разработка игр на Evo SDK (часть 1).

Игрушки - Разработка игр на Evo SDK (часть 2).

Игрушки - секрет успеха игры Jet Set Willy выпущенной в 1984 году.

Игрушки - Metal Man Reloaded: История создания от Oleg Origin.

Игрушки - Строение скриптового движка игры на примере L7 script engine.

Мыльница - Секретные кнопки в играх: Project ROBO, Ninjajar!, Uwol, Quest for Money, Zooming Secretary, Game About Squares.

Мыльница - письма: Kq, elfh, mig'95, wbr^NOT-Soft.

Мыльница - errata: Работа над ошибками.

Мыльница - об авторах журнала.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Anigdot №24 - Ну-ка все вместе, догодайтесь с чем я вас шас поздравлять буду мужеки.
Hardware - Чтение портa #7FFD нa Kворуме.
Про кровь - группа крови - задачка для психологов.

В этот день...   19 июля