я недавно на такой версии запустил демку Insult - произошла самопроизвольная запись и как итог порча каталога и системного сектора.
Вид для печати
Проблему нехватки памяти можно было и иначе решить. Интересно, много ли игр с подгружаемыми уровнями обращаются внутрь процедур trdos для того что бы не использовались переменные?
---------- Post added at 16:01 ---------- Previous post was at 16:00 ----------
Как раз таки в команде LIST 2 ошибки, которые могли приводить и к зависаниям и к сбросу. На форуме есть тема.
практически все. в начале 90х когда сведений о размещении подпрограмм было мало использовали стандартную точку входа (15635), но при этом сами создавали область переменных (как правило всё зануляли подставив пару значений)
http://zx.pk.ru/showpost.php?p=118827&postcount=16
http://zx.pk.ru/showpost.php?p=118923&postcount=18
http://zx.pk.ru/showpost.php?p=247166&postcount=2
Да, но не сейчас, чуть позднее
Тем что если пропущены команды, то надо выносить кусочек в неиспользуемое место, ставить на него переход. Это не добавляет понятности кода, если таких заплат будет много - легко в них запутаться. Расширить функционал процедры патчем не всегда легко, ладно если новый вариант занимает столько же байт, сколько и старый или меньше, а если нет? Опять поиск свободного кода, перенос кода туда... Чем отличается моя версия от просто патчей? Сдвиг кода есть только в местах не связанных с диском. Вероятность, что программа туда обратится чрезвычайно мала. Конечно по определению система не 100% соотв. старому trdos. 100% совпадение может быть только при неизменном коде. 5.04s/5.04t не 100% совпадают по коду с 5.03. Но это не вызывает проблем. Да, потому что из основного кода изменено всего несколько байт + использован кусок памяти ранее не использованный. В моём варианте просто изменений больше вот и всё.
---------- Post added at 16:17 ---------- Previous post was at 16:16 ----------
Будем проверять :)
---------- Post added at 16:20 ---------- Previous post was at 16:17 ----------
ошибка 1: делаем в бейсике команду CLEAR 24999. Делаем команду LIST. Делаем ещё раз LIST.
ошибка 2: в команде LIST если заполнился экран и комп просит нажать любую клавишу - жмем пробел, выходим в бейсик - наблюдаем разные эффекты.
А разве должно быть иначе? Перемещаемся с макс. скоростью->не успеваем->увеличиваем значение (снижаем скорость)->повторяем тест.Цитата:
Удалена процедура определения макс.скорости перемещения МГ. Она всё равно была неработоспособна(*). В этой редакции системы используется скорость перемещения 6 мс;
----
* - В самой процедуре допущена ошибка: вместо перемещения на цилиндр 32 с минимальной скоростью, выполняется перемещение с макс.скоростью. Тест ничего не даёт. На медленном дисководе он просто не выполнится.
У меня при турбировании ВГ, данное значение явно уменьшалось, а на "гнилых" приводах и дискетах честно увеличивалось.
Вопрос: почему тогда значение не заносится в системные переменные (в эмуляторе, всегда равно 255)?
В общем, проблему совместимости одним только программным путем не решить, нужны и аппаратные изменения.
Проблема совместимости решалась с помощью cache (уже используется во многих быстрых клонах, где медленная ПЗУ не успевает работать за процессором), т.е. стандартное ПЗУ DOS подменялось ОЗУ страницами. Новая программа просто переключалась на свою страницу с новым DOS и могла еще напрямую работать с портами в/в контроллера FDD, старая же использовала классическую версию TR-DOS. Так появилась возможность усовершенствовать ДОС без так называемой потери совместимости.
По этому поводу можно много спорить, что есть лучше или хуже, нужно или не нужно, а можно взять и сделать...