С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
думаешь, если приделать wait на ногу проца - это серьезно увеличит "работоспособность" магика? Как-то не верится, уж больно много он всего портит, никакой wait не спасет.Ребята, мои познания в архитектуре спекка очень скромны, я не могу с вами спорить, вы же интелектом меня задавите )) Давайте рассуждать проще: вы мне показываете хотя бы одну игру, которая не работает после M3 (М3 прекрасно эмулируется в спектакуляторе и в других эмулях он есть), после этого все разговоры о том что он что-то там портит. Потому как если он даже что-то портит, но игра при этом полностью рабочая и без глюков - то пусть себе портит на здоровье
Куплю корпус и материнку от Spectrum +2/+3
Еще мысль - аппаратно никак нельзя придумать, чтобы, когда приходит прерывание, оно, скажем, сначала лезет в доп.устройство, а там, в ОЗУ/ПЗУ, стоит, к примеру перемещение по вектору из регистра I. А если нужно - клац, и там появляются нужные процедуры save/load магика.
Это вопрос, типа...
Ave ZX!
вот это уже другое дело. Просто я брал самое крутецкое супер профессианальное пзу скорпиона, подсовывал его унреалу и так тестил. В спектакуляторе тоже тестил. На реале не тестил, реала нет такого. но мне почему-то кажется, что реал тоже будет лажать. Этот скорпионовский снапшотер кардинально ничем не лучше трдосного магика.
Ikari warriors/viktory road на M3 щас протестю.
Куплю корпус и материнку от Spectrum +2/+3
Ты прав 100% в следующем - нам не нужно игру сохранять в этом виде (снап) для потомков. Нам нужно ее до конца доиграть просто. А тут уже чем-то можно и пожертвовать. Ну, типа, если диззи-рамка немного попортится - хрен на нее!
И по этому поводу еще одна мысль (можно или нельзя это аппаратно реализовать - я уж не знаю) - по нажатию кнопки запоминается два байт стека в первых двух байтах экрана, а в стек суется адрес возврата. И дальше уже пошло-поехало по вышеописанным методам. Не будут работать пару-тройку игр, где адреса 16384 и 16385 используются бог весть для чего.
---------- Post added at 10:32 ---------- Previous post was at 10:25 ----------
Кста, а если использовать адреса 22528 и 22529 - вообще ништяк!!! Они точно ни для чего не нужны. Будут 2 аттрибута в уголке моргать себе...
Последний раз редактировалось Slider; 16.01.2015 в 11:31.
Ave ZX!
Только на софтовых Z80. Железный Z80 при приходе прерывания всегда пишет адрес возврата в стек.
Да нет, он кардинально лучше. Тем, что портит только несколько байт в стеке, а MAGIC колбасит ОЗУ дай боже. Еще актуальное для давних времен и реальных дискет - MAGIC не проверяет ошибки чтения-записи в принципе и может запороть дискету запросто. Скорповый монитор работает нормально, причем, и со СМУК тоже.
Кстати, при сохранении LNR Скорпом под эмулем есть еще одна странность: он пишет всю 256К-память, хотя игра 48-я и верхняя память чистая. Что-то в эмуле не так...Указатель стека живет внутри Z80, внешняя схема его прочитать не может. Опять же, soft core, но сколько проблем принесет можификация никто не знает и заморачиваться не будет. Мне что-то даже с сигналом BUSRQ и DMA ничего хорошего в голову не приходит. Если только BUSRQ + NMI...
Небольшой поток сознания, на тему: "Как я вижу идеальный снапшот на реале"
Как я вижу идеальный снапшот на реале
Нажатие кнопки "Магик" переводит устройство в состояние MAGIK_WAIT_II. (ждём маскируемое прерывания для "магика")
В этом состоянии, когда приходит время для маскируемого прерывания, вместо него происходит переход в состояние IN_MAGIK, и одновременно немаскируемое прерывание.
В состоянии IN_MAGIK Первые 8Кбайт адресного пространства заняты "Магик-ПЗУ" остальные 40Кбайт "Магик-ОЗУ". Маскированное прерывание приходит раньше на определённое число тактов. Открываются специальные МАГИК-порты:
1. управления банками памяти (какую банку памяти (и "Магик" и "НЕмагик") ОЗУ включаем в адресное пространство (#C000..#FFFF))
2. Чтение состояния. (Какой был бордер, Какие банки памяти куда включены, какой регистр муз. сопроцессора выбран и как давно запущена "одиночная волна", какой режим прерывания (IM 2, IM1 ?, DI или EI), и прочее в том-же духе, что можно только писать, но нельзя прочитать штатными средствами. Получается, факты записи(обычной программы) должны фиксироваться устройством в своей памяти. Возможно это не порт, а просто пишется в МАГИК-память, скажем начиная с адреса #2000.
3. Запись перехода в состояние MAGIC_WAIT_RET
Обработчик маскируемого прерывания сохраняет в стеке(который с большой долей вероятности указывает в ОЗУ, а не в ПЗУ )
регистры (первым PC, само собой), при этом не портится ни один байт простого ОЗУ.
Всё сохраняет на диск в виде файла. Возможно показывает меню, возможно читает клавиатуру, и в зависимости от нажатой клавиши записывает в определённый файл, читает из определённого файла, читает пользовательскую "Магик"-программу, из определённого файла, в ОЗУ по адресу #2100. Выполняет пользовательскую "Магик"-программу.
Затем инициируется выход записью в спец-порт. Переходим в состояние MAGIC_WAIT_RET. Восстанавливаем значение регистров, SP, на вершину стека не забываем поставить адрес возврата. В момент, когда началось нормальное маскированное прерывание выполняем RET. (расчитать по тактам)
Сразу после RET, когда в PC запишется (SP) из Магик памяти, переходим в обычный режим, следующий код команды будет читаться из простой памяти. Произойдёт прерывание (если оно включено ), и все пойдёт как по маслу.
[свернуть]
Упоминавшиеся в теме Ikari warriors и victory road я протестил на спектакуляторе. Результаты такие: если в качестве носителя выбираем диск +3, то проблем вообще никаких, всё идеально, лишь бордер вместо черного становится синим, но в M3 помимо снапшотов уйма других функций, может с их помощью можно бордер вернуть на место (?).
Если выбираем ленту, то есть небольшой глюк, но это не относится к конкретным играм или к мультифейсу, скорей всего это глюк эмуляции. Заключается он в следующем: если попытаться грузить полученный образ на обычной скорости, то ближе к концу происходит какая-то рассинхронизация, "лента теряется" и привет. Если грузить в режиме турбо, то всё, как и с диском, работает идеально. Скорей всего паузы при записи не корректно эмулируются или что-то еще.
В аттаче 2 образа диска. И ленточный образ, тот самый который только на трубо грузится. Запускать так. На спектакуляторе: модель выбираем +3. В опциях включаем мультифейс, в настройках мультифейса ставим 128-ой. После ресета жмем ALT+M, жмем D (dos), затем L (load), вводим имя файла (IKM3 - для икари, VIC - для виктори роад), ентер.
Для ленты, жмем ALT+M (типа активировали М3, такая хрень токо в спекуляторе, в других эмулях если М3 есть, то он есть и не надо каждый раз после ресета его инициализировать), жмем R. Теперь жмем либо лоадер (в дисководе +3 не должно быть диска) либо load"". Грузится как обычная программа, но только в режиме турбо-загрузки почему-то. Можно грузить и на +2A - работает.
Таким образом максимум что портит M3 - это бордер. Но может это как-то обойти можно, и в большинстве игр даже бордер не портится.
Последний раз редактировалось ZX_NOVOSIB; 16.01.2015 в 13:45.
Куплю корпус и материнку от Spectrum +2/+3
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)