weiv, можно узнать, какая версия эмулятора на сегодня самая последняя и где её можно скачать ?
Вид для печати
weiv, можно узнать, какая версия эмулятора на сегодня самая последняя и где её можно скачать ?
Новых версий не было с 2017го года. Скачать релиз эмулятора со всеми сопутствующими файлами можно здесь: http://www.emu-land.net/computers/zx.../emuls/windows.
Публичный апдейт 1.02 можно скачать здесь: https://drive.google.com/file/d/1fg4...ew?usp=sharing
после 1.03b не было обновлений ?
Публичных не было.
А если не публичная, тогда как, куда и сколько будет стоить?
Пока, увы, никак, никуда и нисколько. Нет мотивации заниматься релизом.
Понятно, что невозможно найти аргументов, которые бы убедили автора продолжить разработку этого эмулятора. А эмулятор шикарный -- он, единственный из всех, что я смог найти, загрузил эту игрушку (Alt+Q, F3). Сама игрушка довольно обычная, но вот загрузка её уникальна! Это такая загрузка, что дико жалеешь, что этого метода не было в стандартном ПЗУ Спектрума -- картинка загружается не до основного блока, а во время его, причем построчно. Получается, что дождавшись загрузки картинки, фактически сразу и начинаешь игру -- т.е. картина одновременно является и прогресс-баром загрузки! Шикарная технология и только Спектрамин смог загрузить этот файл -- ну разве это не повод хоть немножко продолжить развитие этого уникального продукта? Было бы классно! :-)
https://disk.yandex.ru/d/VgubumISzuHUfA
Ты несомненно прав! И особенно замечательно, что это не помешало данному эмулю запустить загруженный кодовый блок, что часто очень полезно при разработке программ (хотя и не критично).
(Что касается игры, прикол в том, что этот tzx я качал с крупного сайта, в разных вариантах (от разных издателей) в форматах и tzx и tap.. И загрузка там была разной, но везде не было бейсик-загрузчика.. Было бы интересно поглядеть лицензионную кассету -- может и там нет бейсик-загрузчика, а в инструкции просто написаны соответствующие команды? Это было бы вдвойне необычно -- в т.ч. как своеобразная защита от копирования, в т.ч. даже напрямую с ленты на ленту! Может даже гениальная защита! Такая же уникальная, как и загрузка этой игры -- не удивился бы! :-) )
Такое впечатление, что все не читали "тайники" или "спектрум изнутри":
Код:Другим интересным способом способом запуска блоков машинного кода
является считывание программы в область машинного стека. Этим способом
можно запускать блоки машинного кода, загружая их просто через LOAD ""
CODE. Этот метод показан схематично на рисунке 8.
Машинный Стек
┌───────────┐
65356 │ │
65357 │ ... │
Per SP ─────> │ 1343 │
65359 │ │
65360 │ 2053 │
65361 │ ╔═╧═══════╗
65362 │ 7030 ║ 65535 ║
65363 │ ║ ║
65364 │ 4867 ║ ? ║
65365 │ ║ ║
65366 │ ? ║ ? ║
RAMTOR ─────> │ 62 ║ 62 ║
65368 │ ║ LD IX ║
65369 │ ║ ... ║
65370 │ ║ LD DE ║
└─────────╢ ... ║
╚═════════╝
Рис.8 Схема автозапуска блока кодов.
Указатель стека (регистр SP) принимает показанное на рисунке 8
состояние в процессе выполнения процедуры 1366 (вызванную из БЕЙСИКа
через LOAD "" CODE). Способ запуска программы весьма прост. Адрес
считывания блока рассчитан так, что блок считывается на машинный стек
именно с того места, в котором находится (записанный интерпретатором
БЕЙСИКа) адрес возврата из инструкции LOAD "" CODE (он тогда равен
значению системной переменной ERRSP-2) или прямо из процедуры
LOAD-BYTES (равный ERRSP-6). Тогда два первых байта программы
обозначают адрес ее запуска. Этот способ очень похож на предыдущий, за
исключением того, что там подменялась процедура загрузки, а здесь -
адрес считывания блока кодов, микропроцессор считывает содержимое
стека и переходит по прочитанному адресу (который только что появился
в памяти). По этому адресу в программе находится начало процедуры
загрузки ее последующих блоков. Это видно на рисунке 8.
Метод обхода такой защиты также весьма прост, достаточно заменить
RAMTOR на соответственно низкое значение, а затем прочитать блок
кодов, который благодаря этому не запуститься.
Я специально выделил место про изменение RAMTOP на другое значение и код не запустится.Код:В этом разделе был описан способ запуска машинного кода путем
считывания в область машинного стека. Чтобы такой блок запустить
достаточно ввести инструкцию LOAD "" CODE, которая запустит его. Чтобы
убедиться в этом на практике введите программу с листинга 5.
Листинг 5. Пример автозапуска машинной программы.
10 CLEAR 65361: LET s=0
20 FOR n=65362 TO 65395: READ a: POKE n,a: LET s=s+a: NEXT n
30 IF s<>3437 THEN PRINT "OSIBKA V STROKE DATA": STOP
40 SAVE "beep" CODE 65362,34
50 DATA 88,255,3,19,0,62,221,229,6,8,197,17,30,0,33,112,5,205
60 DATA 181,3,33,0,8,43,124,181,32,251,193,16,235,221,225,201
Она запишет на ленте короткий блок машинного кода, который будет
запускаться самостоятельно. После записи этого блока освободите память
с помощью RANDOMIZE USR 0 или <RESET> (по возможности переставьте
RAMTOR на нормальное значение с помощью CLEAR 65367) и загрузите его с
помощью LOAD "" CODE. Цель этого блока проинформировать о том, что он
запустился - он делает это несколькими звуковыми сигналами. Вы
услышите их сразу после считывания программы, как только с рамки
исчезнут красно-желтые полосы.
Но в "Halls Of The Things" применён ещё более железобетонный метод запуска — код грузится в область системных переменных, а конкретно в
ERR_SP 23613/14 IY+3 (#5C3D/3E)
Адрес, на который устанавливается указатель стека при запуске программы обработки ошибок. Изменив значение переменной, можно подключить собственные процедуры обработки ошибок (см. «Использование подпрограмм ПЗУ»).
Совершенно неудивительно что он автоматически запускается после загрузки. И заслуги эмулятора, что он это умеет, здесь нет.