Важная информация
Страница 1 из 10 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 96

Тема: Адаптация программ к системе +3DOS

  1. #1

    По умолчанию Адаптация программ к системе +3DOS

    Введение
    Когда-то в далекие 90-е, а может и ранее, многим из нас доводилось читать русскую литературу по ZX-Spectrum. Это были всевозможные справочники по системным программам, описание игр, описание железа и многое другое. Авторы этих книг часто в предисловии рассказывали немного о истории ZX-Spectrum. Обычно там говорилось о его создателе К. Синклере, о цене компьютера, которая составляла около 100 фунтов, а также перечислялся весь модельный ряд (ZX-Spectrum, ZX-Spectrum+, ZX-Spectrum+2, ZX-Spectrum+2A, ZX-Spectrum+2B и ZX-Spectrum+3) с описанием технических характеристик. Не знаю как у многих, а у меня описание этих моделей вызывало некоторое недоумение. Думаю многие из нас в те годы, кто не имел непосредственного отношения к клонированию ZX-Spectrum в России полагали что то, что у них есть в их «ящиках» со встроенным дисководом, на которых иногда даже была надпись «ZX-Spectrum», и есть настоящий ZX-Spectrum. Я лично не застал Эру магнитофонных вариантов с консольным исполнением в виде небольшой или даже большой клавиатуры, но полагаю, что даже при наличии всяких надписей на корпусе отличных от ZX-Spectrum восприятие было таким же. В литературе по железу часто ходили названия: «Ленинград», «Пентагон», «Москва», как-то смутно напрашивалось объяснение происхождения этих самодельных компьютеров, особенно когда встречались названия городов. Но тут обычно вмешивалось название «Пентагон», и путало все карты, так как оно казалось чем-то ультрамодным и иностранным. Однако по прошествию некоторого времени, когда каждый из нас обзаводился все большим количеством литературы, становилось понятно, о чем идет речь, и откуда берутся все эти разнообразные названия.

    Обратив внимание в литературе на описание фирменных моделей ZX-Spectrum, многие из нас с горечью осознавали, что в России распространены всего лишь русские подделки настоящего Спектрума. О настоящем Спектруме оставалось только мечтать. Никаких картинок, фото настоящего Спектрума в литературе практически не встречалось, только описание. После долгой бравады о Синклере авторы обычно слезно начинали писать о крахе его компании, а потом заканчивали на мажорной/минорной ноте о моделях ZX-Spectrum+2 и ZX-Spectrum+3, которые уже выпускала другая фирма Amstrad.
    Недавно автор (ваш покорный слуга) наткнулся на международный интернет аукцион eBay, на котором в большом разнообразии представлены фирменные модели Спектрума, в том числе ZX-Spectrum+2 и ZX-Spectrum+3. Загорелся этой идеей и приобрел ZX-Spectrum+3. После того, как я подержал в руках ZX-Spectrum+3 у меня возникло некоторое разочарование. Нет, я, конечно, видел его перед покупкой на фото, но в руках это несколько другое. Я думаю это связано с тем, что современная компьютерная техника уже ушла слишком далеко, и мое восприятие просто сразу не успело перестроиться. Со временем все встало на свои места. Однако помимо эстетического восприятия возникли также и технические проблемы, которые несколько омрачили мои первоначальные ожидания. Но, как и в первом случае, через некоторое время стало понятно, что и они преодолимы, причем процесс их преодоления приносит еще больше удовольствия, чем просто нормальное использование.
    Одной и самой главной технической проблемой стало наличие у ZX-Spectrum+3 другой дисковой операционной системы, отличной от той, что использовалась в России. Как многим известно, у нас была распространена, причем монопольно, система TR-DOS, а в ZX-Spectrum+3 используется неизвестная +3DOS. Кроме того, дисковод у ZX-Spectrum+3 оказался тоже нестандартный, вместо ожидаемого 3,5’ – 3’.

    Электрически подключить дисковод 3,5’ не составляет труда подробное описание этой проблемы и ряда других можно найти здесь.
    Несмотря на то, что корпус ZX-Spectrum+3 не позволяет штатно встроить в него дисковод 3,5’, я нашел несколько конструктивных решений. При небольших доработках корпуса самого дисковода и использовании некоторых дополнительных деталей можно встроить дисковод 3,5’ без каких-либо изменений (порчи) фирменного корпуса ZX-Spectrum+3, причем все будет выглядеть красиво и аккуратно, как заводской вариант. Но эта задача заслуживает отдельного рассмотрения и будет описана в другом разделе.
    Как видно из названия этот раздел посвящен адаптации программ к системе +3DOS. Очевидно, что без решения этой проблемы ZX-Spectrum+3 не сможет получить в России вторую жизнь! Конечно, на WOS имеется архив образов дисков +3, но как их перевести на реальные дискеты неизвестно, я по крайней мере не нашел ни одной утилиты, которая бы это делала. Все утилиты, в основном, делаю обратную операцию, которая понятно не представляет для нашего случая никакого интереса.* Кроме того, имеющийся софт на +3 образах (dsk) не актуален на сегодняшний день, так как это, в основном, игры, которые неизвестны российскому пользователю. Возможно, там и есть что-то такое, что в те далекие времена могло бы заинтересовать, но сегодня проникнутся старыми неизвестными, неполюбившимися игрушками крайне сложно. Это ставит всю затею об использовании ZX-Spectrum+3 под сомнение. На образах +3 дисков встречаются (в небольшом количестве) и известные игры, однако их перенос на реальные диски осложнен применением в них фирменных защит. Описание взлома этих защит в литературе отсутствует. Поэтому, очевидно, напрашивается перенос софта из образов TR-DOS или кассет, где игры, во-первых, могут быть незащищены, а во-вторых многие защиты хорошо описаны в русской литературе, например, книга Родионова «Адаптация программ к системе TR-DOS» или книга «Тайники ZX-Spectrum». Кто читал эти книги согласится со мной, что тот путь, который там предложен во многом может быть распространен и на перенос игр из TR-DOS или кассет в систему +3DOS.

    Чтобы окончательно убедить читателя в целесообразности развития платформы, а значит и в необходимости решения поставленной задачи, я перечислю еще несколько неоспоримых достоинств ZX-Spectrum+3 и аспектов его актуальности для андеграунда.
    Основным достоинством является фирменное исполнение, то есть возможность пользоваться реальной, настоящей, официальной версией Спектрума. В ситуации андеграунда это усиливается такими посылами, как: раритет, ностальгия, мечты детства, то есть все те аспекты, на которых держится сам андеграунд. Эта модель в отличие от других фирменных моделей обладает необходимыми для разумных андеграудных пользователей техническими параметрами: 128к, музыкальный сопроцессор, поддержка дисковода, RGB выход, порты джойстика, качественный БП, системный разъем, порт принтера и многое другое, при этом качество исполнения достаточно высокое по сравнению даже с другими платформами, не говоря уже о Синклеровских моделях Спектрума. Это и отличная клавиатура, несомненно, лучшая, чем у других фирменных моделей Спектрума или их клонов, отличное качество печатной платы (лично проверял при экспериментах, хорошо паяется и не рвется металлизация даже после многократной перепайки деталей), заводской монтаж, наличие ULA и импортные радиодетали.

    Интегрированная DOS в OS. Импортные аналоги DOS, а также прижившаяся в отечестве TR-DOS были больше надстройками над OS чем самими OS с поддержкой дисковода со всеми вытекающими последствиями. Это на первый взгляд может показаться пустяком, так как все уже привыкли к выкрутасам TR-DOS, но поверьте, стоит только немножко поработать с +3DOS, и вы станете ее безоговорочным поклонником. Эта дисковая система со стороны очень сильно напоминает MS-DOS. Поддержка расширения файлов, вывод информации об объеме файла в Кб, а не в секторах, как у TR-DOS, отсутствие упаковки диска, так как файлы пишутся в любое свободное место, вывод файлов в каталоге по алфавиту, что при разумной организации имен позволяет легко объединять файлы одной программ и не мучится вопросом, когда и после какого файла пишется тот или иной. Использование «*» позволяет работать с группой файлов или файлами одной программы, удалять, копировать, переносить на другой диск без использования менеджера, делая это через бейсик. При этом операторы в бейсике не сопровождаются дополнительными синтаксическими надстройками RANDOMIZE USR и т.п., регистр в именах файлов не имеет значения.

    В целом эта модель способна удовлетворить любителей наиболее успешных моделей 128К и его клона Пентагон128. По сути, ZX-Spectrum+3 является более удачной, качественной версией этих моделей. Главное достоинство ZX-Spectrum+3, отличающее его от дисковой версии Пентагона128 – это наличие заводского консольного корпуса. В реалиях андеграунда установить в квартире ящик или даже корпус от PC непросто. Я знаю многих людей, которые стесняются даже приличного HighTower у себя дома, так как он портит интерьер, занимает место, а тем более при использовании современного телевизора вообще непонятно к какому боку его прислонять. ZX-Spectrum+3 в отличие от этих «ящиков» можно спокойно спрятать в тумбочке или в шкафу, так что никто не будет даже знать о вашем шизофреническом увлечении… Наличие PC клавиатуры, также сводит на нет андеграундные настроения, так как приближает Спектрум к PC. Пентагон128, облаченный в клоновские консольные корпуса, если такие сейчас можно найти, также проиграет хотя бы по качеству клавиатуры, да и выносной дисковод не сделает ему чести! Что касается фирменного 128к, то там все ясно, плохая клавиатура, отсутствие DOS и дисковода, Синклеровское качество, хотя оно, возможно, и, скорее всего, лучше, чем у клонов…

    А что же недостатки? В чем проигрывает ZX-Spectrum+3 другим моделям? Первое что следует отметить, необходимость адаптации софта. Однако это практически единственный существенный аргумент против ZX-Spectrum+3, поэтому решению проблемы адаптации программ к +3DOS и посвящен этот раздел. Как будет показано далее, эта проблема вполне решаемая и не так страшна, как может показаться со стороны. К другим недостаткам можно отнести ошибки в ПЗУ, которые частично решены в новых версиях прошивок, (см. ссылку выше), а те которые не решены можно обойти простым и красивым способом. Также следует отметить немалую стоимость ZX-Spectrum+3. Купить себе его может только взрослый человек, так как это связано с покупкой по международной карте, регистрацией на интернет аукционе, в платежной системе PayPal и множеством других проблем. Однако следует также отметить, что большинство андеграундистов – это люди в возрасте 25-40 лет, многие из них при желании вполне способны преодолеть этот барьер и, возможно, даже получат удовольствие от процесса покупки таким способом. По крайней мере, этот опыт не пройдет бесследно и может понадобиться в жизни для других целей.
    Если я Вас убедил в актуальности идеи или Вам просто стало интересно, то предлагаю перейти к основной части.

    Выбор источника для переноса программ в систему +3DOS
    Как отмечалось во введении, из-за применения защиты от копирования целесообразно переносить софт на реальные диски +3DOS не с образов фирменных дискет (dsk), а с образов кассет (tap, tzx) или образов TR-DOS (trd, scl). Однако и на этих образах программы могут быть серьезно защищены. Если вы пользователь Спектрума со стажем, плюс профессиональный программист, вы скорее посмеетесь над автором, так как большинство из применяемых защит, когда-то в далекие детские годы было вами преодолено, а возможно даже некоторые из них были написаны при вашем участии. Если это так, то можете смело переходить к рассмотрению следующих вопросов этого раздела. Для остальных рекомендую использовать местные коллекции, которые в нашей стране накоплены в большом количестве. Практически в каждом городе была своя коллекция софта под Спектрум. При чем многие программы были взломаны для облегчения их копирования или при переносе с кассеты на диск. Поэтому главным источником для переноса софта являются образы scl и trd местных коллекций. Я вспоминаю коллекцию своего города, на ней практически 80% игр было со взломанным загрузчиком. Однако эта коллекция была безвозвратно утрачена и мне в своих изысканиях пришлось обратиться к коллекции из Волгодонска, московской коллекции Алексея Дупанова, а также к коллекциям на сайте TR-DOS и WOS.

    Конечно сунувшись в первую попавшуюся коллекцию и выбрав из нее первую попавшуюся версию необходимой для вас игры, вы, скорее всего, столкнетесь с тем, что загрузчик ее все же защищен. Не отчаивайтесь, нужно просто поискать лучше и найти хотя бы 3-4 версии этой игры порыскав по всем доступным вам коллекциям. Я уверен, что вы найдете хотя бы одну, которая если и защищена, то не сильно и книги «Тайники ZX-Spectrum» вам хватит, чтобы ее преодолеть.

    Написание загрузчика для +3DOS
    После снятия защиты вам необходимо создать новый загрузчик программы на реальном диске +3DOS. Но я все же рекомендую работать сначала с образами dsk, используя при этом какой-нибудь из известных эмуляторов, например, RealSpectrum. Забегая вперед, скажу, что вам все равно, скорее всего, придется при переброске на реальный диск воспользоваться услугами образа dsk, плюс необходимо хранить на PC адаптированные версии программ, что удобно делать именно на dsk. А для начинающих я вообще порекомендую вначале заставить игрушку работать в системе TR-DOS с написанным вами с нуля загрузчиком. Это позволит психологически оторваться от +3DOS и не кивать в случае неудач на эту систему. Опыт показал, что если программа пошла у вас в TR-DOS, то и в +3DOS она будет работать с большой степенью вероятности. Таким образом, после написания нового загрузчика в TR-DOS перенос игры в систему +3DOS будет всего лишь делом техники!
    Рассмотрим несколько примеров написания загрузчика.
    С чего начать? Ну конечно, какой же Спектрум без игры ELITE?
    В поисках подходящей версии для переноса я перерыл несколько архивов и уже было отчаялся, но вдруг на WOS нашел образ tzx с какой-то версией под 128к. Загрузчик оказался незащищенный!

    Вот его листинг:

    5 SAVE “ELITE” LINE 10
    10 CLEAR 65535
    15 BORDER 0: PAPER 0: INK 7: CLS
    20 LOAD “” CODE: PRINT AT 20,0: LOAD “” CODE
    30 RANDOMIZE USR 28672

    Давайте разберем его построчно. Кто читал книгу Родионова, наверняка уже догадался, что это простейший классический загрузчик. По первой строке, которая имеет номер 5 нетрудно догадаться, что здесь уже кто-то серьезно поработал и практически все сделал за нас! Очевидно, что первая строка сделана для страховки. Видимо опыт автора, написавшего этот загрузчик, подсказал ему это ход. Во-первых, после запуска в случае неудачи компьютер может уйти в ресет, а во-вторых, в случае успеха вернутся назад в бейсик будет невозможно, поэтому написанный загрузчик безвозвратно исчезнет. Во избежание этого, в первой строке под номером 5 загрузчик сам себя предварительно сохраняет с автозапуском со строки под номером 10.

    В следующих строках 10 и 15 задается RAMTOP и атрибуты экрана. Честно скажу, я так и не понял, почему значение RAMTOP=65535. Я в начале не обратил на это внимание и задавал низкий RAMTOP исходя из адреса, в который грузится кодовый блок. При этом после загрузки портился шрифт, некоторые буквы затирались, и в место них печаталась всякая «бяка». Возможно, генератор шрифта находится в начале или конце кодового блока, что при неправильной организации памяти приводит к его частичной порче.
    Вторым неразрешимым вопросом оказалась надпись на заставке – 128к, я так и не понял, чем эта версия отличается от 48к, так как по объему игра не превышает 48к и грузится в основную страницу. Возможно, это как-то связано с RAMTOP=65535, если вы сможете найти ответы на эти вопросы хорошо, но в любом случае на решении поставленной задачи это никак не отразится. В строке под номер 20 последовательно классическим образом грузятся два блока, первый – заставка и второй – кодовый. Оператор PRINT AT 20,0 по всей видимости предназначен для установки позиции печати имени последнего кодового файла. На сколько это необходимо, трудно сказать, автору загрузчика было виднее.

    Далее чтобы посмотреть адреса загрузки этих кодовых файлов можно воспользоваться простой командой +3DOS:

    Cat “t:”

    При этом на экран будет выведено следующее:

    “ELITE ” LINE 10 (BASIC)
    “a ” CODE 32768,6912
    “elite ” CODE 24648,40801

    Этой информации наряду с RANDOMIZE USR 28672 вполне достаточно для написания загрузчика и дальнейшего копирования файлов на образ диска. Ранее отмечалось, что для новичка целесообразнее заставить работать игру с вновь написанным загрузчиком вначале в TR-DOS. Напишем загрузчик для этой системы:

    10 CLEAR 65535
    20 BORDER 0: PAPER 0
    30 RANDOMIZE USR 15619: REM: LOAD “elitescr” SCREEN$
    40 RANDOMIZE USR 15619: REM: LOAD “elitedat” CODE
    50 RANDOMIZE USR 28672

    Из листинга видно, что загрузчик отличается, главным образом, введением имен файлов, о которых будет подробно рассказано ниже, и добавлением дополнительной синтаксической надстройки RANDOMIZE USR 15619: REM, необходимой для инициализации системы TR-DOS. Далее если, как в нашем случае, файлы находились на образе tzx или tap перекидываем их на образ trd, сохраняем там же написанный загрузчик и запускаем его. О чудо все работает!!! Путь к системе +3DOS открыт! Теперь необходимо всего лишь перебросить файлы с образа trd или исходного tzx на образ dsk и модифицировать написанный для TR-DOS загрузчик.

    Вот как это делается:

    10 CLEAR 65535
    20 BORDER 0: PAPER 0
    30 LOAD “elite.scr” SCREEN$
    40 LOAD “elite.dat” CODE
    50 RANDOMIZE USR 28672

    Да, да! Вы правы, нет ничего проще! В листинге исчезли только эти неуклюжие синтаксические надстройки RANDOMIZE USR 15619: REM. По ходу моего повествования вы наверное все больше и больше убеждаетесь, что нет ничего страшного и опасного в системе +3DOS, а даже наоборот она вполне даже дружелюбна к пользователю!
    Следует также отметить об изменении имен файлов. Вместо “elitescr” и “elitedat” появились “elite.scr” и “elite.dat”, то есть были введены расширения файлов, которые поддерживает +3DOS. Очень трудно было удержаться от использования этой положительной особенности +3DOS, тем более мы все к этому привыкли по опыту работы с MS-DOS. Более подробно о введении расширения будет сказано ниже.
    Теперь рассмотрим второй показательный случай, когда игра расположена непосредственно на образе TR-DOS диска. Для примера я возьму игру Total Eclipse2 из коллекции Алексея Дупанова диск №60.

    Листинг исходного загрузчика в TR-DOS следующий:

    10 BORDER VAL “0”: PAPER VAL “0”: CLEAR VAL “24499”
    20 RANDOMIZE USR VAL “15619”: REM: LOAD “to1” CODE 4e4
    30 RANDOMIZE USR 4e4
    40 RANDOMIZE USR VAL “15619”: REM: LOAD “to2” CODE
    50 RANDOMIZE USR VAL “15619”: REM: LOAD “to3” CODE 6e4
    70 DRAW USR 6e6, USR VAL “24500”, USR VAL”27228”

    Несмотря на то, что загрузчик фактически незащищен, в отличии от кассетной версии он достаточно непросто читается. Однако многим известно, что это связано с проблемой RAMTOPа, о которой так хорошо в свое время рассказал Родионов. Кто об этом ничего не слышал, вкратце расскажу несколько необходимых для понимания и чтения листинга загрузчика моментов. Дело в том, что в системе TR-DOS загрузчик раздувается до неприличных размеров из-за введения неуклюжих синтаксических надстроек RANDOMIZE USR 15619: REM, поэтому области памяти, выделяемой под программу загрузчика на бейсике, становится недостаточно. Её, конечно, можно увеличить задав больший адрес в RAMTOPа оператором CLEAR. Однако, как правило, это сделать невозможно, так как кодовый файл обычно грузится в память сразу за бейсик загрузчиком. Понятно, что в силу малого объема оперативной памяти Спектрума производители игр практически не оставляли никаких свободных мест. Поэтому при переходе от кассетной версии к дисковой помимо модификации загрузчика, горе адаптёры, как правило, изощрялись и ухищрялись всевозможными способами, чтобы сэкономить эту несчастную память. Отсюда появляются всевозможные операторы VAL, которые, несмотря, на увеличение длины в текстовом виде, позволяют несколько сократить объем бейсик строки за счет представления чисел в символьной форме. Появление непонятных 4е4 и 6е4 связано с аналогичной экономией памяти, но за счет уже представления числа в экспоненциальной форме, то есть 4e4 и 6e4 есть ничто иное, как 40000 и 60000. Экономия памяти и в символьной и в кодовой части строки бейсика очевидна. Таким образом, исходный загрузчик можно отчистить от всех этих выкрутасов и представить в удобной для понимания виде:

    10 BORDER 0: PAPER 0: CLEAR 24499
    20 RANDOMIZE USR 15619: REM: LOAD “to1” CODE 40000
    30 RANDOMIZE USR 40000
    40 RANDOMIZE USR 15619: REM: LOAD “to2” CODE
    50 RANDOMIZE USR 15619: REM: LOAD “to3” CODE 60000
    70 DRAW USR 60000, USR 24500, USR 27228

    После запуска такого загрузчика получаем вполне ожидаемый результат – сообщение «4 out of memory», так как зачем бы автору изгаляться, если бы проблема RAMTOPа для этой программы не существовала?
    Но нас эта надпись не должна смущать, так как это проблема TR-DOS. Для нас важно разобраться, что и как грузится и убедиться, что в загрузчике нет никаких подводных камней и прочих неожиданностей. Для этого, воспользовавшись операторам STOP, внедряя его между характерными строками загрузчика пошагово проверяем, как и что загружается. Например, добавляем строку 25 STOP. Запускаем, загружается файл to1 и выводится сообщение Ok. Затем просто без номера строки вводим RANDOMIZE USR 40000 и наблюдаем появления заставки с «сортирной» отметкой Алексея Дупанова. Становится ясно, что to1 – это заставка, которая инициализируется по адресу ее загрузки.
    Идем дальше, внедряем 55 STOP, грузятся файлы to2, to3. Теперь обращаем внимание на строку под номером 70. Вот это да! А где же адрес инициализации программы RANDOMIZE USR XXXXX? Вместо него какой-то бред. Но приглядевшись внимательнее, многим из вас интуиция подскажет, что это очередной прием для экономии памяти. Я лично так и не смог разобраться на чем этот прием основан, но точно смог установить, что эта строка эквивалентна следующему:

    RANDOMIZE USR 60000
    RANDOMIZE USR 24500
    RANDOMIZE USR 27228.

    То есть идет последовательная инициализация загружаемых блоков, а потом переход в точку входа самой программы! Таким образом, последовательно вводя команды можно установить, что to2 – это основной кодовый файл, который можно предположить декодируется процедурой по адресу 24500, блок to3 – это статический экран игры (рамка, которая никогда не меняется) она инициализируется по адресу загрузки 60000. Ну и адрес 27228 есть точка входа.
    Для копирования файлов и для раскрутки исходного загрузчика, вам будет полезна информации о длине и адресах загружаемых блоков, о ней можно узнать при помощи команды TR-DOS – LIST.
    Исходя из проведенного анализа исходного загрузчика, загрузчик программы в системе +3DOS будет следующий:

    10 BORDER 0: PAPER 0: CLEAR 24499
    20 LOAD “t_ecl1.scr” CODE 40000
    30 RANDOMIZE USR 40000
    40 LOAD “t_ecl.dat” CODE
    50 LOAD “t_ecl2.scr” CODE 60000
    60 RANDOMIZE USR 60000
    70 RANDOMIZE USR 24500
    80 RANDOMIZE USR 27228

    В очередной раз можно убедится в простоте и удобстве, которые появляются в +3DOS. Важно также отметить, что проблем с RAMTOPом в +3DOS не возникнет, так как неуклюжие синтаксические надстройки не засоряют память Спека, как в TR-DOS. Это позволяет модифицировать даже фирменные игры с кассет без борьбы с RAMTOPом. Кроме того, легко заметить, что если записать игру вместе с загрузчиком с диска +3DOS на кассету она легко пойдет без всяких изменений, так как принятое упрощение в виде пустого имени файла, обусловлено тем, что последние записаны на ленту последовательно и не требуют идентификации по имени. При этом синтаксис не запрещает использовать правильное имя, которое соответствует имени загружаемого с ленты блока. Из этого также можно сделать и обратный вывод, что незащищенная на ленте игра может быть легко адаптирован к системе +3DOS введением всего лишь имен файлов, если оные отсутствуют в загрузчике. Это еще одна крупная капля на мельницу системы +3DOS!

    Перенос файлов на реальные диски +3DOS
    Допустим, вы успешно справились с защитой, написали загрузчик и теперь вам необходимо, как-то перенести файлы программы на реальный диск +3DOS. В последние годы для системы TR-DOS создано много разных файловых менеджеров, при помощи которых можно переносить файлы с одного образа на другой. Но вся проблема в том, что все эти менеджеры писались отечественными программистами, которым до системы +3DOS не было дела, и поддержку образов dsk и реальных дисков +3DOS они попросту не сделали. Поэтому в этой ситуации два пути: либо самому восполнить этот пробел и написать файловый менеджер с поддержкой образов dsk и реальных дисков +3DOS или написать какую-нибудь более простую утилиту, либо осуществить перенос каким-то другим более изощренным способом.
    Для тех, кто не является профессиональным программистом или никогда не писал подобный вещей и не имеет наработанного опыта в этом направлении, разумным будет пойти по второму пути. Нет, нет я не настаиваю если вы считает, что вам по силам написать файловый менеджер и у вас есть на это много свободного времени, то я буду только рад за вас. В этом случае вам можно сразу перейти к чтению заключительной части.

    Оставшейся, я полагаю, многочисленной части читателей я предлагаю альтернативный подход. Очевидно, что перебросить файлы с образов кассет достаточно просто. Для этого можно использовать реальный ZX-Spectrum+3 и преобразованный образ в MP3 файл, файлы с которого можно записать на диск при помощи стандартных команд +3DOS. Такой путь долгий и неудобный, к тому же основной объем программ скорее пойдет с образов TR-DOS, в этом случае лучше воспользоваться эмулятором, поддерживающим все известны и необходимые для работы образы, а также реальные диски +3DOS. Слава Богу, что такой эмулятор существует – это упомянутый ранее RealSpectrum эмулятор. Описание процедуры переноса с образов кассет я опущу, так как это частично будет описано при рассмотрении процедуры переноса с образов TR-DOS.
    И так начнем. Первое что следует порекомендовать это использовать в начале образ dsk а не реальный диск +3DOS, так как это продлит жизнь, как самому диску, так и позволит создать архив адаптированных образов на PC. Далее необходимо создать образ tap, как промежуточный носитель файлов. Это можно сделать при помощи менеджера или эмулятора. Вы, наверное, уже успели догадались, что для того, чтобы перенести файлы с образа trd, необходимо сначала скопировать их на образ tap при помощи эмулятора или любого менеджера файлов, а потом при помощи стандартных команд +3DOS в эмуляторе скопировать их на образ dsk.

    Делается это так:

    10 CLEAR 24500
    20 LOAD “t:”
    30 LOAD “” CODE XXXXX,NNNNN
    40 SAVE “a:name.aaa” CODE XXXXX,NNNNN

    В 10 строке на всякий случай устанавливается RAMTOP, позволяющий безопасно загрузить кодовый блок в память. В 20 строке устанавливается текущее устройство чтения – лента. По идеи можно было бы воспользоваться сразу в строке 30 командой LOAD “t:name” CODE. Синтаксис это допускает, однако в +3DOS допущена досадная ошибка, при использовании этой команды вместо загрузки файла с ленты, начинает выводиться ее каталог – эквивалент CAT “t:”. Однако как видно эту проблему можно обойти достаточно просто. При работе с диском такой ошибки не наблюдается, поэтому в 40 строке простой командой загруженный в ОЗУ файл сохраняется на диск а:.
    Далее, сохранив файлы игры и загрузчик на образ dsk, можно с замиранием сердца проверить работоспособность игр в системе +3DOS. Если игра успешно заработает, следует перейти к заключительному этапу, который заключается в копировании с образа dsk на реальный дик +3DOS. Для этого в эмуляторе в один дисковод вставляется образ dsk, а в другой реальный диск. При этом обязательно сделайте ресет, так как дисковод B по умолчанию не инициализирован! Также рекомендую использовать реальные диски, отформатированные утилитой 22DISK в формате DDSD 706 кб. Такие диски хорошо читаются как на реальном Спектруме, так и ДОС-ой версией эмулятора, которая устойчиво работает при установленном драйвере дисковода и под WIN. Не могу утверждать, но на моей домашней машине версия эмулятора под виндоус с реальными дисками работала крайне глючно, а также форматирование ранее неформатированных под +3DOS дискет в любой версии эмулятора по какой-то причине тоже происходило с глюком. Заканчивая с дискетами, хотелось еще отметить, что необходимо заклеить окошко, которое необходимо для определения диска, как диска обычной плотности, то есть при его заклеивании дисковод станет воспринимать его, как DDSD. Теперь вернемся к копированию файлов. Учитывая особенности системы +3DOS, удобно файлы одной программы называть по алфавиту, так чтобы они при выведении каталога располагались вмести и по старшинству.

    Например, я предлагаю так:

    ELITE
    elite.scr
    elite.dat

    Учитывать регистр необязательно, так как файлы в каталоге всеравно выводятся в верхнем регистре. Важно заметить, что обязательно необходимо, чтобы первые три буквы файлов у одной программы совпадали, тогда они всегда будут рядом. Загрузчик необходимо называть так, чтобы он всегда был выше кодовых файлов, при этом для загрузчиков, наверное, удобно использовать пустое расширение. Это легко выделяет его из обще массы файлов, а также упрощает задачу сделать его выше по алфавиту. Для кодовых файлов удобно использовать расширение, например, scr для экранов, dat для кодовых файлов, sav для файлов отгрузки и т.д. Это компенсирует отсутствие в каталоге информации о типе файлов.

    При умелом назначении имен файлов, лего осуществить их копирование с образа на диск, например в нашем случае это будет команда:

    copy “a:el*.*” to “b”

    Если файлы названы разнородно, то придется копировать их по одному, указывая полное имя. Теоретически возможна команда copy “a:” to “b”, однако она не проходит, когда образ диска 173 кб, а реального диска 706, в этом случае происходит ошибка.
    При желании того, чтобы файл грузился по опции loader в основном меню, необходимо присвоить ему имя DISK по аналогии с boot для TR-DOS.
    Скорее всего, на этом ваши мучения должны закончится. В приложении я выкладываю рассмотренные примеры на образах dsk, которые также были проверены и на реальном ZX-SPECTRUM+3. Желаю успехов в адаптации программ к системе +3DOS!

    Заключение
    В заключении хотелось немного предупредить возможную критику. Сразу оговорюсь, что изложенная идея не относится к фанатичным поклонникам и коллекционерам мегатонного софта, который они практически не запускают на своем реальном Спеке. Также очевидно, что это не относится и к эмуляторщикам, музыкантам с GS и т.д. Эта идея направлена, главным образом, на тех пользователей, которым хочется пользоваться реальным Спектрумом, подключая его к реальному телевизору. То есть по типу игровой приставки, поиграл в любимые игры, пописал программы на бейсике и возможно на ассемблере и убрал с глаз долой, чтобы не мешать текущему быту. Все достоинства ZX-Spectrum+3 для такого использования были озвучены выше. Разумность их очевидна, так как эта модель изначально была создана именно для такого использования. Резюмируя ее положительные свойства можно отметить следующее: эстетический вид, хорошее качество и достаточные для большинства приложений технические характеристики. Необходимое количество софта двумя тремя людьми за год может быть доведено до нескольких десятков, а может и превысит 100. Но лично мне хватит и пару десятков игр, которые я способен осилить в одиночку. План развития платформы, на мой взгляд, заключаются в увеличении адаптированного софта, то есть в обеспечении программной поддержки.

    В мое представление процесс должен идти так:

    1. Адаптация программ с незащищенным загрузчиком
    2. Адаптация программ со слабо защищенным загрузчиком
    3. Адаптация программ с монозагрузчиком
    4. Написание бутов
    5. Адаптация отгрузок на диск (полная дисковая версия игр)
    6. Адаптация программ со сложными кодовыми загрузчиками
    7. Написание своих программ.

    Конечно, что-то может идти в параллель или раньше, все зависит от того, кто и в каком количестве подключится к проекту. Меня, скорее всего, хвати до 4-го пункта и, возможно, с элементами 5-го. Удачи, ждите следующих работ по ZX-SPECTRUM+3!

    ____________________________________________
    * На сегодняшний день удобные утилиты найдены. Читайте здесь.
    Вложения Вложения
    Последний раз редактировалось Addison; 15.04.2017 в 23:52. Причина: Добавлено сообщение
    ZX-Spectrum 128k Only! + TR-DOS

  2. Эти 2 пользователя(ей) поблагодарили Addison за это полезное сообщение:
    vinxru (29.03.2011), Zerios (24.11.2009)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2

    По умолчанию

    Адаптация программ с кодовым загрузчиком и небольшой артефакт +3.
    Развивая начатую тему, привожу еще один характерный пример адаптации к системе +3DOS.
    Многое в нашей жизни делается обычно, когда нужда заставит. Так и в этом случае, адаптировав с десяток ходовых игр преимущественно с простым загрузчиком на бейсике, настал момент, когда понадобилось адаптировать игру с загрузчиком в машинном коде. У меня две самые любимые игры это ELITE и ADVANCED SOCCER SIMULATOR. В эти игры я могу играть часами и годами. И, наверное, из-за них пришла идея приобрести реальный Спектрум.

    Если с первой игрой ELITE мне повезло, удалось найти вариант на ленте с простым загрузчиком, то со второй дела обстояли гораздо хуже. Простых вариантов не было, были либо полные дисковые версии для TR_DOS с монозагрузчиком, либо ленточные версии с загрузчиком в коде. В коллекции Волгодонска встретилась неполная дисковая версия с бейсик загрузчиком. Как я писал выше, лучше идти по простому пути, взять самый простой вариант, то есть в нашем случае это будет вариант из коллекции Волгодонска с загрузчиком на бейсике. Однако удачно работающая версия в TR_DOS при переносе в +3DOS отказалась работать, зависая перед инициализацией игры, которая происходит по нажатию пробела после стартовой заставки.

    Забегая вперед, скажу, что дело оказалось вовсе не в +3DOS, а в самом Спектруме +3, как таковом. На том этапе я этого еще не знал и думал, что возможно зависание происходит из-за исходной корявой адаптации к TR_DOS, внешне это подтверждалось отсутствием подпрограммы загрузки отложенной игры, которая инициализируется перед стартом, предлагая либо начать новую игру либо загрузить старую. В самой игре автором было предусмотрено только сохранение, а загрузка делалась исключительно вначале игры. Из-за этого получалось, что версия игры была настолько убогая, что как-то вернуться к сохраненному (даже на ленту) состоянию игры, в ней было невозможно.
    Кроме этого казуса в загрузчике фигурировали непонятные мне pokes, кроме того, в экранную область по мимо картинки грузилась какая-то гадость и запускалась по адресу 16384… Короче говоря, я решил не возится с этой убогой версией и обратится к оригинальной на образе tzx WOS.

    Загрузчик у оригинальной версии был классический, то есть сначала бейсик загрузчик грузил кодовый загрузчик, а потом кодовый грузил все остальное.
    Есть мнение, что самой эффективной защитой от среднестатистического ламера является применение кодового загрузчика. Не знаю, этим ли руководствовался автор игры, но первичный бейсик загрузчик у оригинальной версии выглядел так:

    0 CLEAR 24783: LOAD “” СODE: RANDOMIZE USR 64307

    Как видно из листинга, вся необходимая для работы информация в нем присутствует. А защита в виде 0-й строки вызывает всего лишь улыбку и вопрос – А что автор думал, что кто-то захочет править эту единственную строку???
    Дальше дело сложнее. На образе ленты размещены 5-ть кодовых файлов без заголовка, и все, что он них можно узнать – это их длину. Однако перед ними расположен один кодовый файл с заголовком, который очевидно грузится по команде LOAD “” СODE в бейсик загрузчике.
    Параметры файла просты: адрес загрузки 64000, длина 1536, точка входа 64307. Используя эту информацию и монитор ADM 7.08 можно определить, что это загрузчик в машинном коде, который грузит 4-ре из выше упомянутых 5-ти кодовых блоков.

    1 блок 16384, 6912 – очевидно заставка
    2 блок 25600, 4608 – по всей видимости, просто часть самой игры
    3 блок 43856, 3968 – программа загрузки с ленты отложенной игры та, которая отсутствовала в корявой версии под TR-DOS.
    4 блок 50000, 14000 – основной кодовый блок игры.

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

    LD IX,START
    LD DE,LENGTH
    LD A,FF
    SCF
    CALL FA84

    Слова START и LENGTH, которые предварительно загружаются в регистры IX и DE перед вызовом подпрограммы загрузки с ленты CALL FA84 дают информацию о параметрах загружаемых блоков, которые я указал ранее. А что же с 5-м кодовым блоком? Этот блок оказался исходным состоянием игры, то есть содержащим все параметры, переменные игры, которые сохраняются при отгрузке. На ленте присутствовал файл с исходным состоянием игры, который грузился подпрограммой загрузки расположенной в 3-ем блоке при выборе опции новая игра. В случае выбора опции отложенная игра грузился аналогичный файл с параметрами отложенной игры. Параметры 5 блока 30208, 13648.
    Таким образом, выудя всю необходимую информацию о файлах игры, пишется загрузчик, и записываются на диск файлы. Точку входа можно использовать аналогичную 64307, предварительно подредактировав код блоков 1 и 2, обойдя в них процедуры загрузки с ленты при помощи команд JR или JP. Конечно, блок 1 вообще можно было бы выбросить и отправит процессор сразу по адресу в блок 2 на подпрограмму загрузки отложенной игры, однако блоки организованы непросто и те функции, которые я за ними закрепил, весьма условны и справедливы только для рассматриваемой нами задачи. В целом в них встречаются куски (подпрограммы), используемые в процессе самой игры, а не только при загрузке.

    Проделав все операции, игра удачно стартовала в TR_DOS, при этом в отличие от корявой версии в этом случае можно было использовать отгрузку состояния игры на ленту. Однако при переносе игры в +3DOS игра зависала после выбора футбольной команды. Я установил, что зависание в корявой версии в + 3DOS было вызвано той же причиной, кроме того, как оказалось, игра аналогично висла и при загрузке с ленты, если грузить ее на Спектруме +3. Причем, даже в режиме замка 48к, что сильно удивляло и ставило в тупик. Одно стало понятно, что сама +3DOS к этому отношения не имела, дело в самом Спектруме +3.
    Пошаговое исследование при помощи дебаггера эмулятора RealSpectrum позволило локализовать дефект, установить адрес подпрограммы после которой происходит зависание.
    53546 CALL 51823

    Как я понял, происходило это при формировании звукового сигнала, когда я вводил номер футбольной команды, нажимал ввод, и программа переходила на подпрограмму синтеза отзвука нажатия клавиши. При этом заблаговременно для нее разрешался режим прерывания IM2. Вот в нем-то и оказалась проблема! Дело в том, что дебаггер показывал различный вектор прерывания в системе 128 Пентагон и в системе Спектрум+3. Для Пентагона вектор был равен FFFF, а для Спектрум+3 – 2100. На скору руку в системе Спектрум +3 при помощи дебаггера я принудительно изменил вектор с 2100 на FFFF. Игра заработала без проблем! Таким образом, причина была точно установлена. Осталось только определить: из-за чего меняется вектор прерывания в системе +3 и как исправить его на FFFF.
    Всем известно, что вектор прерывания находится по адресу I+255, где I – регистр прерываний процессора. В регистр I сразу по точке входа 64307 загружался быйт 39H, 255 (FFH) – это байт на шине данных. Исходя из этого, вектор прерываний для этой программы хранился по адресу 39FFH или 14847, то есть в ПЗУ. Я установил, что в обычной прошивке в этом месте располагается большой блок байтов со значением FF, а в +3 вместо FF – 00, причем в банке 48к у +3 была такая же ситуация из-за чего при переходе даже в режим замка программа тоже висла.

    В одной из книг я вычитал, что есть некая таблица векторов прерываний, расположенных в ПЗУ, то есть, грубо говоря, приведены вектора прерываний, которые хранятся в XXFF адресах ПЗУ. Очевидно, что одной из проблем при адаптации программ к системе +3 может быть проблема с вектором прерываний, так как ПЗУ у +3 неидентично оригинальному.
    Ясно, что проблему можно решить путем изменения содержимого регистра I, но для этого сначала необходимо найти где-то расположенные рядом два байта FF FF причем так, чтобы первый располагался в XXFF. Перерыв все возможные адреса ПЗУ и самой программы я понял, что такого варианта просто нет, его надо создать.
    Где создать? Конечно в блоке загрузчика, тем более мне там встретился пустой кусок с нулевыми байтам. Сделал, изменил регистр I. Игра пошла! Однако при отображении счета во время демонстрации матча на цифрах появились характерные горизонтальные полоски… Да, это те самые FF FF которые я записал, казалось бы в свободное место в загрузчике. Тогда я пошел другим путем, воспользовался тем, что RAMTOP установлен намного ниже, чем грузится первый кодовый файл и в самый низкий подходящий адрес записал необходимые ффки. Запустил игру, когда одна из команд забила гол, сформировался звук сигнализирующий об этом, бордюр моргнул синим цветом и игра повисла. И там занято!!! Да что же делать. Весь код игры же не раскрутишь, чтобы определить, где там есть свободный кусок, да тем более еще, и не каждый подойдет.
    Но выход все-таки есть! У Спектрума+3 бейсик программа начинается с такого же адреса, как и у любого магнитофонного Спека 23755, то есть без смещения на 112 байт, как у дисковых вариантов с TR-DOS. Поэтому то и не возникает проблем с RAMTOP, хотя исходный бейсик файл загрузчика при адаптации, как правило, увеличивается.
    Воспользовавшись этой уже положительной чертой +3, я опустил RAMTOP до нужного адреса, чтобы появилось место для создания байтов FF FF в нужном адресе XXFF.
    Исходный RAMTOP 24783 или 60CFH ближайший подходящий адрес вниз от этого 5FFFH, тогда RAMTOP буде 5FFEH или 24574, а проблема будет лечится введением трех poke:

    POKE 24575,255: POKE 24576,255 для создания FF FF

    и

    POKE 64308,96 – для настройки регистра I на адрес 24575.

    Таким образом, была достигнута еще одна победа над Спеком +3! Для меня эта победа вдвойне приятна, так как я хоть и умею читать машинный код, но как таковой продолжительной практики программирования у меня не было!

    Продолжение следует…
    Последний раз редактировалось Addison; 15.04.2017 в 22:37.
    ZX-Spectrum 128k Only! + TR-DOS

  5. #3

    По умолчанию Правила организации файлов игры при адаптации к +3DOS

    Последнее время начали объявлять владельцы ZX-Spectrum+3, и что самое приятное, многие из них планируют пойти по пути встраивания 3,5'' дисковода. Следовательно, в скором времени стоит ожидать наращивание базы адаптированного софта (игр).
    Я постараюсь опубликовать здесь еще ряд небольших статей, которые помогут значительно снизить трудоемкость работы по адаптации. Благодаря некоторым приемам перетащить игрушку с тапки на образ +3 при определенной сноровке потребует всего 15 минут работы. В общем, я ожидаю того же естественного процесса переноса софта, как был и с системой TR-DOS. Каждый будет перетаскивать то, что ему нужно, а в сумме мы получим неплохую базу игр! Возможно в далеком будущем отечественные производители, такие как АТМ, Пентагон и т.п. возможно задумаются о реализации +3 DOS в своих машинах! Но это мечты.
    Я полагаю, что пользователь, получивший в свое распоряжение ZX+3 с дисководом 3,5'', сразу же возжелает адаптировать ELITE или DIZZY. Первая уже имеется, вторая практически готова (имеется 5 частей). Конечно, кто-то захочет сделать свои варианты, той же ELITE несколько версий, например, в коллекции 107 игр, которую я здесь публиковал, адаптирована как раз другая ELITE, не 128к, которую сделал я. Однако там не доделано меню отгрузок. Также не сделана ELITE2/3 от В. Кладова. Ну и полно других хитов, которые захотят в первую очередь перенести на ZX+3 новоиспеченные его владельцы! Тем не менее, я прошел некоторый путь, и последователи невольно сместят свой взгляд в сторону другого не перенесенного софта и расширят тем самым общую базу.

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

    Правила организации файлов игры при адаптации к +3DOS:

    1. Использовать стандартный образ диска 173 кб.
    2. Образ должен иметь только одну игру.
    3. Образ должен называться также как игра.
    4. Все файлы должны иметь по возможности стандартные расширения:
    .BAS - файл бейсик программы,
    .LDR - кодовый загрузчик,
    .DAT - кодовый блок игры,
    .SCR - файл заставки,
    .BIN - альтернативное расширение для кодового блока,
    .SAV - файл отгрузок.
    5. Имена файлов должны иметь общую начальную часть, хотя бы 3-5 символов, лучше иметь одинаковые имена с использованием индексов в случаях, когда расширение файлов совпадает.
    6. Образ должен содержать файл DISK (без расширения), в котором на бейсике написана строчка загрузки основного загрузчика игры. Естественно, с реализацией автостарта, как самого файла DISK, так и самого загрузчика игры. Это позволит пускать любой образ из основного меню по опции LOADER.

    Это основные, на мой взгляд, разумные правила, которые позволят создать базу игр, которые легко копируются с диска на диск и удобны в использовании. Достаточно на PC иметь папку с такими образами, которые легко сортируются по алфавиту. Стоит загрузить в эмулятор или на реальный диск этот образ, как вы мгновенно получается работоспособную игру с загрузкой по опции LOADER. Выбранная система расширений позволит легко копировать, разбираться в структуре игры и т.п. Важно в загрузчике использовать именно расширение BAS, так как многие самопальные буты используют его по фильтру. Так делал я, и так делали иностранцы в коллекции из 107 игр. Кстати, они заочно выполнили все мои правила, за исключением использования одного образа для одной игры. Поэтому эту коллекцию еще предстоит разбить на 107 независимых образов с автозапуском.
    Считаю что формирование коллекций на больших дисках - это дело индивидуальное.
    В жизни проще использовать несколько дискет и перед игрой перебрасывать туда с ПЦ образ. Дисков мало, хранить их не хочется, да и надежнее на PC.

    Кто имеет 10-ок любимых игр может загнать их легко на одну большую дискету 706 кб. При этом ему хватит эмулятора SPIN команды COPY "a:name*.*" to "b:". В SPIN в "b" загружается чистый образ 706 кб, а в "а" по очереди диски с играми, далее в бейсике пишется строка с copy - Enter! name - это та самая единая часть имени всех файлов, о которой говорилось в предложенных правилах. Потом полученный образ 706 кб, при помощи утилиты, о которой я писал, загоняется на реальный диск и юзается на реальном +3!
    Последний раз редактировалось Addison; 16.04.2017 в 07:44. Причина: Добавлено сообщение
    ZX-Spectrum 128k Only! + TR-DOS

  6. #4

    Lightbulb Программы для +3DOS

    В этом разделе я буду публиковать названия игр, программ и т.п. адаптированных к системе +3DOS. Здесь под адаптированными я понимаю программы, которые работают в системе +3DOS и легко переносятся (при помощи команды copy) с образов dsk на реальный диск 3 или 3.5". Некоторые игры из опубликованных здесь вы можете найти на WOS, однако перенос их с образов на реальный диск осложнен защитой от копирования. Таким образом, эта тема будет интересна в основном пользователям реального ZX-SPECTRUM+3.

    По мере времени, сил и возможности будут адаптироваться также и отгрузки на диск,
    при этом около названия игры (программы) будет появляться надпись "FULL DISK VERSION"
    Следите за обновлением.

    На данный момент адаптированы:

    1. ELITE 128K - FULL DISK VERSION
    2. TOTAL ECLIPSE II
    3. TETRIS (Miror Soft) (источник WOS)
    4. PACMANIA (источник WOS)
    5. TILT
    6. SIMCITY
    7. ADVANCED PINBALL
    8. KRAKOUT
    9. KRAKOUT2
    10. ARKANOID II
    11. WEC LE MANS
    12. MISS PACMAN
    13. QUAZATRON
    14. BRIDE OF FRANKENSTEIN
    15. ADVANCED SOCCER SIMULATOR FULL DISK VERSION
    16. DIZZY 1
    17. DIZZY 2
    18. DIZZY 3
    19. DIZZY 3.5
    20. DIZZY 4
    21. DIZZY 5
    22. RENEGADE 1
    23. SUPER CHEES 3.5
    24. COLOSSUS CHEES
    25. Preliminary Monty
    26. SPIRITS
    27. DRACONUS
    28. TETRIS2


    P.S. Перед тем как приступить к собственным адаптациям рекомендую прочесть общие правила.
    Вложения Вложения
    Последний раз редактировалось Addison; 15.04.2017 в 23:24.

  7. #5

    По умолчанию Адаптация серии игр DIZZY

    Задумал сделать коллекцию DIZZY на одном диске, причем, качественные версии с минимальными отличиями от оригинала. До этого я уже адаптировал части 1, 2, 3.5 и 5. Также в коллекции 107 игр западной адаптации на третьем диске имеются части 5,6 и7. То есть фактически не хватает только 3 и 4 части! Однако я все же решил все переделать. Мои адаптации были сделаны с образов tr-dos коллекций Волгодонска и Дупанова, эти версии оставляли желать лучшего, тогда я еще не отработал технологию переноса и выбирал варианты с легко раскрываемым загрузчиком, поэтому версии попались совсем кривые судя по вечным жизням, отсутствию музыки и т.п. Версии западной адаптации я толком не смотрел, но, судя по файлам игр, там тоже что-то делали, несколько непонятных блоков странного объема. В общем, я решил обратиться к образам кассет. Не уверен в их оригинальности, ксорок там нет, защиты как таковой тоже, просто применяется кодовый загрузчик, но что приятно, все заставки оригинальные, одним стандартным файлом 16384,6912, сама игра идет одним большим блоком, плюс один музыкальный блок, кроме соответственно первой части, так как там музыки АУ не было. Просмотр кода показал, что ничего лишнего там нет, все стройно и четко, посему считаю, что на этих тапках оригинальные образы кассет, а если и не совсем оригинальные, то с корректно снятой защитой и аккуратно структурированные.

    DIZZY1

    В теме Slider’а уже было обсуждение по поводу проблемы не запуска этой части из под режима 128к. Я не буду сильно повторяться, скажу только то, что проблема в затирании системных переменных основным кодом игры. Существует множество способов решения этой проблемы, но я преследовал цель адаптировать как можно ближе к оригиналу, то есть хотел сохранить, как загружаемы блоки в исходном виде, так и те адреса, куда они грузятся, и произвести только минимальные доработки, без которых просто игра не пойдет в системе +3. В общем, я изменил только кодовый загрузчик, соответственно поменял процедуры чтения с ленты на процедуры чтения с диска и для обхода затирания системных переменных 128к загрузил кодовый загрузчик в нормальные адреса ОЗУ выше 23755. Однако, как в случае ленточной версии просто перенести загрузчик в системные переменные в машинном коде уже не получилось, так как процедуры +3 DOS в отличие от процедур ленты используют эти переменные. Поэтому я по максимуму сделал все в нормальных адресах ОЗУ: инициализацию ДОС, включение мотора, открытие файла для чтения, а уже непосредственно чтение и выключение мотора произвел из адресов системных переменных! К счастью процедура чтения файла эти переменные, которые затираются, не использует.
    В итоге получилась качественная версия для +3 DOS с сохранение оригинальных блоков (картинки и самой игры) с изменением только загрузчика, что объективно и логично при адаптации.

    DIZZY2

    С этой частью пришлось повозиться. Она в отличие от всех других просто отказывалась работать в системе 128к в варианте ZX+3, даже при загрузке с тапки. И если первая часть глючила в любом ZX, для нее проблемой был режим 128к, то здесь глюк возникал только в системе +3. Причем если грузить с тапки в системе +3 в режиме 48к без музыки АУ все работало, как часы!
    Долгие и кропотливые разбирательства позволили установить, что причиной этому есть переделка ПЗУ (банк 48к). Процедура RST38 была изменена! После ее выполнения банк памяти устанавливается в соответствие с переменной BANK_M. В стандартной синклеровской прошивке этого не было. Сделано это из-за того, что для +3DOS заюзана 7-я страница и ее периодически нужно включать, когда отрабатывается процедура +3DOS в бейсике. Поэтому если в игре банк памяти переключается некорректно (без сохранения содержимого порта 7FFDh в переменной BANK_M), то при возникновении прерывания первого рода IM1 отрабатывает процедура RST38 и меняет банк памяти на тот, который записан в переменной BANK_M. В случае DIZZY2 происходит несанкционированное переключение банка 6, куда подгружена музыка, на банк 0, где расположен основной код игр. Это приводит к зависанию в самом начале при воспроизведении приветственного крика.
    Решить эту проблему можно. Если делать это в лоб, то, наверное, нужно в игре, где щелкаются банки добавить сохранение текущей настройки регистра 7FFDh в системной переменной BANK_M. Сделать это не так просто, нужно курочить код, делать выноски искать свободные места, причем переключений много и структура игрушки мне не известна, да и решение будет частным только для этой игры. А ведь наверняка такая проблема может возникнуть и в других играх!
    Я придумал очень остроумное и хорошее решение!
    Вот часть процедуры RST38, в которой происходит глюк:

    3873h
    BIT 4,(5C3Bh)
    JR Z,387Ch
    CALL 387Fh
    Последняя команда и переключает это банк. Суть в том, что если 4-й флаг системы бейсик включен, то происходит переключения банка на 7-й и декремент ячейки в нем по адресу E600h – это, скорее всего, какая-то переменная +3DOS, которая создается в 7-ом банке при инициализации +3DOS. Но для функционирования игры это не нужно, поэтому в самом конце загрузки, когда +3DOS больше не будет использоваться, целесообразно сбросить 4-й флаг в системе бейсика, расположен он по адресу 5C3Bh. Исходно там содержится байт 221, при выключении 4-го бита будет 205!
    Таким образом, очередной артефакт +3DOS лечится в загрузчике перед финальным RANDOMIZE USR путем введения POKE 23611,205!!!

    Что касается остальной адаптации, то в отличие от оригинала все блоки я загрузил в бейсике в их оригинальные адреса, а не в машинном коде, так как это позволял адрес начала загрузки 24576 основного кодового блока. Подгрузка файла музыки в страницу 6 осуществил обычной процедурой LDIR в машинном коде, процедура предварительно подзагружается из файла с расширением ldr. Затем все затирается основным блоком игры, который грузится последним.


    На данный момент адаптированы также DIZZY3 и DIZZY4 без особых проблем (артефактов), поэтому пока про их адаптацию ничего не пишу, потом по всей оставшейся кучи напишу пару строк , если и там ничего серьезного не обнаружится.

    DIZZY5 - побежден в ходе упорных и кровопролитных боёв.
    Вложения Вложения
    • Тип файла: zip Dizzy.zip (237.4 Кб, Просмотров: 7)
    Последний раз редактировалось Addison; 15.04.2017 в 22:56.
    ZX-Spectrum 128k Only! + TR-DOS

  8. #6

    По умолчанию Полная дисковая версия ELITE 128K

    «Дошли руки» до адаптации отгрузок к системе +3DOS. Первым делом попробовал поэкспериментировать с наиболее популярной игрой ELITE. Тем более, что в ней имеется классическое меню отгрузок. За основу была взята кассетная версия 128К с WOS, как наиболее удачная и уже с адаптированным к +3DOS загрузчиком.
    К недостаткам этой версии могу отнести только отсутствие оригинального шрифта. В плане полноты, разнообразия кораблей, артефактов, описанных в литературе, эта версия удовлетворит запросы большинства геймеров.
    Вообще, как многим известно, существует много разных версий, в том числе и бесчисленные переделки для TR-DOS, которые потеряли всякие признаки первоистока. Наиболее распространенная версия адаптированная к TR-DOS – это версия от Joystick Club. Не хочу хаять эту версию, так как в далекие годы детства играл в нее и радовался наличию адаптированной процедуры отгрузок, что, как правило, в других играх местных коллекции было редкостью. А тут ELITE, да с адаптированной отгрузкой! Но я также не могу не отметить ряд ее недостатков. Во-первых использование файла доступа несколько ограничивает, не позволяет без перезагрузки загружать разные сэйвы, во-вторых сама версия от Joystick Club небезупречна. Отсутствуют некоторые корабли, при стыковке корабли не вылетают со станции, а также, по мнению ряда геймеров, она более легкая при ведении космический баталий.
    На Virtual TR-DOS имеется распространненая версия с весьма измененным меню отгрузок, где по нажатию SS вам выдают голубые строчки меню. Смотрится это не очень красиво, потерян шарм, выдача секретного номера командира и вообще изменен интерфейс не в лучшую сторону! Понятно, что все перечисленные недостатки вызваны нехваткой пространства в ОЗУ, тем более что версии, как правило, рассчитаны на работу с 48к машинами… В случи адаптации под +3DOS такой проблемы нет, так как эта система стоит на машинке со 128к! Поэтому при адаптации я преследовал цель – «Не навреди!». Если и вносил что-то свое, то делал лучше чем было. Думаю, мне это вполне удалось.

    И так, что и как сделано:

    1. Загрузка и сохранение файла состояния игры на диск +3DOS. Название файла отгрузки и имя командира совпадает, за исключением того, что к имени файла добавляется расширение sav. Таким образом, после сохранения командира JAMESON, на диске будет создан файл JAMESON.sav. Введение дополнительного разграничения по имени файла счел лишним, думаю, ничего кроме путаницы и увеличения объема процедуры отгрузки это не даст. Представьте, что после ввода имени командира вам бы еще предложили ввести имя файла. Двойной ввод – нужен он? Заменить вод имени командира на ввод имени файла испортит исходный интерфейс. Так что остановился на оригинальном варианте, который был в кассетной версии. Этот вариант предельно четок, понятен и удобен.
    2. При пересохранении командира на диске создается bak файл, то есть файл со старым состоянием переименовывается, например, JAMESON.bak. Это позволит исправить возможную ошибку, когда геймер буде сохраняться всегда под одним именем командира без добавления индекса. Например, игра не удалась и вместо возврата к старой версии можно нечаянно вызвать сохранение, нажать и все вы навсегда сохраните неудачный бой или еще что-то. Подсказки на подтверждение загрузки и сохранения я не сделал, так как это ведет к сильной доработке кода. Я старался ничего не трогать, и все запросы, которые появляются – все присутствуют в оригинале, только с измененным текстом.
    2. Сообщение перед сохранением «Insert tape, then press any key» заменено на «Please waite...». Ожидание нажатия клавиши соответственно тоже убрано. Очевидно, что в дисковом варианте это не нужно, если дискеты не будет, появится соответствующее сообщение и после загрузки в дисковод диска операцию можно повторить. Надпись «Please waite» появляется как при сохранении, так и при загрузке и сигнализирует о процессе загрузки/сохранении.
    3. При ошибке вместо сообщения Tape loading error появляется соответствующее сообщение об ошибке. В оригинальной версии ошибка печаталась только при некорректной загрузке, при сохранении такого сообщения не выдавалось. Я ввел несколько вариантов ошибок.
    No disk, Disk is write protected, File no found, Bad file name, Full disk.
    Полагаю этих вариантов вполне достаточно, при возникновении ошибки, которая не перечислена в списке выше, выдается сообщение Unknown error. Такое сообщение, скорее всего, всплывет, если использовать нестандартный формат дискеты. Сообщение Bad file name появляется при неверном имени файла, но в игре реально ввести только пустое имя.
    4. Еще одно изменение коснулось количества символов в имени командира. Оно было сокращено с 10 до 8, что очевидно вызвано совмещением имени командира и имени файла. Также была доработана процедура ввода, после достижения 8 символов, процедура загрузки или записи больше не стартует. При попытке ввести 9 символ ввод просто блокируется, вы можете либо удалит 8 символ и предыдущие либо нажать ввод для запуска процедуры. Сделал эту доработку для удобства, так как пользователь заранее не знает сколько символом ему отведено для формирования имени командира и велика вероятность того, что он захочет больше 8… А так, у него появится возможность без создания лишнего сэйва придумать себе короткий и лаконичный псевдоним.

    Версия проверялась на Spin и Real эмуляторе, а также на реальном ZX-Spectrum+3.
    Все ошибки формировались, вся описанная выше логика исполнялась. В саму игру не играл, ну думаю ничего там плохого быть не должно, так как код не портил, уходил сразу в другой банк памяти и там делал свои дела… Те изменения кода, который проводил все проверил – ввод 8 символов и печать дополнительных сообщений. Глюки, конечно, возможны, но я думаю они легко поправимы!!!

    И, наконец, сама версия ELITE для +3DOS!!!
    Вложения Вложения
    Последний раз редактировалось Addison; 31.05.2009 в 17:30.
    ZX-Spectrum 128k Only! + TR-DOS

  9. #7

    По умолчанию Полная дисковая версия Advanced Soccer Simulator

    Ну вот, пришла пора освежить тему, да и хороший повод к этому появился! Наконец доделал Advanced Soccer Simulator. С этой игрой пришлось пройти долгий путь препятствий, к счастью все из них были успешно преодолены. Пять месяцев назад, когда я поспешно анонсировал скорый выход этой адаптации, я не думал что ее доводка затянется так надолго. При предварительном тестировании столкнулся с несколькими артефактами, которые ну ни как не поддавались объяснению из-за чего все попытки доделать эту адаптацию были прерваны на несколько месяцев. Не хотелось выкладывать недоделанную версию…
    Недавно взялся вновь и смог раскрутить неподдающиеся головоломки, о которых я позднее напишу в подробном описании пройденного пути адаптации ELITE/ASS.

    И так, что сделано в ASS.

    1. Естественно основное – сохранение и загрузка файла состояния игры в системе +3DOS.
    2. Добавлено меню «Диск». Раньше в основном меню можно было только сохранить состояние игры на ленту, подгрузка старой игры была возможна только в самом начале.
    3. Выдача сообщений об ошибках при записи/чтении: файл не найден, нет диска, защита от записи, неизвестная ошибка. При удачном действие выдается - ОК!
    4. Убрано первоначально меню с выбором начало/загрузка, так как потеряло актуальность, взамен него введен дополнительный запрос при старте в фирменном интерфейсе игры.

    Можно было много чего добавить, идей было полно, начиная от каталога диска заканчивая изменением размера отгружаемого файла. Действительно в игре слишком тяжелый файл отгрузки аж 14кБ. Вызвано это, во-первых, резервированием 8-ми участников игры, где требуется отвести место не только под мелкие переменные, такие как количество игр, счет в банке и проч., но и под достаточно ёмкие имена игроков в команде, положение в турнирной таблице и т.п. Ну и, во-вторых, переменные состояния игры, как оказалось при анализе, разбросаны вперемешку с основным кодом игры, поэтому программист не стал заморачиваться и сделал сохранение блока, в которые попадают эти переменные. Оставим это на его совести.
    Исходя из выше сказанного понятно, что можно было значительно снизить объем сохраняемого файла хотя бы за счет уменьшения числа участников до двух. Очевидно, что играть в эту игру массово компанией, как это было раньше, когда собирались дома, чтобы порубится в Спектрум, сейчас уже никто не будет. Максимум чего стоит ожидать – это если кто-то по старой памяти в одиночку решит поиграть на реале или же в эмуляторе. Я полагаю мой вариант адаптации удачнее тех, которые есть на TR-DOS. Хотя на эмуляторе можно сохранять и иными способами, отличными от стандартных. Но это уже как кому нравится. Поэтому вполне бы хватило двух трех игроков, при этом уменьшился бы файл отгрузки, и освободилось бы место в ОЗУ для введения дополнительных доработок, например, каталога диска или иных доработок – введение перерыва между таймами, модернизация меню и т.п. Были мысли сделать возврат из второго (большого) меню в основное, чтобы была возможность после загрузки отложенной партии посмотреть, что загрузилось и при желании вернуться назад и загрузить другой файл. Можно было сделать просмотр некоторых важных параметров внутри меню «Диск». Но, как и в случае ELITE, я решил сохранить по максимуму оригинальность игры и добавлять только бесспорно необходимое. Поэтому количество участников было сохранено - 8, и было внесено только то, на что хватило места.
    Хотелось бы отметить один нюанс. При выборе загрузки старой игры вы попадаете в основное меню, далее необходимо войти в меню «диск» и выбрать загрузку файла. Раньше в неадаптированной версии вас сразу выкидывало на процедуру загрузки файла.
    Сделать аналогично мне не хватило места, думаю это не самый плохой вариант, ведь суть первоначального запроса в том, чтобы перескочить выбор количества игроков, очковой системы и выбора команд. Это реализовано. Если вы выберете загрузку старой партии и не и не станете ее загружать, а последуете дальше, то вам по умолчанию дадут Liverpool, 4 дивизион, стандартное количество денег и трехочковую систему. Так было задумано и в оригинальной версии, если прервать загрузку старой партии брейком.

    Ну и, наконец, сама версия Advanced Soccer Simulator для +3DOS.
    Вложения Вложения
    Последний раз редактировалось Addison; 15.04.2017 в 22:48.
    ZX-Spectrum 128k Only! + TR-DOS

  10. #8
    Veteran Аватар для drbars
    Регистрация
    02.03.2005
    Адрес
    Новосибирск
    Сообщений
    1,427
    Благодарностей: 593

    По умолчанию

    Вот интересно, а есть ли исходники загрузчиков для +3 на асме аля #3d13 или независимые от переменных? Ведь для адаптации игр, как это делалось на TR-DOS, потребуется лезть в код. Я так понимаю, если эта система похожа на MS-DOS значит монолоадеров уже сделать не получится... Для работы по адаптации софта, нужен минимальный набор инструментария уже адаптированного под эту систему: dos командер, граф.редактор, alasm, sts, hrust итд... Как я понимаю этот софт никто не адаптировал.
    Последний раз редактировалось drbars; 01.06.2009 в 08:55.
    ZX-Spectrum +2 (Grey Model)

  11. #9
    Moderator
    Регистрация
    25.11.2007
    Адрес
    Симферополь
    Сообщений
    1,930
    Благодарностей: 377

    По умолчанию

    в фирменном руководстве - достаточно толково разжевано все что касается работы с +3 из асма. приведены описание всех необходимых подпрограм и перечислены все входные и выходные параметры. структура диска дает возможность работать с дискетами большого обьема и я думаю возможно даже с винтом.
    Amiga 1200+Blizzard 1260 72 Mb+Mtek 68030,Compozit 128, Leningrad 2,
    Atari STE 1040,ZX Spectrum +2,Pentagon 48, Speccy2007 - 2 , ATAS 256k.
    ZX Evo 4Mb- в строю.
    Speccy2010 v1
    Специалист (пока готовлюсь к восстановлению).
    Это все мое!
    Родное!
    Все люблю на свете я! Это родина моя!

  12. #10

    По умолчанию

    Цитата Сообщение от balu_dark Посмотреть сообщение
    достаточно толково разжевано
    здесь можно поспорить.

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

    Мне пришлось взломать игру и посмотреть, как там все это сделано, что за чем вызывается...

    Добавлено через 3 минуты
    Цитата Сообщение от drbars Посмотреть сообщение
    Для работы по адаптации софта, нужен минимальный набор инструментария уже адаптированного под эту систему: dos командер, граф.редактор, alasm, sts, hrust итд...
    Зачем?

    Инлайн ассемблер для этих целей есть. Я же не на реале крякаю, чтож я извращенец по твоему?
    Последний раз редактировалось Addison; 01.06.2009 в 20:30. Причина: Добавлено сообщение
    ZX-Spectrum 128k Only! + TR-DOS

Страница 1 из 10 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Адаптация текстового редактора
    от Raydac в разделе Софт
    Ответов: 1
    Последнее: 09.06.2008, 14:27
  2. Ответов: 75
    Последнее: 26.01.2006, 05:06
  3. Компилирование готовых программ
    от CityAceE в разделе Программирование
    Ответов: 3
    Последнее: 02.11.2005, 14:42
  4. TR-DOS -> 3DOS?
    от dhau в разделе Оси
    Ответов: 4
    Последнее: 02.02.2005, 18:29
  5. Тестирование программ
    от Vitamin в разделе Программирование
    Ответов: 5
    Последнее: 23.01.2005, 23:46

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •