Просмотр полной версии : Существуют ли версии TR-DOS с болеее-менее нормальной обр. NMI "MAGIC"?
И если да, то какие? А если нет, то реально ли в принципе отладить все эти баги, чтоб хотя бы "работало так как задумывалось" в 90% случаях?
(а те 10% тяжелых, когда уже порушены переменные DOS и места принципиально нигде ни для чего нет ни байта -- отдельный разговор. Почему-то мне кажется, что и там выкрутиться можно, но допустим даже без этого...)
Shadow Maker
20.06.2007, 20:43
Блин... Ну у тебя и вопросы... ЗАЧЕМ тебе это надо?? Бери скорпион - там можно записаться когда угодно теневиком - если в теневик входит - значит можешь снапшот записать... Правда дедовским способом, но можно.
Мгм. НУ КАК я объясню, зачем мне это надо? Спектрум -- область знаний, в которой из всех областей известных мне знаний я, м/б, более полно разбираюсь :) :( (скромненько так). Вот и хочется разбираться полнее. Это все мелочи -- но нет ничего важнее мелочей. Кроме того, аткая дыра в ДОСе -- может, ее все-таки довести и постепенно распространять -- а потом как-нибудь и в реалы удастся вшить апдейт. Это ведь не новая ось, под которую все переписывать, а только багофикс -- конечно, необходима команда, которая может его качественно провернть... Мечты, мечты...
Shadow Maker
20.06.2007, 22:18
Я у тебя и спрашиваю - зачем это вообще надо? Для игр - не нужно, для адаптации на диск - да уже все адаптировали сто раз, для программ - ты знаешь свою программу, магик тебе нафиг... Смысла нету в этом магике просто, вот совсем нету, иначе бы уже давным-давно переделали. Когда есть такие монстры как Теневой монитор и Стс в Глюке.
Ну если так, пусть бажит дальше :) .
Существуют ли версии TR-DOS с болеее-менее нормальной обр. NMI
Сам не пробывал, но по анонсам, проблема корректного сохранения дампов была решена в прошивках v6.xx. AlCo, IMHO, конкретно занимался этим вопросом, так что думаю он сможет подсказать.
Дело не только в нормальном программном обработчике NMI, но и аппаратном! Если программно обработчик "нормальный", то он не будет работать при кривом аппаратном. И наоборот.
(вздыхает), ну, это понятно. Но хоть программный бы был прямой, пусть уже с кривым аппаратным. Говорят выше, есть такие версии.
Не очень понимаю в чём проблема.
Аппаратная часть обработчика NMI заключается в прерывании программы и изменении PC (программного счётчика). После этого начинает работать программный обработчик. Там надо: определить режим прерываний, запомнить регистры, сохранить регистры. Чего нет - насколько знаю может некорректно определяться текущая страничка и верхняя память только 128 К в лучшем случае.
у ТРДОСа в этом смысле все возможности есть - кусок памяти сразу выгружается в конец 0й дорожки. В освободившееся место можно что угодно положить - в том числе и толковый программный обработчик.
Практически же это практически не используется или используется редко. Хотя я видел ТыРДОС релизы игр, которые явно восстановлены таким вот образом.
Единственное что не получится сохранить таким образом - программы, которые активно используются стек (например демки, или игры, которые перебрасывают картинку стеком). Почему - я думаю понятно. Кстати, насчёт теневого сервис монитора - я им ломал в своё вреся Satisfaction MegaDemo - часть где мультиколор выводится. После этого на картинке (тогда не было подручных мультикол-конверторов, а мультикол свой хотелось сделать) появлялись полоски... Именно потому что оно пользовало стек.
Стек стеку рознь, не постоянно же SP на экране висит. А если в игре есть пауза -- так вообще подарок, сколько помню вероятность успеха возрастает на порядок.
:) Главное, выбрать момент. А обработчик может и не отрабатывать ( :) ), внеся минимум ущерба на случай опасности переполнения стека.
в 5.13fm и её потомке 6.10E глюки магика вроде бы сведены у минимуму.
хорошо, спасибо, буду прошивать -- учту
Roger Wilco
17.07.2007, 16:48
А что сложного в доработке мэджика?
Единственное, я не помню, как определить включено или выключено прерывание. Может и нельзя было, не помню.
LD (4081),SP
LD SP, 407F
PUSH AF
LD A,I
PUSH AF
LD A,R
PUSH AF
DI
PUSH BC
PUSH DE
PUSH HL
PUSH IX
PUSH IY
CALL "save"
POP IY
POP IX
POP HL
POP DE
POP BC
POP AF
LD R,A
POP AF
CP 3F
JR Z, "im1"
IM 2
LD I,A :im1
POP AF
LD SP,(4081)
EI
RET
А потом при выгрузке разбить на удобной длины и адресации файлы.
При запуске указать в SP адрес сохранения стека.
Продолжать стек в самой "выгружаемой" программе не стоит. Можно повредить ее.
Такое "чудо" делалось мной еще на ленте. Но там еще надо было дособрать прибамбас, триггер задержки на 555ТМ2 для устранения дребезга кнопочки на вывод процессора, тоже не помно, какой.
У меня было: картинка, 2 файла по 20480, грузились с адреса 24576, а последний блок с адреса #4082, потом процедурой LDIR кидался на место, #5B00.
Затем уже запускалась реанимация мэджика.
Фактически я содрал М1 multiface, которого в глаза не видел. Немного доработал его, организовав стек на картинке.
Прошу извинить, если неясно что. Я уже давно забыл это.
Я специально исследовал этот вопрос и пришел к выводу, что можно избавится практически от всех ошибок кнопки магик в контроллере дисковода. Причем сохраняется полная совместимость со старой прошивкой tr-dos. Т.е. если вы записываете программу на новой прошивке, то её можно будет считать и на старой, но с ошибками. А на новой ячейки памяти в конце буфера принтера не будут портиться. Я даже стал писать новую прошивку, есть рабочий вариант, но там не все решено до конца.
один концептуальный нерешаемый баг: регистры сохраняются в памяти! с этим НИЧЕГО поделать нельзя. кто может это решить на стандартном железе - пусть кинет в меня камень:))) остальное все решаемое.
регистры сохраняются в памяти! с этим НИЧЕГО поделать нельзя. кто может это решить на стандартном железе - пусть кинет в меня камень:)))
Эх надо в смайлики Диззика с камнем добавить. :)
Можно, хоть и не полностью. Там же ведь организуется рабочее пространство путем отгрузки 512 байтов с адреса #4000 в 10 и 11 сектора диска. На стек программы можно сохранять не все регистры, а только те, которые портятся при отгрузке сектора. Насколько я сейчас помню это DE, BC, A, может еще HL. Ежу понятно еще и R. Все остальное можно выпихивать уже в новый стек. Хотя такой вариант уже не будет совместим со старым.
А вообще говоря, коль уж решили делать новый Magic, то хотел бы вставить свои два слова. ИМХО в наше время запись снапшотов на дискету - вещь неактуальная. А вот запись скриншотов очень даже рулила бы. Если хотим снапшоты оставить, можно как в +D сделать, там после Magic'а надо еще клавишу нажимать - в зависимости от этого на диск отгрузится либо только картинка либо весь снапшот.
Если хотим снапшоты оставить, можно как в +D сделать, там после Magic'а надо еще клавишу нажимать - в зависимости от этого на диск отгрузится либо только картинка либо весь снапшот.
Полностью поддерживаю идею! очень часто пользовался магиком чисто для сохранения скриншотов :)
На стек программы можно сохранять не все регистры, а только те, которые портятся при отгрузке сектора.
и какая принципиальная разница? ни-ка-кой! просто чуть меньше стека запортачите. любую программу так не скинешь;)
а то камни кидать все горазды;)
юзайте альтернативный magik в прошивке Хакер-2000 - там на стеке сохраняется минимум регистров, остальное сохраняется на диске. И картинку моно отдельно сохранять, но только в начале диска.
[bETA]mEN
21.07.2007, 20:14
где такая прошивка?
http://zx.pk.ru/showthread.php?t=2652
Barmaley_m
20.07.2008, 03:14
Оригинальная TR-DOS достаточно глупа, чтобы не только сохранять в стек прерванной программы регистры, но и пользоваться этим стеком при вызове своих подпрограмм. Если стек расположен в начале экранной памяти или в ПЗУ, то не успев даже включить мотор дисковода, TR-DOS вернется на адрес FFFF, где его уже ждут :)
На этой основе делается защита от Magic, так что если нажать Magic в защищенной программе, то программа сохранит управление и покажет пользователю смачную фигу.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot