Москва 2006
 

1.ОГЛАВЛЕНИЕ

1.ОГЛАВЛЕНИЕ.. - 2 -

2.ПРЕДИСЛОВИЕ.. - 3 -

3.Описание прошивки eXtra BIOS v1.32LE/1.36XT.. - 4 -

Общие сведения: - 4 -

Значение страниц в стандартной прошивке. - 5 -

Значение страниц в xBIOS v1.32LE. - 5 -

Значение страниц в xBIOS v1.36XT. - 6 -

Описание основной (верхней) половины, используемой по умолчанию: - 6 -

Описание дополнительной (нижней) половины, вызываемой через ROM-trigger или через стартовое меню. - 7 -

4.Описание стартового меню eXtra BIOS v1.32LE/1.36XT.. - 9 -

Стартовое меню eXtra BIOS 1.32LE. - 9 -

Стартовое меню eXtra BIOS 1.36XT (Setup Utility v1.1) - 10 -

Описание низкоуровневых резидентных сервисов.. - 12 -

5.Описание команд BIOS vTR-DOS 2.4LE/XT.. - 13 -

Общая информация о функционировании vTR-DOS. - 13 -

Точки входа в керналь: - 13 -

set_Hardware_init (инициализация оборудования) - 14 -

get_hardware_version (получение информации об установленном оборудовании) - 15 -

set_vtrd_mount (монтирование виртуального диска на "букву") - 16 -

get_vtrd_mount (получение информации о статусе и монтировании виртуального диска) - 16 -

set_vtrd_map (замена/восстановление стандартной разводки памяти под RAM-диск) - 16 -

get_vtrd_map (получение в буфер текущей карты разводки памяти) - 17 -

set_page_hook (Установка/удаление обработчика обращений к недействительным страницам) - 18 -

get_page_hook (получить информацию о том, установлены ли обработчики ввода/вывода из недействительных страниц) - 19 -

set_nmi_hook (установка/удаление обработчика нажатия клавиши magic) - 19 -

get_nmi_hook (получение статуса обработчика nmi) - 20 -

set_reset_hook (установка перехватчика нажатия клавиши RESET и инициализации vTR-DOS) - 20 -

get_reset_hook (получение сведений об установленном перехватчике reset/инициализации) - 20 -

set_flag (установка флагов) - 21 -

get_flag (получение состояния флагов) - 21 -

set_io_hook (установка/удаление перехватчика доступа к расширенным портам) - 21 -

get_io_hook (получение инфромации об установленном перехватчике обращений к расширенным портам) - 22 -

ПРИЛОЖЕНИЕ 1: Изменения в процедуре проверки наличия INTERFACE 1. - 23 -

ПРИЛОЖЕНИЕ 2: Структура ОЗУ ATM-turbo 2+ по умолчанию, с установленной прошивкой xBIOS. - 24 -

ПРИЛОЖЕНИЕ 3: Краткая информация о структуре страницы 0x38. - 25 -

ПРИЛОЖЕНИЕ 4: Работа xBIOS v1.36XT с ПЗУ объемом более 128Кб. - 25 -

ПРИЛОЖЕНИЕ 5: Работа с резидентом в xBIOS v1.32LE/1.36XT.. - 28 -

Понятие резидента.. - 28 -

Структура резидентной страницы... - 28 -

ПРИЛОЖЕНИЕ 6: Адаптация HONEY-Commander v4.00 для работы с xBIOS. - 30 -

ПРИЛОЖЕНИЕ 7: Адреса и функции процедур загрузчика с CD-ROM. - 30 -

История версий vTR-DOS. - 32 -

Наши адреса.. - 34 -

 


2.ПРЕДИСЛОВИЕ

 

NedoPC group рада с гордостью представить вам плод многолетнего труда по совершенствованию ПЗУ ПК TURBO 2+. Работа над новой прошивкой была начата еще в далеком 2001 году, когда самой нашей группы еще не существовало, а ее нынешние члены даже не были друг с другом знакомы. Данная прошивка – плод совместных усилий множества активных пользователей ATM и просто спектрумистов. Изначально совершенствование прошивки задумывалось с целью так изменить TR-DOS, чтобы заставить его «прозрачно» для основного множества программ работать с винчестером, чтобы сотни дискет можно было бы заменить на коллекцию образов на жестком диске.

 

Позднее эта идея была признана нерациональной и была выдвинута новая концепция эмуляции контроллера дисковода 1818ВГ93 при работе с верхней памятью, то есть с виртуальной дискетой, с RAM-диском. А образы в RAM-диск можно загружать и с винчестера, и вообще с любого другого внешнего устройства. Так что, по новой концепции, прошивка стала более универсальной.

 

Новая концепция, однако, потребовала и более рациональной организации имеющегося в наличии объема ОЗУ и ПЗУ, а также организации доступа к расширенным возможностям ATM (диспетчер памяти, «скрытые» порты и т.д.). В результате работа затянулась, но все же, вопреки всему, была доведена до успешного завершения к концу июля 2005 года.

 

Однако, несмотря на выход прошивки, ее потенциал намного больше реализованных возможностей. Например, заложена возможность увеличения ПЗУ вплоть до 1024Кб. Это означает, что работа над прошивкой вполне вероятно будет продолжена. Но новые версии теперь будут опираться на созданную в данной прошивке базу, и будут обязательно совместимыми с версией v1.32 сверху вниз (текущая версия – v1.36XT).

 

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

 

Maksagor/NedoPC group - Автор идеи о разработке нового ПЗУ. Организатор работы и ее

информационного обеспечения. Соразработчик

первоначальной концепции. Автор ROM-trigger и

адаптации BIOS CP/M для работы с ПЗУ, большим, чем 64Кб.

Соавтор кернали vTR-DOS. Осуществил окончательную

сборку xBIOS. Бетатестер.

 

TiM0N/AREAsoft - Активный соразработчик первоначальной концепции.

Информационное обеспечение. Автор процедур работы с

винчестером. В дальнейшем отошел от активной работы.

 

ukms[z] - Автор новой концепции эмуляции1818ВГ93 в верхней памяти

ПК. Создатель на ее основе vTR-DOS – основного ядра xBIOS, без которого эта прошивка была бы невозможна. Взвалил на себя больше 90% всей «кодерской» работы. Соавтор кернали vTR-DOS.

 

Корсунин Юрий - Автор загрузчика iS-DOS с жесткого диска и адаптация

BASIC-128 и TR-DOS для его вызова. Бетатестер.

 

SMT - Автор эмулятора Спектрума UNREAL SPECCY с поддержкой

эмуляции ПК ATM-turbo 2+. Благодаря данному эмулятору работа значительно ускорилась. Принимал участие в окончательной отладке и сборке xBIOS. Бетатестер.


3.Описание прошивки eXtra BIOS v1.32LE/1.36XT

Общие сведения:

 

Новая прошивка eXtra BIOS v1.36 по сравнению со стандартной имеет целый ряд преимуществ и новшеств и бывает двух типов:

 

xBIOS v1.32 LE (Light Edition) – облегченный вариант xBIOS. Рассчитан на 64Кб ROM и сделан специально для тех, у кого нет возможности или средств раздобыть более объемную ПЗУ, зато стандартная ПЗУ так или иначе в наличии имеется, и ее можно перешить. В нем реализованы основные функции эмуляции ВГ93 и контроля за диспетчером памяти, однако из-за нехватки места упрощено стартовое меню, а также не реализована возможность подключения дополнительных внешних модулей (плагинов). Кроме того, развитие данной прошивки остановлено. Все дальнейшие версии будут выходить под маркой XT(eXTended) под ПЗУ объемом не менее 128Кб.

 

Системные требования: ROM 64Кб only, RAM – не меньше 1024Кб!!!

 

xBIOS v1.36 XT (eXTended) – рассчитана на (как минимум) вдвое больший объем ПЗУ против стандартного. Это позволило реализовать с ней намного больше разнообразных функций, которые будут описаны ниже, а также создать удобное интерактивное меню. Кроме того, еще осталось значительное количество свободного места, зарезервированного для дальнейшего развития прошивки, путем подключения дополнительных модулей.

 

Системные требования: ROM от 128Кб - до 1024Кб, RAM – не меньше 1024Кб!!!

 

В сравнении со стандартной прошивкой LE/XT-версии xBIOS выглядит так:

Рисунок 1

Значение страниц в стандартной прошивке

 

BASIC 48 (0x0000 - 0x3FFF) – стандартный бейсик для 48Кб с исправленной ошибкой обработки NMI.

 

TR-DOS v5.03 (0x4000 - 0x7FFF) – ОС TR-DOS v5.03 со вставленными в свободное место стартовым меню CP/M и обработчиком резидента.

 

BASIC 128 (0x8000 - 0xBFFF) – расширение стандартного бейсика для 128Кб

 

BIOS 1.07.1x для CP/M v2.2 (0xC000 - 0xFFFF) – стандартная для ATM-turbo 2+ ОС CP/M v2.2. Именно с этой страницы стартует компьютер после RESET.

 

Прошивка бывает нескольких версий:

 

Версия BIOS 1.07.12, (вообще-то, изредка может попасться и старее, но эта уже давно является основной и базовой для всех последующих версий): базовая версия ПЗУ еще от МкроАРТ.

Версия BIOS 1.07.13, с исправленными ошибками в адресации RAM-диска.

Версия BIOS 1.07.13a, с подправленным Юрием Корсуниным драйвером винчестера, благодаря чему возможна работа с более широким кругом винчестеров.

Версия BIOS 1.07.14/15 – с поддержкой Slave-HDD (доработка от Максагор/NedoPC)

Значение страниц в xBIOS v1.32LE

 

BASIC 48 + ROM-trigger (0x0000 - 0x3FFF) – тот же стандартный бейсик, что и в обычной прошивке. С одной лишь разницей: в нем присутствует т.н. ROM-trigger, переключатель между двумя половинками ПЗУ 271000. Но, так как в версии LE используется всего 64К-ПЗУ, то реального переключения половинок не происходит. Данная триггер реализован здесь лишь для совместимости софта, использующего с версией XT, где использование триггера имеет смысл. Подробную информацию о триггере смотрите в описании версии XT прошивки.

 

vTR-DOS v2.4LE (0x4000 - 0x7FFF) – новейшая разработка ОС TR-DOS, в которой и заключается весь смысл eXtra BIOS. Практически ничем не отличается от такой же vTR-DOS версии XT кроме того, что в той версии стартовое меню вынесено в отдельную страницу, освободив дополнительное место. Поэтому более подробную информацию данной страницы смотрите в описании xBIOS v1.32 XT.

 

BASIC 128 + HDD-boot (0x8000 - 0xBFFF) – точно такое же расширение бейсика для 128Кб, что и в обычной прошивке, за исключением того, что в стартовом окошке доступна опция «HDD boot» которая осуществляет вызов загрузчика ОС iS-DOS, расположенного в TR-DOS v5.04R.

 

BIOS 1.07.14 для CP/M v2.2 (0xC000 - 0xFFFF) - стандартная для ATM-turbo 2+ ОС CP/M v2.2; Версия BIOS 1.07.14. Именно с этой страницы стартует компьютер после RESET. Отличие от версии 1.07.13a заключается в подправленных процедурах вызова стартового меню и переключения различных страниц ПЗУ, что теперь позволило использовать ПЗУ любого объема вплоть до 1024Кб путем приращения дополнительного пространства снизу с автоматическим конфигурированием системы под новый объем ПЗУ.

Значение страниц в xBIOS v1.36XT

 

Прошивка Extra BIOS v1.36XT – состоит как бы из двух половинок по 64Кб каждая. Из них верхняя (0x10000 - 0x1FFFF) используется по умолчанию, а нижняя (0x00000 - 0x0FFFF) включается программно по мере необходимости.

Описание основной (верхней) половины, используемой по умолчанию:

 

BASIC 48 + ROM-trigger (0x10000 - 0x13FFF) – тот же стандартный бейсик, что и в обычной прошивке. С одной лишь разницей: в нем присутствует т.н. ROM-trigger, переключатель между двумя половинками ПЗУ 271000.

 

ROM-trigger имеет два входа:

0x3C98 (15512) – на входе автоматически запрещаются прерывания, а на выходе разрешаются.

0x3C9E (15518) – прерывания не отслеживаются. Их установка или запрещение – забота пользователя.

В обоих случаях портятся регистры A и BC.

 

Суть триггера в том, что при его вызове происходит подмена страниц ПЗУ со страницы 0x10000 - 0x13FFF, содержащей BASIC 48 на страницу 0x00000 - 0x03FFF, где расположен точно такой же BASIC 48 с триггером. Но где триггер при вызове производит переключение обратно на страницу 0x10000 - 0x13FFF.

 

Таким образом, первый вызов триггера включает BASIC 48 из нижней половины ПЗУ, а вторичный вызов восстанавливает верхнюю половину. Смысл использования триггера заключается в возможности выбора таким способом одного из двух вариантов ОС TR-DOS

TR-DOS v5.04R (далее - TRD) – обычная ОС (верхняя половина (стоит по умолчанию.

vTR-DOS v2.4XT (далее - vTRD) – новая разработка (нижняя половина, становится доступна при использовании ROM-trigger’а).

Вне зависимости от того, верхняя или нижняя половина ПЗУ выбрана, TR-DOS выбирается посредством перехода по адресам 0x3Dnn. Только в одном случае выберется TRD, а в другом – vTRD.

 

Определить, какая из половинок ПЗУ, верхняя или нижняя, сейчас активна, можно, считав байт по адресу 0x3CBC (15548) из BASIC 48.

 

Если он равен 0x87(135), то активна верхняя половина.

Если он равен 0x83(131), то активна нижняя половина.

Если он равен 0x00(0) или любому другому числу, то у вас прошита не eXtra BIOS и, следовательно, ROM-trigger отсутствует.

 

TR-DOS v5.04R (0x14000 - 0x17FFF) – самая обычная ОС TR-DOS, с небольшими доработками, базирующаяся н версии 5.04T. суть доработок заключается во вставленных обработчике резидента, а также загрузчике ОС iS-DOS(и других систем) с HDD и универсальном загрузчике с ATAPI CD-ROM. Зато из этой страницы было убрано стартовое меню CP/M, которое было перемещено в другую страницу. Это высвободило много свободного места в TR-DOS, и вообще теперь можно свободно менять версии TR-DOS, не забывая вставлять туда резидент и загрузчик iS-DOS.

BASIC 128 + HDD-boot (0x18000 - 0x1BFFF) – точно такое же расширение бейсика для 128Кб, что и в обычной прошивке, за исключением того, что в стартовом окошке доступна опция «HDD boot» которая осуществляет вызов загрузчика ОС iS-DOS, расположенного в TR-DOS v5.04R.

 

BIOS 1.07.15 для CP/M v2.2 (0x1C000 - 0x1FFFF) - стандартная для ATM-turbo 2+ ОС CP/M v2.2; Версия BIOS 1.07.15. Именно с этой страницы стартует компьютер после RESET. Отличие от версии 1.07.14 заключается в подправленных процедурах вызова стартового меню и переключения различных страниц ПЗУ, что теперь позволило использовать ПЗУ любого объема вплоть до 1024Кб путем приращения дополнительного пространства снизу с автоматическим конфигурированием системы под новый объем ПЗУ. Кроме того, подправлен и HDD-драйвер – теперь он может работать со SLAVE-устройствами.

 

Описание дополнительной (нижней) половины, вызываемой через ROM-trigger или через стартовое меню.

 

BASIC 48 + ROM-trigger (0x00000 - 0x03FFF) – тот самый обычный бейсик для 48Кб, с триггером восстанавливающим верхнюю половину ПЗУ, о которых было сказано выше.

 

vTR-DOS v2.4XT (0x04000 - 0x07FFF) – новейшая разработка ОС TR-DOS, в которой и заключается весь смысл eXtra BIOS. Также как и в TR-DOS v5.04R, здесь вставлены резидент и загрузчик ОС iS-DOS с винчестера.

 

Список новшеств:

1) Программная эмуляция контроллера дисководов 1818ВГ93 в верхней памяти ATM-turbo 2+. При этом любое из устройств (A,B,C,D) может быть или виртуальным (то есть работать через эмулятор ВГ93 на виртуальной дискете в верхней памяти, причем совсем не обязательно через точку входа 0x3D13!), либо реальным (работать с настоящим дисководом через реальную ВГ93).

 

2) Гибкая подстройка расположения виртуального диска в верхней памяти: изначально она, имея длину в 40(0x28) страниц, располагается в соответствии с RAM-диском оболочки HONEY-COMANDER 4.00(4.01), занимая первые его 640Кб. Однако система позволяет поменять расположение любой из 40 страниц виртуальной дискеты на другое место, при условии, что не будет использована страница ОЗУ 0x38, где располагаются дополнительные системные переменные новой TR-DOS.

 

3) Возможность программного перехвата кнопки MAGIC, RESET, а также системного порта 0xnn77 и порта страниц 0nnFF7, с возможностью организации системы управляющих плагинов в верхней памяти.

 

4) Гибкая система оправления всеми новыми функциями через единую керналь с тремя точками входа – 0x3D3E(15678), 0x3D42(15682) и 0x3D46(15686).

 

Полное описание функций vTR-DOS 2.4LE/XT смотрите в соответствующем разделе.

 

Для установки в тело TR-DOS в промежуток 0x3Dnn точек входа в керналь (сама керналь, как и эмулятор ВГ93, расположены в свободном пространстве прошивки TR-DOS), были сделаны небольшие изменения в самой прошивке, не отразившиеся на работоспособности системы. Описание изменений в этом промежутке прошивки смотрите в Приложении 1.

Изначально планировалось выпустить прошивку с vTR-DOS только в рамках стандартной 64Кб-ПЗУ, заменив ею обычную TR-DOS v5.03. Однако внедрение в систему эмулятора контроллера 1818ВГ93 к большому сожалению, привела к, пусть и не большому, но, тем не менее, весьма досадному и неизбежному снижению совместимости с обычной TR-DOS до уровня 90-95% как при работе с виртуальной дискетой через эмулятор ВГ93, так и с реальными дисковыми устройствами, преодолеть которое программными средствами оказалось невозможно. Особенно это касается различных хитрых ксорок, обращающихся для получения ключа расксорки к содержимому ПЗУ TR-DOS, а также особо хитрых процедур опроса диска на предмет его наличия в дисководе.

 

Поэтому было принято решение выпустить 128Кб ПЗУ, где будут находиться две TR-DOS: обычная, полностью совместимая с другими TR-DOS, и новая с эмулятором ВГ93. Что и было сделано в данной прошивке.

 

Переключение между этими прошивками происходит либо путем выбора соответствующей опции в стартовом меню, либо посредством ROM-trigger’а, расположенного в ПЗУ BASIC 48. Включать vTRD наиболее удобно из среды других ОС, например, CP/M или iS-DOS посредством соответствующих утилит, на время использования виртуальной дискеты, за затем возвращать стандартное ПЗУ на место. Хотя ROM-trigger легко доступен даже из бейсика.

 

Стартовое меню CP/M (0x08000 - 0x0BFFF) – Стартовое меню ATM-turbo 2+, ранее располагавшееся в свободном месте TR-DOS v5.03. Но на его месте теперь расположена TR-DOS 5.04R, а меню было перемещено сюда. Собственно данная страница в первых бета-версиях являлась копией TR-DOS v5.03 вместе с меню (где использовалось, естественно, только само меню), но в дальнейшем было оставлено исключительно стартовое меню, существенно переработанное, а точнее, переписанное с нуля. А освободившееся место использовано для дальнейшего расширения возможностей eXtra BIOS. Причем этого места еще осталось много, так что простор для дальнейшего развития xBIOS огромен. Особенность нового меню, использующегося, начиная с версии xBIOS v1.32XT, заключается в интерактивном интерфейсе, предварительной настройке системных переменных vTRD при входе с ZX-режимы, в переходе к загрузчику iS-DOS с винчестера. А также реализовано управление диспетчером памяти, возможность работы с дополнительными модулями, подключаемыми в соответствии со специальным форматом в свободные страницы ОЗУ или ПЗУ. Подробное описание функций стартового меню смотрите в соответствующем разделе.

 

Empty space (0x0C000 - 0x0FFFF) – пустая страница, вся заполненная байтом 0xFF. Зарезервирована для дальнейших расширений в новых версиях eXtra BIOS. Пригодна также для размещения внешних модулей, распознаваемых стартовым меню по специальному заголовку (см. описание стартового меню). Зарезервирована разработчиками! Для подключения внешних модулей используйте более объемные ПЗУ!

 

Несмотря на то, что данная версия xBIOS рассчитана на ПЗУ 128Кб, она будет работать и с большим размером ПЗУ вплоть до 1024Кб. Для нормальной работы надо всего лишь, чтобы страницы xBIOS занимали бы самое верхнее положение в ПЗУ. То есть, новые страницы должны добавляться снизу, наподобие того, как на рисунке 1 к стандартной 64Кб-прошивке ATM были добавлены страницы xBIOS. Подробнее об увеличении объема ПЗУ читайте в приложении 4.


4.Описание стартового меню eXtra BIOS v1.32LE/1.36XT

Стартовое меню eXtra BIOS 1.32LE

 

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

 

1.CP/M – обычный запуск ОС CP/M.

 

2.vTRD A включает защиту памяти в режим установленный опцией 7.STOP, профиль памяти, монтирование рам диска на А и загрузка с А

 

3.vTRD Cвключает защиту памяти в режим установленный опцией 7.STOP, профиль памяти, монтирование рам диска на С, удаление всех пользовательских перехватчиков и карты памяти, и производит загрузку с А

 

4.ZX 1mb – отключает систему защиты/профилирования памяти и разворачивает доступную память до 1 Мб, производит горячий монтаж рам диска на букву С и выход в меню BASIC 128

 

5.HDD предназначен для загрузки с жесткого диска. включает защиту памяти в режим установленный опцией 7.STOP и профиль памяти 1мб. при отсутствии загрузочного сектора на HDD включает профиль памяти указанный в опции меню, монтирует RAM-диск на С и производит загрузку с А.

 

6.New RAM – форматирует виртуальную TR-DOS дискету. А конкретно – очищает область каталога и устанавливает нужную служебную информацию в системном секторе.

Перед форматирование требует подтверждения действия.

 

7. FASTзелёный цвет – при входе в любой ZX-режим turbo включено, красный - выключено. Для CP/M всегда включено.

 

8. AUTO предназначена для автоматического старта компьютера в соответствии выбранного основного пункта (зелёный цвет). не работает для CP/M в силу того что данные для авто старта сохраняются в странице 0x38 которая используется для RAM-диска этой ОС. Для отмены автостарта при перезапуске компьютера необходимо нажать и удерживать пробел.

 

9.STOP регулирует реакцию защиты памяти/системного порта. Аналог .vendor_protect_hide(функция vTRD) - красный цвет, .vendor_protect_break(фенкция vTRD) - зелёный цвет.

 

0.128/512/1024 используется для профилирования памяти в режимах vtrd по-умолчанию и ZX 1024 (профиль выбран, но отключен на момент входа в этот режим, для включения следует подать команду set_hardware_init.vendor_protect_init(функция vTRD))


Стартовое меню eXtra BIOS 1.36XT
(Setup Utility v1.1)

 

Сделана возможность использовать новое загрузочное меню для ATM. Для этого была разработана программа setup utility. Она предназначена для управления некоторыми важными опциями системы dual TR-DOS 128к.

 

После нажатия клавиши RESET производится поиск резидента в памяти и в случае его отсутствия - вывод информации о версии программы меню и проверка установки автозапуска.

 

В случае его отсутствия выводится сообщение и ожидается нажатие клавиши space. После её нажатия выводится основной экран меню.

 

В случае обнаружения информации об авто-запуске, он выполняется и для его отмены необходимо нажать SPACE.

 

Навигация в меню осуществляется курсорными клавишами. изменение/выбор параметров производится с помощью клавиш 'ENTER', 'PAGE UP', и 'PAGE DOWN'.

 

Функционально меню разделено на три группы - boot, options и service.

 

Первая группа (Boot) включает в себя варианты загрузки компьютера.

 

CP/M 2.2 - запуск CP/M


TR-dos boot - автозапуск TR-DOS v5.04R с диска а с открытыми 128-

ми страницами (т.е. эмулятор ВГ93 отключен)


vTR-dos hot - автозапуск vtr-dos c диска а с настройками options.

сохраняются пользовательские перехватчики.


vTR-dos cold - автозапуск vTR-dos c диска а с настройками из

Options и полной инициализацией.


ZX-spectrum menu - обычное меню бейсика ZX-128 + TR-dos(т.е.

эмулятор ВГ93 выключен).


IDE hard drive master -
для запуска процедуры IDE-loader (загрузка iS-DOS)

 

ATAPI CD-ROM slave - для запуска процедуры автозагрузки с CD-ROM


Вторая группа (Options) включает в себя различные опции vTR-dos.

 

Non CP/M automatical boot - автозапуск после RESET выбранного ранее

пункта меню из опции Boot.


Processor overclock turbo mode - включение/отключение режима TURBO.


vTR-dos stop screen - включение/отключение отображения

специального стоп-сообщения при попытках

доступа к защищённым портам и страницам

памяти.

 

vTR-dos swap drives A/B - меняет местами только реальные дисководы

A<>B и C<>D (только в vTR-DOS, естественно).


vTR-dos protected mode - включение/отключение защиты системных

портов и страниц от несанкционированных посягательств для контроля целостности содержимого виртуальной дискеты. Таким образом, впервые в истории Спеки на нем реализована защита памяти!


vTR-drive read ONLY mode - включение/отключение режима запрета записи

для виртуальной дискеты.


vTR-dos boot mode drive map - выбор расположения виртуальной дискеты в

RAM или ROM (только для ПЗУ 1024Кб. В др. случаях выбор ROM будет бессмысленным).


vTR-drive mount to - монтирование виртуальной дискеты

соответственно к устройству A, B, C или D.


vTR-dos extended memory profile - объём доступной памяти в ZX режиме в

защищенном режиме (выбор между 128Кб, 512Кб и 1024Кб. В первых двух случаях доступ к памяти выше указанной цифры для обычного ZX-софта запрещен).

 

 

Третья группа (Service) предлагает небольшой сервис.

 

TR-dos standart quick FORMAT RAM disk

- очищает каталог виртуальной дискеты.


Extended ROM service - вывод списка и запуск найденных в ПЗУ

утилит (см. ниже).


Extended RAM service - вывод списка и запуск найденных в ОЗУ

утилит (см. ниже).


Save changes to RAM 0x38 - сохранение установок options в системной

странице.

Чтобы перемещаться курсором по правому меню следует нажать клавишу 'right', а чтобы перемещаться курсором по левому меню необходимо нажать 'left'.

 

Изменение параметров группы Options производится клавишами 'enter'. Также можно использовать клавиши 'page up' - уменьшение параметра и 'page down' - увеличение параметра.

Описание низкоуровневых резидентных сервисов

 

В xBIOS 1.36XT сделана возможность вызова специальных программ прямо из стартового меню (опции Extended ROM/RAM service в группе Service). Эти программы именуются сервисными утилитами и их предназначение прежде всего в модульном расширении функций стартового меню. Таким образом, становится возможным наращивать функциональность ПЗУ ATM без переделок самого меню.

 

При автостарте, программа проверяет первый мегабайт ОЗУ и ПЗУ на наличие в страницах специальным образом оформленных "корешков" сервисных утилит. Результат поиска запоминается и впоследствии предлагается пользователю в меню Service - Extended ROM/RAM service. Пользователь, выбирая нужный пункт меню, автоматически запускает соответствующую сервисную утилиту. На данный момент существует ограничение в количестве утилит, предлагаемых пользователю на выбор. Только первые 16 утилит, найденных в памяти будет предложено на выбор. Всего их 32 - 16 из RAM + 16 из ROM. Пока это связано с ограничениями вывода на экран.

 

Формат "корешка" по которому распознаются сервисные утилиты:

 

0x0000 JP START

0x0003 DB "utility name " ; всегда 25 байт

0x001C START

 

Утилита запускается в расширенном режиме, запрещёнными прерываниями, с текстовым экраном со стандартной палитрой. Клавиатура находится в режиме ZX. Запуск производится в окне 0xC000. стек находится в окне 0x8000 (в его конце – в последнем килобайте), 0-й экран (страницы 5 и 1) в 0x0000 и 0x4000 (символы и атрибуты соответственно). Возврат в меню - обычный RET. также следует иметь ввиду, что в 5-й странице находятся различные системные переменные ОС CP/M.

 

также Setup Utility предоставляет маленький сервис :

 

0x8006 - print ; процедура печатающая строку из IX по координатам HL атрибутом А

0x8009 - cls ; очистка экрана и закрашивание атрибутом из А

 

print выводит на экран цветную строку из IX по координатам в HL, атрибут строки в А. при этом в тексте допускаются следующие управляющие коды:

 

0 - конец строки

1 - перевод каретки на следующую строку и на исходную позицию по Х

2 - отступ на 30 символов

"-","0".."F" - управление цветом следующих символов и установка черного фона. например : DB "-6hello -1world" - будет напечатано на черном фоне сначала 6-м цветом, а потом - 1-м.


5.Описание команд BIOS vTR-DOS 2.4LE/XT

 

Общая информация о функционировании vTR-DOS

 

Первым делом необходимо заметить что в текущей версии vTR-DOS не поддерживается использование диспетчера памяти и верхней памяти в частности. Все попытки переключения страницы с адреса 0x4000 немедленно пресекаются, а с адреса 0x8000 всегда устанавливается 2-я страница при обращениях к виртуальному диску. Иными словами - если не использовать загрузку с виртуального диска (или использовать её осмотрительно) можно перепрограммировать две страницы - 0x8000 и 0xС000.

 

Таким образом эмулятор ВГ может производить ввод/вывод только в следующую карту памяти:

0x0000 - 48к бейсик

0x4000 - 5-я страница

0x8000 - 2-я страница

0xС000 - любая из первых восьми страниц.*

 

Ввод/вывод при использовании реального диска возможен только в следующую карту памяти :

0x0000 - 48к бейсик

0x4000 - 5-я страница

0x8000 - любая из страниц

0xС000 - любая из первых восьми страниц.*

 

Страничное окно 0xС000 предлагается использовать только через порт 0x7FFD для совместимости с будущими версиями vTR-DOS. Использование расширенной памяти через это окно не рекомендуется. Если использование необходимо, то следует учитывать что в будущих версиях vTR-DOS при обращении к её сервисам в этом окне будет устанавливаться нулевой восьмистраничный банк памяти (первые восемь страниц с выборкой через 0x7FFD).

 

* - на самом деле не важно какая там страница, т.к. в текущей версии это окно не используется.

Точки входа в керналь:

 

Числа в формате 0xXX:0xYYYY+0xZZ используются для

абсолютного указания адреса переменных в памяти 1024к

здесь 0xXX - номер страницы, 0xYYYY - смещение в странице,

0xZZ - смещение в блоке переменных

 

Существуют три входа в BIOS.

 

bios1 0x3D3E (15678)

bios2 0x3D42 (15682)

verify 0x3D46 (15686)

 

 

Первая точка принимает команду и параметры из трёх ячеек

памяти A B и C, адреса которых 23735(0x5CB7), 23737(0x5CB9) и 23736(0x5CB8)

соответственно.

 

Вторая точка принимает команды и параметры из одноимённых

регистров А, В и С.

 

Третья точка позволяет определить, какое ПЗУ TR-DOS установлено.

Если после вызова этой точки в регистре A и в ячейке памяти 0x5CEF(23791) находится число 0x01, то установлена одна из версий обычной TR-DOS, а керналь отсутствует.

Если там находится число 0x00, то установлена vTR-DOS со стандартной керналью.

 

При каждом вхождении в BIOS происходит проверка на наличие

системных переменных и их создание путём вызова 0x3D21 (15649).

 

---

Команда передаётся в В

подкоманда или параметр передаются в С

дополнительный параметр передаётся в А

---

Для команд начинающихся с get_

на выходе результат выдаётся в ВС или С

в зависимости от длины

 

_not_implemented - код означающий что данная

функция не реализована в этой версии и зарезервирована на будущее,

числовое значение на выходе равно 0xAA55

 

set_Hardware_init
(инициализация оборудования)

----------------------------

 

* код 0

 

- подкоманда 0 .rst_0

= рестарт резидента, иначе рестарт TR-DOS

 

- подкоманда 1 .hot

= инициализация переменных необходимых для работы эмулятора и монтирование set_vtrd_mount.drive[a]

 

- подкоманда 02..7F

= _not_implemented

 

машиннозависимые подкоманды :

 

- подкоманда 80 .vendor_protect_hide

= тихий режим защиты. подключение запрещённых страниц игнорируется. попытки использования системного порта игнорируются. программы использующие верхнюю память могут работать неправильно. не рекомендуется.


- подкоманда 81 .vendor_protect_break

= обычный режим защиты. при обращении в запрещённую страницу памяти или к системному порту выполнение программы прекращается и демонстрируется сообщение.

 

- подкоманда 82 .vendor_protect_page

- дополнительный параметр = номер страницы.

= блокирование доступа к странице для всех программ.

 

- подкоманда 83 .vendor_unprotect_page

- дополнительный параметр = номер страницы

= разблокировать доступ к странице для всех программ. не работает для 0x38.

 

- подкоманда 84 .vendor_memory_profile

- дополнительный параметр = номер профиля 0..2

= установка профиля памяти 0 = 1024кб, 1 = 512кб, 2 = 128кб. Обращение к памяти вне профиля игнорируется, системный порт тоже игнорируется. исключение - профиль 0 который отменяет профилирование памяти. включение профиля отменяет изменения сделаные командами .vendor_protect_page и .vendor_unprotect_page

 

- подкоманда 85 .vendor_protect_init

= инициализация подсистемы защиты памяти с установками по-умолчанию :

 

set_hardware_init.vendor_protect_(hide/break) значение указанное в меню при старте

set_hardware_init.vendor_memory_profile [значение указанное в меню при старте]

 

Выполняется при рестарте vTR-DOS.

 

- подкоманда 86 .vendor_protect_stop

= остановка системы защиты. не работает для 0x38.

- подкоманда 87..FF .vendor_specific

= _not_implemented/зарезервировано для машиннозависимого оборудования,

определяются производителем.

get_hardware_version
(получение информации об установленном оборудовании)

(в данной версии все возвращаемые данные не вычисляются, а "вшиты" намертво)

---------------------------

 

* код 1

 

- подкоманда 0 .get_bios

= версия vTR-DOS в двоично-десятичном виде (0x0204 для v2.4)

 

- подкоманда 1 .get_machine

= идентификатор + версия платформы в двоично-десятичном виде

(0x0007 - 0x00=ATM 0x70= 7.0 version)

 

- подкоманда 2 .get_ram

= количество страниц памяти (0x0040 для 1024к)

 

 

- подкоманда 03..7F

= _not_implemented

 

- подкоманда 80..FF .vendor_specific

= определяется производителем

set_vtrd_mount
(монтирование виртуального диска на "букву")

 

Может быть произведено монтирование только на какую-то одну "букву".

 

Функция не меняет текущий диск и статуса is_current_drive_virtual.

 

Для подключения смонтированного диска в работу необходимо любыми средствами инициализировать "букву" (например если текущий диск А и монтирование производится

на букву А необходимо повторно выбрать этот диск).

---------------------------

 

* код 2

 

- подкоманда 0..3 .drive

= монтирование на букву A..D соответственно

 

- подкоманда 04..FF

= _not_implemented

get_vtrd_mount
(получение информации о статусе и монтировании виртуального диска)

----------------------------

 

* код 3

 

- подкоманда 0 .drive

= возвращает номер смонтированного диска 0x00..0x03

для дисков A..D соответственно

 

- подкоманда 1 .is_current_drive_virtual

= возвращает 0x01 если текущий диск виртуальный и 0x00 в противном случае

set_vtrd_map
(замена/восстановление стандартной разводки памяти под RAM-диск)

 

По умолчанию соответствующей используемой в honey commander 4.0.

карта памяти берётся по адресу = (0x80 or подкоманда)*256.

 

В этой версии карта памяти должна состоять из номеров страниц 0x00..0x7F,

все иные значения заменяются идентификаторами недействительной страницы,

а так же иметь длину 256 байт. Так как карта памяти в длину обычно меньше 256 байт, то последние байты должны устанавливаться значениями недействительной страницы равным 0xFF.

 

Номера страниц выше 0x40 являются страницами ПЗУ и нумеруются в обратном порядке, т.е. 0x40 на самом деле является 0x3F страницей ПЗУ.

-----------------------------

 

* код 4

 

- подкоманда 0 .reset

= устанавливает стандартную разводку памяти

 

- подкоманда 0x01..0x7F

= устанавливает пользовательскую разводку памяти, действительную

до следующего сброса/инициализации

 

- подкоманда 0x80..0xFF

= устанавливает пользовательскую разводку памяти, сохраняющуюся

после сброса/инициализации

get_vtrd_map
(получение в буфер текущей карты разводки памяти)

подкоманды не используются

------------------------------

 

* код 5

 

- дополнительный параметр 0 .is_current_map_user

= возвращает 0x00 если используется стандартная карта памяти

и иное значение если наоборот.

 

- параметр = младший адрес буфера,

дополнительные параметр = старший байт адреса буфера

= загружает в буфер 256 байт текущей карты памяти


set_page_hook
(Установка/удаление обработчика обращений к недействительным страницам)

 

Общий размер обработчиков не может быть больше 0x1FFF байт <для компиляции> стартовый адрес РАБОТЫ кодового блока обработчиков = 0x4200

 

Блок обработчиков загружается в страницу 0x38 и выполняется из неё в окне 0x4000,

прерывания запрещены.

 

Подкоманды не используются.

------------------------------

 

* код 6

 

- дополнительный параметр <0x80 .reset

= отключение обработчика

 

- параметр = младший байт адреса дескриптора,

дополнительный параметр = старший байт адреса дескриптора (>0x80)

= загрузка блока обработчиков обращений к недействительным страницам

 

формат дескриптора:

addr dw - адрес кодового блока обработчиков должен быть больше 0x8000

size dw - размер кодового блока обработчиков должен быть меньше 0x1F00

inpt dw - относительный адрес процедуры обрабатывающей событие ввода информации из недействительной страницы

outp dw - относительный адрес процедуры обрабатывающей событие ввода информации в недействительную страницу

 

Относительные адреса указываются относительно начала кодового блока.

 

Отработка событий ввода/вывода из недействительной страницы:

-------------------------------

Имеется возможность контроля ввода-вывода информации в страницы

помеченные в таблице как 0xFF.

 

Это необходимо если данная страница не находится в данный момент в памяти,

а к примеру на винчестере. так же есть возможность, установив

пользовательскую таблицу и заполнив её только 0xFF, производить прямой редирект обращения эмулятора из памяти на винчестер.

 

Достоинством такого метода является полное освобождение рам диска от vTRD

и размещение оного на жестком диске или на удалённой машине.

 

Процедуры, осуществляющие редирект, устанавливаются так же, как и перехватчик magic.

 

Есть две процедуры - одна отвечает за ввод информации с носителя,

вторая процедура отвечает за запись на носитель.

 

 

На вход эти процедуры получают:

 

ввод - BC= адрес в таблице страниц (указывающий на недействительную страницу),

DE= смещение в странице,

Введённый байт должен быть помещён в переменную 0x7FF2 (0x38:0x3FF0+0x02)

(регистр SP сохранять по адресу 0x4004 (0x38:0x0004),

возврат через 0x3d7e на 0x0F76)

 

вывод - /то же самое что и ввод/,

Выводимый байт следует искать в переменной 0x7FF2 (0x38:0x3FF0+0x02)

(регистр SP сохранять по адресу 0x4004 (0x38:0x0004),

возврат через 0x3d7e на 0x0F79)

 

Стек необходимо создать свой, внутри кодового блока или в заранее выделенной странице (в этом случае придётся самостоятельно позаботиться о подключении и отключении требуемой страницы). Все используемые регистры перед выходом воcстановить.

 

get_page_hook
(получить информацию о том, установлены ли обработчики ввода/вывода из недействительных страниц)

 

Подкоманды не используются.

-----------------------

 

* код 7

 

= на выходе B=0xC3 если есть обработчик ввода, C=0xC3 если есть

обработчик вывода; иначе - любое число

set_nmi_hook
(установка/удаление обработчика нажатия клавиши magic)

 

Производится копирование кодового блока в страницу 0x38 откуда он

и будет работать, стартовый адрес 0x6200

подкоманды не используются.

-----------------------

 

* код 8

 

- дополнительный параметр <0x80

= удаление обработчика прерывания NMI

 

- параметр = младший байт адреса дескриптора,

дополнительный параметр = старший байт адреса дескриптора (>0x80)

 

 

 

Формат дескриптора:

addr dw - адрес кодового блока обработчика (должен быть больше 0x8000)

size dw - размер кодового блока обработчика (должен быть меньше 0x1000)

 

Отработка немаскируемого прерывания:

-------------------------------------

при нажатии клавиши magic, управление будет передаваться

на адрес 0x6200 (0x38:0x2200) после чего нужно сохранить

содержимое регистра SP по адресу 0x400F (0x38:0x000F).

для возврата в эмулятор следует использовать

стандартный вход 0x3D7E с последующим вызовом 0x0F73,

не забыв, естественно, восстановить все использованные регистры

get_nmi_hook
(получение статуса обработчика nmi)

в данной версии не реализовано

----------------------

 

* код 9

= _not_implemented

set_reset_hook
(установка перехватчика нажатия клавиши RESET и инициализации vTR-DOS)

 

В данной версии всегда копируется все 16кб данных, из которых 1-й байт и 3 последних изменяются соответствующим образом для работы резидента (см. приложение 5)

 

Подкоманды не используются.

----------------------

 

* код A

 

- параметр = младший байт адреса кодового блока,

дополнительный параметр = старший адрес кодового блока

(должен быть больше 0x40 и меньше 0xC0)

get_reset_hook
(получение сведений об установленном перехватчике reset/инициализации)

в данной версии не реализовано

----------------------

 

* код B

 

= _not_implemented

 


set_flag
(установка флагов)

----------------------

 

* код C

 

- подкоманда 1 .wr

- дополнительный параметр 0..1

= установка флага произведённой записи.

 

- подкоманда 0 .ro

- дополнительный параметр 0..1

= установка атрибута read_only для виртуального диска.

 

- подкоманда 02..0xFF

= _not_implemented

get_flag
(получение состояния флагов)

-----------------------

 

* код D

 

- подкоманда 0 .ro

= возвращает 0x00 если сброшен и 0x01 если установлен.

 

- подкоманда 1 .wr

= возвращает 0x00 если сброшен и 0x01 если установлен.

set_io_hook
(установка/удаление перехватчика доступа к расширенным портам)

 

кодовый блок копируется в страницу 0x38, стартовый адрес обработчика 0x7200

подкоманды не используются

---------------------

 

* код E

 

- дополнительный параметр <0x80

= удаление перехватчика доступа к верхней памяти

 

- параметр = младший байт адреса дескриптора,

дополнительный параметр = старший байт адреса дескриптора (>0x80)

 

 

 

 

Формат дескриптора:

 

addr dw - адрес кодового блока обработчика (должен быть больше 0x8000)

size dw - размер кодового блока обработчика (должен быть меньше 0x0D00)

 

 

Отработка событий вывода в порты:

------------------------------

Сделана возможность использования перехватчика команды OUT (C),A и OUT (C),D. Если эмулятор не распознает обращения через вышеуказанные команды к портам ВГ93, он передаст управление на 0x38:0x3200 (абсолютный - 0x7200).

 

При этом необходимо будет сохранить значение регистра SP и, установив новый стек внутри страницы 0x38, сохранить в нём все регистры.

 

Прерывания запрещены, менять нельзя. Для возврата в эмулятор после обработки (значение для вывода в порт передаётся в регистре D, адрес порта - в BC) необходимо восстановить все использовавшиеся регистры, кроме регистра SP, старое содержимое которого перед входом в эмулятор нужно поместить по абсолютному адресу 0x4004.

Затем нужно произвести вход в эмулятор через стандартный вход 0x3D7E на точку 0x0F70.

Далее эмулятор производит вывод в порт, указанный в регистре ВС, значение, указанное в А. Если установлен флаг С, то вывод в порт не производится.

get_io_hook
(получение инфромации об установленном перехватчике обращений к расширенным портам)

 

В данной версии не реализовано.

------------------------------------

 

* код F

 

= _not_implemented

 

 


ПРИЛОЖЕНИЕ 1:
Изменения в процедуре проверки наличия INTERFACE 1

 

Новые возможности, реализованные в vTR-DOS потребовали введения новых точек входа. Была разработана специальная командная керналь, а точки входа в нее были расположены в окне 0x3Dnn, доступном пользователю даже их Бейсика. Однако для этого пришлось так изменить содержимое ПЗУ TR-DOS на данном промежутке, чтобы изменения не сказались на совместимости с основным количеством программ. Свободное место под точки входа удалось выделить благодаря сокращению процедуры проверки наличия INTARFACE-1, совершенно ненужной в наши дни. Вот как выглядит изменение:

 

Как было в обычном TR-DOS:

15672              XOR  A
                   OUT  (247),A
                   IN   A,(247)
                   CP   30
                   JR   15684
                   CP   31
                   RET  NZ                  ;если INTERFACE-1 нет, то выходим
15684              RST  8                     ;если же он есть, то устанавливаем
                   DEFB 0x31                  ;его переменные,
15686              LD   A,1                   ;пишем 1 и выходим.
                   LD   (23791),A
                   RET​

Как переделано в vTR-DOS:

15672              LD   A,1                ;укороченная "процедура" проверки
                   LD (23791),A            ;INTERFACE-1. Просто автоматом ставит
                   RET                     ;признак его отсутствия и выходит.
15678              NOP                     ;вход в керналь номер 1
                   JP   KERNEL1
15682              NOP                     ;вход в керналь номер 2
                   JP   KERNEL2
15686              NOP                     ;процедура проверки "стандартности" ПЗУ:
                   XOR  A                  ;если на выходе в регистре A и в ячейке
                   LD   (23791),A          ;23791 находится 0, то это "наша" ПЗУ.
                   RET                     ;Если там - 1, то это ПЗУ – стандартное
                                           ;(сравните с первоначальной процедурой).​

ПРИЛОЖЕНИЕ 2:
Структура ОЗУ ATM-turbo 2+ по умолчанию, с установленной прошивкой xBIOS.

 

Рисунок 2

*по умолчанию – означает, что данная область памяти устанавливается таковым образом после первоначальной инициализации xBIOS и vTR-DOS. В дальнейшем возможно ее перемещение любым образом в соответствии с функциями vTR-DOS.

 

Отсутствие такой надписи означает, во-первых, неизменность расположения данной области, а, во-вторых, то, что занятие данных страниц памяти другими, релоцируемыми областями, может сделать невозможным полноценное функционирование xBIOS и, в особенности, vTR-DOS. Однако вы можете использовать любую страницу памяти по своему усмотрению, при условии, что функции vTR-DOS использованы не будут, а сама vTR-DOS будет отключена (то есть нижняя половина ПЗУ через ROM-trigger или иными способами установлена не будет).

 

В этой конфигурации ПЗУ xBIOS будет просто соответствовать стандартной прошивке ПЗУ ПК TURBO 2+ и Spectrum128k.

 

P.S. В последней версии xBIOS страницы 0x35 и 0x37 также отведены под RAM-диск (по умолчанию), вследствие увеличения эмуляции количества цилиндров на виртуальном дисководе с 80 до 84. Однако, если предполагается загружать в RAM-диск стандартные образы TRD или инициализировать заголовок стандартным образом, то данные страницы можно использовать по своему усмотрению.


ПРИЛОЖЕНИЕ 3:
Краткая информация о структуре страницы 0x38.

 

Внимание! Данные сведения приводятся лишь для исчерпывающей осведомленности пользователей. Конкретные системные переменные не описываются, ибо в процессе дальнейшего совершенствования прошивки некоторые из них могут поменяться. Поэтому для использования возможностей xBIOS настоятельно рекомендуется использовать функции кернали vTR-DOS.

 

Страница 0x38:

 

0x0000 - 0x0010 - Блок внутренних переменных N1 (необходимые для использования

см. в описании функций vTR-DOS).

0x0011 - 0x01FF - Таблицы расположения страниц в RAM-диске.

0x0200 - 0x3FEF - Пространство для обработчиков (плагинов):

a) недействительных страниц (адреса 0x0200 - 0x20FF),

(адреса 0x2100 - 0x21FF – таблица расположения страниц в ROM-

диске (используется в 1024Кб ПЗУ))

b) MAGIC (адреса 0x2200 - 0x31FF),

c) доступа к расширенным портам(команды OUT (C),A и OUT (C),D)

(адреса 0x3200 - 0x3FEF)

Подробно работа с перехватчиками освещена в описании функций

vTR-DOS

0x3FF0 - 0x3FFF - Блок внутренних переменных N2 (необходимые для использования

см. в описании функций vTR-DOS).

ПРИЛОЖЕНИЕ 4:
Работа xBIOS v1.36XT с ПЗУ объемом более 128Кб.

 

eXtra BIOS v1.36XT, как уже упоминалось, рассчитан на работу с ПЗУ, объемом не менее в 128Кб. Однако это только нижний предел. Возможности ATM-turbo 2+ позволяют адресовать ПЗУ вплоть до 1024Кб включительно, и xBIOS сполна поддерживает эту возможность.

 

Существуют несколько видов ПЗУ, объемом выше 128Кб. Это:

 

ROM 27020 – 256Кб (16 страниц)

ROM 27040 – 512Кб (32 страницы)

ROM 27080 – 1024Кб (64 страницы)

 

Прошивки к этим ПЗУ можно легко создать самостоятельно путем добавления к базовой 128К прошивке новых страниц, без всяких переделок самой xBIOS. При этом надо неукоснительно соблюдать одно правило: все новые страницы добавляются снизу, каждый раз вытесняя базовые 8 страниц xBIOS в самый конец ПЗУ.

 

 

Схематично принцип расширения ПЗУ представлено на рисунке 3:

 

Рисунок 3

 

На этой схеме хорошо видно, что если в базовом ПЗУ 27010 (128Кб) xBIOS занимает весь объем адресов 0x00000-0x1FFFF, то в других ПЗУ его расположение будет выглядеть так:

 

ПЗУ 27020 (256К) – адреса 0x20000 - 0x3FFFF

ПЗУ 27040 (512К) – адреса 0x60000 - 0x7FFFF

ПЗУ 27080 (1024К) – адреса 0xE0000 - 0xFFFFF

 

При этом порядок расположения страниц внутри самой xBIOS не меняется!

 

В случае с ПЗУ 27020 и 27040 наиболее рациональным будет использовать дополнительное пространство для размещения дополнительных модулей в формате, освещенном в описании Setup Utility. В этом случае данные модули можно будет легко запустить посредством интерактивного стартового меню.

 

При использовании же ПЗУ 27080 (1024Кб) появляется возможность использования свободного пространства не только в качестве склада модулей, но и как виртуальную дискету в формате TR-DOS. То есть, другими словами, vTR-DOS может работать с виртуальной дискетой как в ОЗУ, так и в ПЗУ совершенно равноправно (но либо в ОЗУ, либо в ПЗУ, но не одновременно. Придется программно переключаться между ними), точно также монтируя ROM-дискету к устройствам A, B, C или D. Единственное понятное исключение в работе – данная дискета будет доступна только на чтение. Расположение ROM-диска а также общая структура такой ПЗУ 27080 показана на рисунке 4:

Рисунок 4

 

Сразу заметно, что ROM-диск занимает самые нижние 40 страниц ПЗУ, с каталогом в нулевой странице. Таким образом, создание подобного ПЗУ на основе базовой прошивки xBIOS не представляет никакой сложности и происходит путем склейки трех файлов в указанной последовательности:

 

IMAGE.TRD + 256K.ROM +XBIOS.ROM

 

IMAGE.TRD – любой стандартный (скачанный или собранный скомпонованный) эмуляторный образ дискеты, которые легко можно найти в сети на ZX-сайтах.

256K.ROM – пустышка объемом в 256Кб: либо действительно пустая (в таком случае желательно заполнить ее кодом 0xFF), либо содержащая в себе модули пользователя.

XBIOS.ROM – собственно базовая прошивка xBIOS v1.33XT.

 

Однако ничто не может помешать вам использовать 1024Кб ROM целиком под свои модули. В этом случае попытка обратиться в ROM-диску вызовет лишь стандартное сообщение TR-DOS «disk error», так как системой не будет найден каталог и системный сектор.

 

Подключить к ATM-2+ ПЗУ объемом свыше 128Кб не сложно, но есть небольшая тонкость: как было сказано, диспетчер памяти позволяет адресовать до 1024Кб ОЗУ и ПЗУ. Однако на самой панельке под ПЗУ не разведено несколько дополнительных сигналов для «больших» ПЗУ. Их придется распаять вручную. Для этого надо:

 

У ПЗУ 27020 (D2) отогнуть пин 30 и припаять проводком к пину 11 микросхемы D75.

У ПЗУ 27040 отогнуть D2.30 и D2.31 и припаять соответственно(!) к D75.11 и D22.5.

У ПЗУ 27040 отогнуть D2.30, D2.31, D2.1 и припаять к D75.11, D22.5, D22.7.

 

ПРИЛОЖЕНИЕ 5:
Работа с резидентом в xBIOS v1.32LE/1.36XT

Понятие резидента

В ПЗУ xBIOS реализована так называемая функция резидента. Суть ее заключается в программном перехвате нажатия кнопки RESET или обращения к адресу 0x0000 в ПЗУ TR-DOS и vTR-DOS и передаче управления специальной резидентной программе, сохраненной особым образом в верхней памяти, если таковая, естественно, там обнаружится. И только в случае отсутствия в памяти резидентной программы, ПЗУ будет выполнять стандартную процедуру запуска стартового меню (в случае нажатия RESET), или автозапуска файла boot <B> в случае рестарта TR-DOS или vTR-DOS. Функция резидента не является нововведением именно xBIOS. Она была реализована в ПЗУ еще на ПК ATM-turbo 1, и только потом была перенесена на ATM-turbo 2/2+, где успешно применялась в стандартных ПЗУ 1.07.1x.

 

Самой известной программой, еще со времен ATM-1 использующей функцию резидента, по праву является файловая оболочка Honey Commander. При запуске какой-нибудь программы она сохраняет себя в качестве резидента в верхней памяти, а потом перезапускается автоматически по нажатию на RESET (что является очень удобным, учитывая тот факт, что большинство программ под ZX48/128 не имеют нормального выхода в систему), одновременно сохраняя копию экрана последнего момента перед сбросом.

 

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

 

Итак, резидент хранится в странице ОЗУ 0x1F. Когда-то давно, на компьютерах ATM-turbo 1 (v4.xx) и ATM-turbo 2 (v6.xx), у которых было всего 512Кб ОЗУ, это была самая последняя страница памяти. Но с появлением ATM-turbo 2+ (v7.xx) память увеличилась до 1024Кб и последней страницей ОЗУ стала 0x3F. Но резидент для совместимости со старыми программами править не стали (тем более, что не всегда на ATM-turbo 2+ ставили все 1024Кб. Часто по различным причинам обходились только 512Кб). Так и располагается сейчас резидент посреди всего ОЗУ в странице 0x1F.

 

Структура резидентной страницы

 

Чтобы программа, помещенная в страницу 0x1F была распознана как резидент, она должна быть оформлена специальным образом. В соответствие с этим, страница имеет следующую структуру (далее указывается смещение от начала страницы):


Байт 0x0000 – код 0xC3 (команда JP nnnn)

Байты 0x0001-0x0002 – адрес перехода для JP nnnn (рассчитывается по формуле:

0xC000+относительный адрес начало программы в странице).

Байты 0x0003-0x3FFC– свободное место непосредственно под программу.

Байт 0x3FFDконтрольная сумма (КС) всей страницы(то есть, с 0x0000 до 0x3FFF)

При создании резидента КС рассчитывается по следующему алгоритму:

    ld hl,0xaa55
    ld (0xfffe),hl
    xor a
    ld (0xfffd),a
    ld hl,0xc000
hook_crc_loop
    add a,(hl)
    adc a,0x00
    inc hl
    bit 7,h
    jr nz,hook_crc_loop
    neg
    ld (0xfffd),a

Байт 0x3FFE – всегда должен быть равен 0x55.

Байт 0x3FFF – всегда должен быть равен 0xAA.

 

Скомпонованная таким образом страница будет успешно распознана как резидентная и будет начата процедура запуска резидента, которая состоит из следующего:

 

1) По адресу 0xC000 включается резидентная страница 0x1F.

2) Передается управление резиденту на адрес 0xС000, где должна располагаться команда резидента JP nnnn.

3) Перед передачей управления по адресу 0x8000 в обеих картах памяти (и при ROM2=0, и при ROM2=1) включается страница 0x02 ОЗУ.

 

После передачи управления резиденту архитектура выглядит так:

 

1) Расположение стека (значение SP) – не определено. Остается на усмотрение резидента.

2) Карта памяти помимо адреса 0x8000 - 0xBFFF (и страницы 0x1F запущенным резидентом по адресу 0xС000) – не определена. Также остается на усмотрение резидента.

3) Состояние палитры не определено. Также остается на усмотрение резидента.

 

Прерывания находятся в режиме 2. Включены. Вектор прерывания равен 0x82FF (I=0x82). Таким образом прерывания должны быть либо запрещены, либо, если работа с ними в короткий период работы резидента (пока он устанавливает основную программу) необходима, например, для установки палитры, то необходимо установить по адресу 0x82FF-0x8300 адрес подпрограммы обработчика прерываний (в резиденте Honey Commander там стоит указатель на ближайший RET).

 

Таким образом, программист при разработке резидента не связан никаким правилами и ограничениями, так как резидент не привязан ни к какой операционной системе и нее обязан учитывать ее особенности. Какова будет конфигурация компьютера после рестарта в резидент, определяется самим резидентом.

 

Самое частое и перспективное применение резидента – сохранение с последующим восстановлением после рестарта различных ОС или оболочек. Однако в таких случаях объема одной страницы 0x1F может не хватить. Тогда для хранения избыточной информации используются соседние страницы. Например, Honey Commander использует под резидент страницы 0x1F, 0x1E, 0x1D и 0x1C. А в vTR-DOS под резидент на всякий случай зарезервированы 5 страниц (исключены из RAM-диска): 0x1F, 0x1E, 0x1D, 0x1C и 0x1B.


ПРИЛОЖЕНИЕ 6:
Адаптация HONEY-Commander v4.00 для работы с xBIOS.

Как известно, возможность использования ПЗУ, большего, чем 64Кб, была заложена изначально еще МикроАРТ - фирмой-создателем ПК ATM-turbo 2+. Ими же был разработан стандарт расширения ПЗУ, по которому новые страницы присоединяются ниже уже существующих. Однако, в процессе разработки xBIOS выяснилось, что в одной из программных разработок МикроАРТ – HONEY-Commander v4.00 допущена ошибка. Вследствие этого, при переустановке карты памяти нарушается данный принцип. Это привело к тому, что HONEY может неправильно работать с прошивками, большими чем 64Кб. Ошибка проявляется при вызове функции резидента, нормальное действие которой становится невозможной.

 

Чтобы исправить этот недочет, надо в теле основного файла HONEY-Commander v4.00 сделать:

 

По смещению 0x1E38 заменить байт 0x9D на 0x81

По смещению 0x1E3C заменить байт 0x9F на 0x83

 

После проведенных изменений HONEY-Commander будет без проблем работать с ПЗУ любого объема от 64Кб до 1024Кб.

 

ПРИЛОЖЕНИЕ 7:
Адреса и функции процедур загрузчика с CD-ROM.

Универсальный загрузчика с CD-ROM располагается в ПЗУ TR-DOS v5.04R по адресу 0x33A0. Все функции загрузчика работают с устройством Slave!!!

 

BOOTCD (0x33A0) процедура загрузки и запуска файла AUTORUN.ZX из главного каталога CD-ROM диска. Будет вызываться из главного меню для автозагрузки систем с CD-ROM.

Пока вызывается в случае отсутствия загрузчика системы с жесткого диска master в процедуре загрузки системы через опцию загрузки в главном меню.

ТО ЕСТЬ – ЕСЛИ НЕТ ЗАГРУЗЧИКА СИСТЕМЫ НА ВИНТЕ, ВЫЗЫВАЕТСЯ ЗАГРУЗЧИК СИСТЕМЫ С CD-ROM. Если нет диска или ошибки - рестарт TR-DOS.

При всех ошибках переход на 0x0000 – рестарт TR-DOS!!!!

При успешной загрузке:

SP=0x6000 – стек на него кладется 0x6000 и RET в AUTORUN.ZX ,

DI – прерывания запрещены

A= 0xB0 (slave)

HL= 0x0008 доступные видеорежимы (EGA 320х200)

DE=0x00fb ;звук и язык

BC=0x0101 ;контроллер и клон (ATM IDE/Turbo 2+ (v7.xx))

Клавиатура переключается на Синклер-режим (механическая)

 

Другие процедуры.

INDVSL (0x360c) - инициализация устройства на выходе:

;флаг z - O.K.

:флаг c - ошибка A=0 нет Slave-устройства A=1 не ATAPI CD-ROM устройство

Устанавливается 1Х скорость чтения!

TOC (0x3432) - проверка наличия диска и устройства (не использует буфера!!)

;не портит память буфером !!!

;на выходе флаг С - ошибка

;если открыт трей А=0x71

;если нет диска - А=0x70

;NC – О.К. A= тип диска (байт типа диска)

;0x01 – data - данные

;0x02 – audio - аудиодиск

;0x03 – combo – комбинированный диск

;0x21,0x24 – multisess – мультисессионный и прочее.

Используйте эту процедуру для раскрутки диска. Она не портит память!!!

 

INFO (0x34e7) ;чтение ГЛАВНОГО каталога (16-й сектор) в буфер HL. Читается только 1 сектор!!

 

FIND (0x3474) ;поиск описателя файла в памяти по модели (вспомогательная процедура для поиска файла в прочтенном каталоге)

;HL - адрес буфера (каталога)

;DE - адрес модели

;B - длина буфера в блоках !!! (для сектора =8)

;C - длина модели в байтах (для файлов - включая и точку!!)

;на выходе:

;флаг С - ошибка при поиске модели код ошибки - 5 в ак.

;иначе модель найдена

; BCDE - 32-х битный размер файла – берется из описателя

; HL - адрес места файла на диске (32 бита ISO – 4 байта начиная со старшего)

По этому адресу вы можете работать со всем описателем файла.

 

LOADSEC (0x34b0) ;чтение секторов в память

;HL – куда читать

;A - кол-во секторов для чтения

;CBED – номер (адрес на диске) C- самый старший D – самый младший !!!! начального сектора.

Диск должен быть раскручен для исключения ошибок!!!

 

RSEC (0x3503) ;чтение нужного сектора (2048 байт) по адресу в hl

;de - адрес переменной сектора для пакета 4 байта адреса на диске начиная со старшего

Как правило, берется из описателя файла (смотрите FIND)

;hl - адрес буфера для чтения

 

read ( 0x3511) ;чтение данные 2048 байт (например сектора) по адресу в HL

;Команда для получения нужных данных должна быть передана заранее

 

TRADE (0x353a) - чтение 2 байт в HL из блока данных (2048 байт) со смещением +2 (буфер не использует)

;Команда для получения нужных данных должна быть передана заранее

(используется для чтения состояния привода и диска в TOC в L).

 

regrom (0x356d) ;передача из регистров CBED (адреса сектора на диске) пакета чтения сектора через стек. После передачи пакета необходимо прочитать данные (2048 байт)

 

sendrom (0x357e) ;передача пакета чтения сектора через стек

;на входе DE - адрес переменной сектора для пакета 4 байта адреса на диске начиная со старшего. Как правило, берется из описателя файла (смотрите FIND). После передачи пакета необходимо прочитать данные (2048 байт).

 

SEND_AT (0x35aa) ;передача пакета ATAPI hl - его адрес. Передаем любой пакет ATAPI.

 

BASY (0x35df) ;инициализация slave и ожидание готовности устройства к приему команд.

Флаг С – ошибка А=0 нет устройства

Используется в процедурах ожидания готовности устройства к обмену данными.

 

NOL (0x3605) ;Пустая команда ATAPI. Используется, как правило, перед передачей пакета ATAPI. Вызывается без параметров.

 

Простейший пример запуска системы с CD-ROM:

;Basic-48 (vTR-DOS – OFF!)!!!!

ld bc,0x33a0

push bc

jp 0x3d2f

Даже если диск стоит при открытом трее!

(Корсунин Ю.А.)

 

История версий vTR-DOS

vTR-dos 2.4SL (в разработке)

 

- адаптация для pentagon-1024SL, особенности реализации :

- рекомпиляция базовой версии vTR-dos 2.4XT

- в этой адаптации не поддерживается работа с дисками одинарной плотности.

 

vTR-dos 2.5XT (в разработке)

 

- система driver management system (DMS)

- обновлена документация

 

vTR-dos 2.4XT

 

- релиз-версия для 128к ПЗУ

- исправлен автозапуск с HDD

- устранена возникающая на недоработанных платах несовместимость короткой адресации порта 0xFD

- новая подкоманда set_hardware_init.boot

- вместо гибридного управления защитой памяти от версии 2.4LE сделано полноценное

- ориентировано на работу с Setup Utility 1.0

- теперь в качестве пользовательских страниц RAM-диска можно указывать страницы пзу. Сделана дополнительная карта ROM-памяти.

- обновлена документация


vTR-dos 2.4LE

 

- релиз-версия для 64kb ПЗУ

- исправлен недочет с автостартом vTRD A и возникающей при этом путаницей с профилем памяти

- развитие остановлено

- обновлена документация

 

vTR-DOS 2.4

 

- версия "округлена" :)

- сделано новое загрузочное меню.

- исправлена проблема с неработающей клавиатурой в ПЗУ vTR-DOS, если во время запрещённых прерываний был нажат RESET.

- исправлена адресация RAM-диска. Теперь виртуальный диск может адресовать до 84 цилиндра включительно. из таблицы удалена 0x38 страница с системными переменными. RAM-диск теперь находится до 0x36 страницы включительно.

- доработана команда set_hardware_init.hot

- добавлена защита системной страницы.

- добавлена защита памяти от доступа иных программ. К сожалению, при использовании honey commander эту возможность необходимо отключать. Два режима работы : ignore/abort.

- добавлена блокировка системного порта. Два режима работы: ignore/abort.

- добавлена возможность блокирования верхней памяти. Введены три профиля : 128кб, 512кб, 1024кб.

- переделан set_io_hook

- создано новое меню

- обновлена документация

 

vTR-DOS 2.03 beta

 

- исправлены ошибки

исправление под honey commander 4.00 - более гибкая система определения прерываний

 

- добавлено

состояние прерываний запоминается в верхней памяти.

 

- известные ошибки

если нажать сброс при запрещённых прерываниях, в дальнейшем может не работать опрос клавиатуры.

не работает real comander 1.96 (di:halt)

не загружается quick comander 3.05 (кривой загрузчик)

bestview 2.17 нормально работает только на виртуальной дискете :) не работает просмотр на реальном диске

 


vTR-DOS 2.02 beta

 

- исправлены ошибки :

резидент

вход bios1

set_hardvare_init.rst_0

 

- добавлено :

обязательное EI после отработки процедур bios

подкоманда set_hardvare_init.hot

 

- обновлена документация

 

vTR-DOS 2.01 beta

 

- исправлены ошибки

- доделано большинство функций bios

-обновлена документаци

Наши адреса

Интернет сайт: http://www.nedopc.com

Сайт поддержки ATM: http://atmturbo.nedopc.com

Электронные адреса:

max_timonin@mail.ru (Тимонин Максим)

chunin@mail.ru (Чунин Роман).

Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. (Радаев Юрий)


Автор благодарит за предоставленные материалы по резиденту Юрия Корсунина. А также выражает глубокую благодарность ukms[z] за разработку прошивки xBIOS, без которой не было бы и этой книги.


NedoPC group, Тимонин Максим, 2006 год.

Исправления документации DimkaM(NedoPC group) 2021г.

You have no rights to post comments