Важная информация

User Tag List

Страница 1 из 5 12345 ПоследняяПоследняя
Показано с 1 по 10 из 47

Тема: Как распознать, что опрос #FE игнорит магнитофон?

  1. #1

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Как распознать, что опрос #FE игнорит магнитофон?

    как известно, одна из особенностей такого скупердяйского компа как наш спек - совмещение на одном порту различных устройств

    то есть на #FE висит одновременно вывод звука и цвет бордюра, а на входе - одновременно магнитофон и клавиатура
    что способно доставить много радости эмулятороклепателям, желающим запилить автостарты/автостопы загрузки с ленты

    то есть, например, основная часть игрушки с мультилоадом загрузилась, напечатала для юзера "stop the tape" и кнопки ждёт
    но тем временем tape продолжает тянуться (ну вот tzx такой хреновый, без пометки "АСТАНАВИТЕСЬ", или вообще примитивный tap)

    собс-но, как эмулю понять, что в данный момент данные не загружаются, и пора остановиться и перемотать на начало блока?
    если опрос клавы достаточно редкий (например, по прерыванию) - сразу ясно, много импульсов пропущено == нет загрузки
    но вот если клава сканится довольно часто, в коротком цикле, и не пропускает изменений шестого бита? тогда что делать?

    в первую очередь интересуют наименее громоздкие возможные способы, без анализа выполняемого кода z80
    и в то же время достаточно надёжные, с наибольшей вероятностью распознать без ложных срабатываний

    поделитесь опытом и идеями
    Прихожу без разрешения, сею смерть и разрушение...

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Способ старый - детектим анализом кода/регистров наличие чтения в течении одного фрейма, если есть - обновляем таймаут. В конце фрейма уменьшаем переменную таймаута, если дошли до нуля - то стоп магнитофона.Таймаут в ZXMAK2 используется 50 фреймов (1 секунда).
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  4. #3

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Способ старый - детектим анализом кода/регистров наличие чтения в течении одного фрейма, если есть - обновляем таймаут.
    не, ну ё-моё...
    Цитата Сообщение от Lethargeek Посмотреть сообщение
    но вот если клава сканится довольно часто, в коротком цикле, и не пропускает изменений шестого бита? тогда что делать?
    ...а за целый фрейм даже im1 читает несколько раз; и конечно, никакого анализа кода при длинных промежутках масштаба фрейма проводить не надо - и так всё ясно

    - - - Добавлено - - -

    вот, к примеру, press any key в tap-версии Forgotten Worlds
    Код:
    l_ad84: ld hl, $ad8c		 ; ad84
    	ld (hl), $fe		 ; ad87
    	ld b, $08		 ; ad89
    l_ad8b: ld a, $ef		 ; ad8b
    	in a, ($fe)		 ; ad8d
    	and $1f			 ; ad8f
    	cp $1f			 ; ad91
    	ret nz			 ; ad93
    	rlc (hl)		 ; ad94
    	djnz l_ad8b		 ; ad96
    	jr l_ad84		 ; ad98
    промежутки меньше, чем длины импульсов
    Прихожу без разрешения, сею смерть и разрушение...

  5. #4

    Регистрация
    31.01.2007
    Адрес
    Москва
    Сообщений
    810
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    77
    Поблагодарили
    59 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Стандартный лоадер из которого делают 99.99% кастомных в ожидании смены фронта крутит цикл в 59 тактов, если между последними 5 опросами fe промежутки не 59 тактов у 4 из 5 то стоп.
    Если ложное срабатывание то пользователь пусть сам запустит пленку
    Последний раз редактировалось krt17; 26.12.2024 в 22:00.

  6. #5

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от krt17 Посмотреть сообщение
    Стандартный лоадер из которого делают 99.99% кастомных в ожидании смены фронта крутит цикл в 59 тактов,
    во-первых, у 99% кастомных там не 59

    Цитата Сообщение от krt17 Посмотреть сообщение
    если между последними 5 опросами fe промежутки не 59 тактов у 4 из 5 то стоп.
    во-вторых, даже в стандартном паттерн примерно ...59,59,59,500+,59,59...

    а вот, например, Basil the Mouse Detective
    загрузка ...29,29,29,47,29,29,29,,,29,123,29,29...
    опрос клавы ...50,50,50,50,150,50,50,50...

    + в разных хитрых рисовалках экрана еще не факт, что долгие промежутки только после фронта бывают


    Цитата Сообщение от krt17 Посмотреть сообщение
    Если ложное срабатывание то пользователь пусть сам запустит пленку
    а загрузка-то уже сбойнула, если ложно остановили
    ладно, это вместо автостопа решить можно паузой эмуля
    но всё равно, юзера поменьше дёргать желательно
    Прихожу без разрешения, сею смерть и разрушение...

  7. #6

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    не, ну ё-моё...
    ...а за целый фрейм даже im1 читает несколько раз; и конечно, никакого анализа кода при длинных промежутках масштаба фрейма проводить не надо - и так всё ясно
    я-же написал - детектим анализом кода/регистров наличие чтения в течении одного фрейма, это не значит что детектить нужно один раз за фрейм. Детектить нужно при каждом обращении к порту. Если детект положительный (в ZXMAK2 проверяется детект на 8 раз подряд в серии без пропуска), то сбрасываем таймаут и запускаем магнитофон, если не запущен.

    В конце фрейма уменьшаем таймаут. Если детектов не было, то по прошествии таймаута (в ZXMAK2 50 фреймов) стопаем магнитофон.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    вот, к примеру, press any key в tap-версии Forgotten Worlds
    промежутки меньше, чем длины импульсов
    проверил в ZXMAK2, автостарт магнитофона эта последовательность не вызывает
    Последний раз редактировалось ZXMAK; 27.12.2024 в 03:11.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  8. #7

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    я-же написал - детектим анализом кода/регистров наличие чтения в течении одного фрейма,
    именно, что "чтениЯ", а не "чтениЙ", и дальше невнятное - "если есть" (что именно?)

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    Детектить нужно при каждом обращении к порту. Если детект положительный (в ZXMAK2 проверяется детект на 8 раз подряд в серии без пропуска)
    "без пропуска" ЧЕГО? фрейма? импульса? пары импульсов? только данных или пилота тоже?

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    проверил в ZXMAK2, автостарт магнитофона эта последовательность не вызывает
    да, и почему же? опрос постоянный, твои "8 раз подряд" набирает за 554 такта
    либо что-то недоговариваешь, либо твой детект работает не так, как сам ожидаешь
    Прихожу без разрешения, сею смерть и разрушение...

  9. #8

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    "без пропуска" ЧЕГО? фрейма? импульса? пары импульсов? только данных или пилота тоже?
    при каждом обращении к порту делаем проверку на чтение магнитофона, если проверка сработала не менее 8 раз подряд, то делается сброс таймаута и команда на запуск магнитофона. Под пропуском понимается отрицательный результат детекта, т.е. все 8 обращений к порту подряд должны давать положительный результат. Если хоть один из них отрицательный, то начинаем считать по новой.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    да, и почему же? опрос постоянный, твои "8 раз подряд" набирает за 554 такта
    либо что-то недоговариваешь, либо твой детект работает не так, как сам ожидаешь
    постоянство опроса с периодом укладывающимся в уставку не достаточный признак для положительного результата детекта, нужно еще регистры процессора сравнивать с предыдущим обращением к порту.
    Последний раз редактировалось ZXMAK; 27.12.2024 в 15:34.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

  10. #9

    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,963
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    319
    Спасибо Благодарностей получено 
    312
    Поблагодарили
    236 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    при каждом обращении к порту делаем проверку на чтение магнитофона,
    "сепульки - см. сепулькарии; сепулькарии - см. сепуление; сепуление - см. сепульки"
    ну блин горелый жеж... ЧТО КОНКРЕТНО значит "делаем проверку на чтение магнитофона"??
    вопрос был именно о том, КАК отличить чтение (=проверку) магнитофона от чтения (=проверки) ТОЛЬКО клавиатуры!

    Цитата Сообщение от ZXMAK Посмотреть сообщение
    постоянство опроса с периодом укладывающимся в уставку не достаточный признак для положительного результата детекта, нужно еще регистры процессора сравнивать с предыдущим обращением к порту.
    так опиши подробнее достаточный признак - какие регистры, как и с чем сравнивать
    не заставляй меня ощущать себя инквизитором, тянущим клещами признание вместе с жилами))
    Прихожу без разрешения, сею смерть и разрушение...

  11. #10

    Регистрация
    30.01.2006
    Сообщений
    1,921
    Спасибо Благодарностей отдано 
    73
    Спасибо Благодарностей получено 
    119
    Поблагодарили
    80 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    вопрос был именно о том, КАК отличить чтение (=проверку) магнитофона от чтения (=проверки) ТОЛЬКО клавиатуры!
    однозначного и красивого ответа на этот вопрос нет. В каждом эмуляторе это делается по своему.

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    так опиши подробнее достаточный признак - какие регистры, как и с чем сравнивать
    не заставляй меня ощущать себя инквизитором, тянущим клещами признание вместе с жилами))
    В ZXMAK2 для этого проверяется что опрос порта происходит с интервалом не превышающим уставку, далее сравнивается состояние всех основных регистров с предыдущим обращением к порту, если изменился 1 регистр в + или в -, то увеличиваем счетчик вероятности опроса магнитофона. Как только счетчик больше уставки (в ZXMAK2 это 8), то считаем что детект положительный, т.е. идет чтение с магнитофона.
    ZXMAK2 - Виртуальная Машина ZX Spectrum https://github.com/zxmak/ZXMAK2 (старая ссылка http://zxmak2.codeplex.com)
    ZXMAK.NET - спектрум на C# http://sourceforge.net/projects/zxmak-dotnet

Страница 1 из 5 12345 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Помогите распознать...
    от joub в разделе Несортированное железо
    Ответов: 4
    Последнее: 23.03.2022, 00:06
  2. Помогите распознать!
    от Вадим Димтревич в разделе Музыка
    Ответов: 9
    Последнее: 15.04.2020, 13:37
  3. MP3 плеер, как магнитофон для ZX?
    от Addison в разделе Звук
    Ответов: 12
    Последнее: 27.09.2007, 20:19

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •