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

User Tag List

Страница 6 из 18 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 176

Тема: Эмулятор БК-0010-01, БК-0011 и БК-0011М

  1. #51
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    537
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    104 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    хватит даже одного опроса в начале фрейма
    Пример кода приведите пожалуйста.
    Цитата Сообщение от Pyk Посмотреть сообщение
    А какова сейчас продолжительность фрейма?
    А сейчас 40 мс. Так звук с ковокса и AY более гладкий, без микроразрывов в промежутках между фреймами. Т.е. если они и возникают, то треск не так сильно в уши бросается.

  2. #52
    Veteran Аватар для Pyk
    Регистрация
    05.04.2013
    Адрес
    с. Починки, Нижегородская обл.
    Сообщений
    1,180
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    456
    Поблагодарили
    182 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Посмотрел немного исходники. До конца не разобрался, но как понял используется waveOut, и привязка к реальному времени происходит путем ожидания окончания звучания фрейма?
    При этом действительно возникает треск при использовании буфера аудио слишком малого размера.
    Одно из решений: уменьшить размер фрейма до 20 мс, оставив размер аудиобуфера прежним: задержка звука не так заметна, как задержка реакции на клавиатуру. Я применял подобный способ в 3-й версии emu80.

    Цикл при этом будет выглядеть примерно так:
    - фрейм 20 мс
    - задежка до 20 мс
    - рисуем экран и опрашиваем клавиатуру
    - фрейм 20 мс
    - ждем окончания проигрывания 40 мс звука
    - рисуем экран и опрашиваем клавиатуру
    Последний раз редактировалось Pyk; 18.03.2018 в 23:02.

  3. #53
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,551
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    264
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    167 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Пример кода приведите пожалуйста.
    что-то вроде:
    Код:
    // вызывается один раз в начале фрейма
    old_portX_value = new_portX_value;
    new_portX_value = 0xFF;  // ничего не нажато
    kb_state = getKeyboardState(); // что сейчас нажато на пц-клаве
    if (kb_state[some_key]) new_portX_value &= some_key_mask;
    // и так далее
    
    // обработка изменения состояния, тоже однократно
    if (old_portX_value != new_portX_value) { ... }
    
    // и далее в течение фрейма при любых чтениях порта X подставляем new_portX_value
    при эмуляции спека еще проще, не нужно обрабатывать изменение как событие, портов только много
    БК знаю плохо, но, вероятно, эмуляция лишь одного события по началу фрейма сильно упростит жизнь,
    субъективных ощущений не вызывая (всё равно человек так быстро кнопки не долбит)
    Прихожу без разрешения, сею смерть и разрушение...

  4. #54
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    537
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    104 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek Посмотреть сообщение
    getKeyboardState()
    Функция GetKeyboardState возвращает массив размером 256 байтов, для состояний каждой из 256 виртуальных клавиш.
    Чтобы узнать, какая клавиша нажата, надо пробежаться по массиву и определить их состояние. Но при этом если нажато несколько клавиш одновременно, невозможно определить, какую клавишу для БК надо считать нажатой, т.к. в любой момент времени на БК считается нажатой только одна клавиша, сколько бы их не нажимали одновременно, нажатой считается первая из всех нажатых. Если считать нажатой первую найденную в массиве, мы рискуем не угадать.
    Особенностью клавиатуры на БК является то, что никакие другие коды и вообще ничего не обрабатывается, пока все одновременно нажатые клавиши не будет отпущены. После этого ожидается нажатие клавиш. Т.е. требуется отслеживать именно факт нажатия и факт отжатия клавиш клавиатуры.
    А вот такую функцию, которая бы сообщала, что вот сейчас что-то нажато на клавиатуре, я не нашёл.

  5. #55
    Veteran Аватар для Pyk
    Регистрация
    05.04.2013
    Адрес
    с. Починки, Нижегородская обл.
    Сообщений
    1,180
    Спасибо Благодарностей отдано 
    263
    Спасибо Благодарностей получено 
    456
    Поблагодарили
    182 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    gid, а почему бы не использовать сообщения клавиатуры (WM_KEYUP, WM_KEYDOWN)? Они же приходят именно в том порядке, в каком были нажаты клавиши...

  6. #56
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,551
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    264
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    167 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Но при этом если нажато несколько клавиш одновременно, невозможно определить, какую клавишу для БК надо считать нажатой, т.к. в любой момент времени на БК считается нажатой только одна клавиша, сколько бы их не нажимали одновременно, нажатой считается первая из всех нажатых. Если считать нажатой первую найденную в массиве, мы рискуем не угадать.
    выбирай любую, какая разница? если ты ухитрился нажать несколько кнопок в промежутке 20мс, то и сам не знаешь, какая первая
    Прихожу без разрешения, сею смерть и разрушение...

  7. #57
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    537
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    104 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Pyk Посмотреть сообщение
    а почему бы не использовать сообщения клавиатуры
    Потому что Lethargeek против такого метода. А у меня как раз такой и используется.
    Цитата Сообщение от Lethargeek Посмотреть сообщение
    выбирай любую, какая разница?
    Какую любою? Я не ухитрился, я просто предполагаю, что нажатие на клавишу может быть сделано в абсолютно любой момент времени. И нажато может быть абсолютно любое количество клавиш. И некоторые из них могут оказаться теми, которые не должны восприниматься эмулятором ни в каком случае, он их должен просто игнорировать.
    Мне совершенно не хочется смешивать обработку клавиатуры по событиям и по опросу состояния, т.к. обработчик событий и так уже делает всю работу за меня - определяет, что нажато, формирует скан коды и флаги управляющих клавиш и выдаёт их мне.

    А вообще, я не знаю, чем hobot не доволен. В игре Boulderdash эмулятор БК ведёт себя именно так, как и настоящий БК-0010 с дубовой кнопочной клавиатурой. По моим детским воспоминаниям. Жмёшь на кнопку - а она не нажимается. Или нажалась, а реакции нету. Или наоборот, ты уже нажал другую кнопку, а игра всё ещё думает, что нажата предыдущая и человечек вечно бежит не туда. Помню, как в школе, на таких БКшках играл в игру Клад, пройти первый уровень было уже большим достижением.

    В общем, я сдаюсь. Пусть кто может - сделает больше.

  8. #58
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,551
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    264
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    167 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от gid Посмотреть сообщение
    Какую любою?
    любую любую (из нажатых, можно случайную)

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

    Цитата Сообщение от gid Посмотреть сообщение
    И нажато может быть абсолютно любое количество клавиш.
    ииии что? еще раз: в промежутке 20мс человек не способен проконтролировать, какая из нескольких клавиш нажмётся первой, так что можно смело выбрать любую

    Цитата Сообщение от gid Посмотреть сообщение
    И некоторые из них могут оказаться теми, которые не должны восприниматься эмулятором ни в каком случае, он их должен просто игнорировать.
    ну и кто мешает их игнорировать?

    Цитата Сообщение от gid Посмотреть сообщение
    Мне совершенно не хочется смешивать обработку клавиатуры по событиям и по опросу состояния,
    насколько я понял, бит 6 порта 177716 определяет именно состояние
    Прихожу без разрешения, сею смерть и разрушение...

  9. #59
    Master
    Регистрация
    19.04.2013
    Адрес
    г. Чебоксары
    Сообщений
    537
    Спасибо Благодарностей отдано 
    14
    Спасибо Благодарностей получено 
    134
    Поблагодарили
    104 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Pyk Посмотреть сообщение
    До конца не разобрался
    Ещёб. Даже мне приходится прибегать к помощи средств вижуалстудии, чтобы разобраться в той каше, что наворочена за всё это время.
    У меня не получается сделать такой цикл. Тот, что используется сейчас мне не нравится, я давно хочу изменить его, но как бы я ни ухищрялся, что бы ни придумывал, всё равно в конце-концов прихожу к тому, с чего начал. К этому же виду цикла.
    Звуковые буферы заполняются на лету с заданной частотой дискретизации звука во время исполнения фрейма. Потом по мере заполнения буфера, он отправляется на звучание. Если сделать звуковой буфер длиной 40мс, то при работе эмулятора получается чудовищное отставание звука в 40мс. Даже отставание в 20мс заметно. Поэтому всю работу с выводом звука на устройство я взял из BKBTL, с небольшой модификацией. Дополнительно фрейм разбивается ещё на 4 части. Т.е. звуковой фрейм на самом деле ещё в 4 раза меньше процессорного.


    Lethargeek, а напишите какой-нибудь тестовый проект, который покажет преимущества вашего метода. Просто окошко с кнопками старт/стоп, цикл выполнения фреймов, и заглушку процессора в виде конечного автомата, каждый этап которого - одна команда с каким-либо временем исполнения, который будет просто фиксировать наличие/отсутствие факта нажатия на клавиатуру в какой-нибудь расшаренной переменной и визуализировать это каким-нибудь значком рядом с кнопками старт/стоп.
    Возни будет много, результат - не определён.

  10. #60
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,551
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    264
    Спасибо Благодарностей получено 
    209
    Поблагодарили
    167 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

Страница 6 из 18 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Отличия БК-0011М от БК-0010(01)?
    от nzeemin в разделе БК-0010/0011
    Ответов: 22
    Последнее: 30.03.2021, 18:47
  2. БК-0010/0011: Разное
    от CD-Inc в разделе БК-0010/0011
    Ответов: 73
    Последнее: 30.07.2012, 16:58
  3. Начало выпуска БК-0011 и БК-0011М
    от dk_spb в разделе БК-0010/0011
    Ответов: 6
    Последнее: 14.10.2010, 14:22
  4. Отличие 0011 и 0011М
    от Kronshou в разделе БК-0010/0011
    Ответов: 11
    Последнее: 17.01.2010, 22:24
  5. Москва - куплю все связанное с БК-0010/0011
    от kt315b в разделе Барахолка (архив)
    Ответов: 0
    Последнее: 04.10.2008, 05:09

Ваши права

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