PDA

Просмотр полной версии : Загрузка с ленты



Addison
15.06.2008, 22:20
Помогите разобраться!:v2_conf2:

пишу загрузчик

10 clear 24600
20 load "" code 25286,40250

запускаю
run

бордюр заморгал голубой/красный
пошел пилот, на бордюре красные и голубые полосы

загрузился заголовок кодового файла
Byte: m.pacman

пошел второй пилот
и на этом ВСЁ!!!:v2_jawdr:
бордюр голубым моргает, как вначале загрузки, иногда промаргиваю сине-желтые полосы, но загрузка не схватывается...

В чем дело?

P.S. пробовал на разных эмуляторах, всё один к одному, на реале не пробовал, думаю будет тоже самое. Интересно то, что если грузить не с кодового файла а с бэйск файла, то есть с загрузчика все проходит окей!
Я по началу думал, что какая-то защита хитрая, но оказалось нет! Я потом просто обычную крякнутую версию игры с trd в tap перегнал при помощи Навигатора. Программа абсолютно нормально стартует, грузит первый бейсик файл потом затыкается из-за синтаксиса в загрузчике, который заточен под тр-дос, после правки run и все загружается!
Проблему можно обойти, загружая начиная с файла загрузчика, потом Брейком остановить и загрузить отдельно кодовый файл, но это неудобно игрух много надо перегнать, да и хотелось бы разобраться! Там явно какой-то нюанс не учитываю. Почему кодовый файл грузится только после загрузки бейсик программы???:v2_wacko:
Жду совета спецов:v2_smoke:

Rindex
15.06.2008, 23:11
Эх, вспомним молодость однако. А где ещё строка типа такой:

30 RANDOMIZE USR 25000

Это вроде как всегда запуском программы был. У тебя наверно не 25000 должен быть, а 40250 могёт...

Addison
15.06.2008, 23:22
Эх, вспомним молодость однако. А где ещё строка типа такой:
Да причем тут строка? Вы не в теме!

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

Короче задача проста.
Есть лента или ее образ, хочу где-нить в середине загрузить какой-нибудь кодовый файл.
load""code не проходит, считывается только заголовок, сам файл не грузиться.
ВОПРОС Почему?

goodboy
15.06.2008, 23:29
выложи для примера хотя-бы TAPку которую ты сделал каким-то Навигатором.

Addison
15.06.2008, 23:56
выложи для примера хотя-бы TAPку которую ты сделал каким-то Навигатором.
Да любую возьмите, не в ТАПке дело.
Может это из-за эмулятора?
Я пробовал в EmuzWin и в RealSpectrum.
вот что делал:
1. подключал ТАПку или ТЗХ
2. в каталоге образа выбираю файл кодовый (вернее его заголовок) то есть, это как я понимаю, соответствует перемотки на кассете до нужного места, с которого начинается заголовок кодового файла.
3. отключаю все примочки, то есть ставлю ручной режим, обычная скорость.
4. набираю load"" code
5. включаю магнитофон (кнопка "плей" в эмуляторе)
6. загрузка пошла, я ее описал вначале треда, однако после считывания заголовка и повторного пилота загрузка файла не осуществляется.

Не знаю, может это из-за эмуля - может там загрузка криво сделана, но странно, почему на трех как минимум одно и тоже....
Стоит только с ленты загрузить сначала бейсик файл, потом грузи чего угодно и как угодно...

Добавлено через 7 часов 3 минуты

У тебя наверно не 25000 должен быть, а 40250 могёт...
Так для повышения эрудиции...
Точкой входа в программу может быть любой из разумных адресов, все зависит от программиста. И если в исходном загрузчике ее нет (она спрятана в кодовом загрузчике), то просто так ты ее фиг найдешь, если конечно не проверишь 48000 вариантов входа:v2_lol:

skyther
16.06.2008, 07:26
Попробуй в load "" code длину не указывать.
А вот и нет, если длина не та - tape loading error выходит...

Addison
16.06.2008, 07:41
Попробуй в load "" code длину не указывать.
Да делал это. Похоже кривая эмуляция магнитофона сделана...
Почему сразу один глюк в трех эмулях? Не знаю, может программеры у друг друга сдирают, ведь ТАП нафиг никому не нужен, никто не хочет с ним возиться... Формально грузит и ладно.

CityAceE
16.06.2008, 08:36
Да это не глюк эмулятора, а похоже, что ты что-то не так делаешь! Данные заголовка читаются же, возможно у тебя сами данные имеют идентификатор заголовка, а не данных.

BYTEMAN
16.06.2008, 11:43
Если попробовать по load""code грузить не заголовок, а сразу на данные прыгать, то что будет? У меня на некоторых прогах выбивает ????????? а потом tape loading error

SAM style
16.06.2008, 14:11
Если попробовать по load""code грузить не заголовок, а сразу на данные прыгать, то что будет? У меня на некоторых прогах выбивает ????????? а потом tape loading errorДык так и должно быть. Лоадер считывает 17 байт (размер заголовка) всякой пурги вместо заголовка и ведёт себя соответсвенно.

Vladimir Kladov
16.06.2008, 14:47
Я что-то не понял. Любого образа ленты? Значит так. Если там блок данных, то он начнёт грузиться. Если блок программы или скрина, загрузчик в ПЗУ не будет его грузить, а будет ждать следующий блок. Эмуляторы тут ни при чём.

Кстати. Есть такие программы, которые целиком оформлены в виде блока CODE. Загружается, и начинает работать. Секрет простой: в процессе загрузки затирается стек, и при выходе из подпрограммы загрузки управление сразу передаётся в нужную точку кода. Но не всегда прокатывает, а только при ожидаемом положении SP.

Добавлено через 24 минуты
Продолжаю. А если вы грузите именно кодовый блок, но не указываете куда, то он грузится туда, куда это в нём прописано. А если не прописано, то опять не грузится. А если не туда загружать, куда можно загружать, то сами понимаете - финита ля комедиа, как только испортился стек.

Addison
16.06.2008, 16:16
У кодового блока в "меню ленты" указаны его параметры: длина, адрес...
Я грузил его и просто и с адресом и длиной. Не помогает.
Привязки к какой-то конкретной программе, образу нету! На всех так.
Я же говорю, сам на образ перегнал файлы без всякой защиты и не могу их загрузить оттуда!
Только после загрузки любой бейсик программы, начинает грузить кодовые блоки, причем глюк этот на нескольких эмулях!
Я уверен, что глюк эмулей, потому что на реале такого не было! Я точно помню, сто раз это делал.
Возьмите кто-нибудь загрузите кодовый блок любой игры с любого образа.
Только сделайте это на чистой машинке после ресета!

Vladimir Kladov
16.06.2008, 19:49
Без проблем грузится, что в EmuZWin, что в EmuZGL. Проверил секунду назад на Arkanoid-128.tap

Addison
16.06.2008, 21:39
Без проблем грузится, что в EmuZWin, что в EmuZGL. Проверил секунду назад на Arkanoid-128.tap
Да, спасибо!
Я вчера чего-то ночью совсем затупил и запутался.
Дело в том, что проблема связана с +3дос. Эта фигня именно там происходит, как теперь удалось установить. Я просто на других версиях машинок кроме +3 не пробовал, а почему твой эмуль охаял сам не понимаю, там +3 прошивка вовсе не пашет .
Цель моя проста - обеспечить реальный Spectrum+3 играми, для этого необходимо перегнать файлы с образов trd в образы dsk, а потом с образа dsk на реальный диск 3.5". Использовать готовые образы на WOS бесполезно по двум причинам:
1. 90% образов защищены и ломать голову, тем более без описания защит, которые там применяют просто неохота.
2. 80% образов содержит неизвестные мне игры и программы, в которые я сейчас уже вряд ли проникнусь, в тоже время нужные и любимые, например, такие как, Elite на них отсутствуют.
Таким образом, и в силу того, что плагин никто из-за меня одного, двух, трех писать не хочет для решения этой задачи мной разработан следующий план(посылы) по переносу софта.
1. Очевидно, что машинок обладающих сразу и +3дос и trдос не существует.
2. Также очевидно, что все машинки могут работать с лентой.
3. Поэтому напрашивается перенос из trd в tap, а из tap в dsk.

С переносом из trd в tap я легко справился при помощи Навигатора (esn.exe).

А вот из tap в dsk возникли проблемы, о которых я выше писал.
Как я сейчас уже понял проблема в следующем:

грузим кодовый файл

load"t:m.pacman"

t: - в синтаксисе +3dos означает, что носитель лента.
по умолчанию, если не указывать, то будет грузиться с дисковода "a", что равносильно load"a:m.pacman".
В этом то вся и проблема!
Я пишу load"t:m.pacman" грузится заголовок, далее как я полагаю либо имя сверяется, либо оно просто используется, в этот момент и происходит затык, так как используется полный стринг t:m.pacman, в то время, как имя кодового файла m.pacman.

Эта гипотеза была проверена на 128 машинке с родной осью (не +3dos)!
гружу файл
load""code - результат ok

гружу по-другому
load"m.pacman"code - результат ok

гружу по третьему
load"tm.pacman"code - появляется описанный ранее глюк!!!:v2_yahoo:
Как видно, в третьем случае к имени добавил "t" - чтобы смоделировать ситуацию, которая происходит на +3dos. Т.е. если имя в команде загрузки не совпадает с именем в заголовке, появляется глюк!

Теперь вернемся к +3dos.
Как тогда вообще там что-то грузится, если в системе в ОС сидит такой БАГ?
Очень просто, никто и не пробовал грузить программу из бейсика.
Тыркаешь в меню tape loader, он как-то там, видимо, в коде выбирает текущий носитель лента, а потом пользуется стандартными процедурами из стандартной прошивки и все окей.

Это объясняет также, почему после загрузки первого бейсик файла, через tape loader, далее все грузится нормально. Понятно, что когда выбран текущий носитель лента - ОС начинает понимать t: в команде загрузки правильно, не отождествляя его с именем файла.:v2_smoke:

Вот пока все.

To be continue :v2_laugh:

kyv
16.06.2008, 22:19
off top
Клон,а ты когда успел из Долгопрудного в Самару свинтить? ;) Цезарь ты наш ненаглядный ;)

Addison
17.06.2008, 00:18
Проблема полностью разрешена!
Почитал фирменное описание +3 и понял как обойти проблему!:v2_devil:

Копировщик с ленты на диск будет выглядеть так:

10 clear 24500
20 load "t:"
30 load "m.pacman" code 25286,40250
40 save "a:m_pacman" code 25286,40250


Вся хитрость заключается в дополнительной строке 20, которая позволяет обойти глюк, при помощи принудительного назначения текущего девайся для чтения. После чего в строке 30 в команде загрузки указывается имя файла без дополнительного t:. В строке 40 сохраняется загруженный в ОЗУ файл на диск "а".

На мой взгляд, это реальный глюк операционки +3ДОС, так как команда load "t:m.pacman" по логике должна проходить без глюков, как, например, это получается для диска save "a:m_pacman".:v2_smoke:

P.S. Забыл добавить, что использование "." в имени файла в +3дос запрещено, так как это разделитель для расширения файла, аналогично MS-DOS. В приведенном примере файл на ленту был скинут с TR-DOS, где в имени разрешается использование ".", поэтому конечный файл при копировании в dsk был переименован в m_pacman.