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

User Tag List

Страница 15 из 27 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя
Показано с 141 по 150 из 262

Тема: Проект открытой реплики Союз-Неон ПК-11/16

  1. #141
    Activist
    Регистрация
    18.04.2015
    Адрес
    г. Люберцы
    Сообщений
    342
    Спасибо Благодарностей отдано 
    103
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    26 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Т.е. при инициализации мы опрашиваем мышь, затем складываем r0 (смещение по X) и r1 (смещение по Y), и устанавливаем флаг, если оба этих смещения отрицательные. Зачем, не понятно)
    Могу пофантазировать на счёт того зачем так сделали...

    Если мышь не подключена, то вычитаются все по обоим направлениям -1 (за счёт подтягивающих резисторов) , сложение 0xFFff + 0xFFff даст перенос - мышки нет, сбрасываем признак её наличия и эмулируем её за счёт прослушивания нажатии на клавиатуре.

    А вот если мышка есть, то первое к ней обращение вычитает текущие приращения (которые не будут использованы) и главное счётчики внутри мышки сбросятся. Второе обращение к мыши производится настолько быстро, что ни один из счётчиков не успевает измениться - они остаются нулевыми. Ноль плюс ноль - переноса не даст, значит мышка есть.

    Кажется, что перемещая мышь очень быстро про диагонали (так чтобы приращения были отрицательными по обоим координатам и это дало перенос), и мышь не определится... Но считывание с мыши идёт без паузы (при том с запрещенными прерываниями!), а от обоих оптопар должны прийти фронты, прежде счётчик там изменит своё состояние. Наверное можно задался целью с какой скоростью при этом должна двигаться мышь, но мне влом... К тому же, если у кого руки дрожат, то нечего ему мышь за 50$ доверять.

    Т.е. в эмуляторе нужно отслеживать сколько времени прошло от предыдущего считывания байта с состоянием dx, если совсем мало - выдавать нулевые приращения. Плюс там широкий строб является признаком начала считывания первого байта (dy).
    Последний раз редактировалось troosh; 17.09.2019 в 00:18.

  2. #142
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,563
    Спасибо Благодарностей отдано 
    1,225
    Спасибо Благодарностей получено 
    1,767
    Поблагодарили
    685 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от troosh Посмотреть сообщение
    Если мышь не подключена, то вычитаются все по обоим направлениям -1 (за счёт подтягивающих резисторов) , сложение 0xFFff + 0xFFff даст перенос - мышки нет, сбрасываем признак её наличия и эмулируем её за счёт прослушивания нажатии на клавиатуре.

    А вот если мышка есть, то первое к ней обращение вычитает текущие приращения (которые не будут использованы) и главное счётчики внутри мышки сбросятся. Второе обращение к мыши производится настолько быстро, что ни один из счётчиков не успевает измениться - они остаются нулевыми. Ноль плюс ноль - переноса не даст, значит мышка есть.
    Думаю, что ты прав. Очень все логично)

    На той же самой корветовской мышке признаком ее отсутствия, если не ошибаюсь, было число 8, считанное из одного из счетчиков. Вот тут - точно не понятно, почему)

  3. #143
    Activist
    Регистрация
    18.04.2015
    Адрес
    г. Люберцы
    Сообщений
    342
    Спасибо Благодарностей отдано 
    103
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    26 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    На той же самой корветовской мышке признаком ее отсутствия, если не ошибаюсь, было число 8, считанное из одного из счетчиков. Вот тут - точно не понятно, почему)
    В корветовской мышке (или в той, которая была прообразом и по-моему это был msx трекбол), использовали в качестве счётчиков микросхему из имеющего ряда, нужно была такая чтобы её можно было сбросить не уровнем сигнала, а в момент его фронта или спада. Нашлась такая, у которой при этом происходила установка в произвольное состояние задаваемое 4-ми пинами. Ну а далее видимо просто выбрали код максимально удаленный от значения 0xF (мышь неподключена), т.е. в любом направлении (инкремент/декремент) потребуется больше всего импульсов чтобы перейти из 8 в 0xF. Ну а потом в драйвере эту восьмёрку вычитают, чтобы получилось число со знаком...

    У корветовской мышки счёт происходит пока сигнал строб в нуле, при этом на выход к 4-х битной шине подключен счетчик dx. Когда пришло время опрашивать мышь считывается это накопившееся значение dx, затем строб устанавливают в "1", - к выходам подключается счётчик dy, который затем считывают. После строб снимают и на этом переходе строка "1"->"0" оба счётчика сбрасываются в значение "8", и далее начинают подсчитывать импульсы с оптопар (от каждой оптопары должно прийти по изменению уровню прежде чем счётчик продвинется, а их фаза определяет направление).
    Для определения наличия корветовской мыши быстро передёргивают строб "0"->"1"->"0" без вычитывания ненужных для этого значений, и уже после считывают как бы второй раз dx, который должен быть "8"-кой, т.к. его только что сбросили. Там нет двойного вызова полной процедуры вычитывания dy/dx/keys так как всё проще из-за того, что счётчики всего лишь 4-х битные. Но идея та же...

    То, что для определения msx мышей проверяют оба счётчика это некоторая избыточность: достаточно было проверить, что сразу после сброса любой из них нулевой, а вместо этого автор(ы) драйвера пытаются не очень надёжно проверь что мыши нет, если по обоим счётчикам прочитали 0xFF (такое может если мышь действительно не подключена или движется по диагонали с первой космической скоростью).

  4. Этот пользователь поблагодарил troosh за это полезное сообщение:

    Titus (17.09.2019)

  5. #144
    Master Аватар для Woland
    Регистрация
    26.10.2011
    Адрес
    Москва
    Сообщений
    554
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    15 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Woland Посмотреть сообщение
    Попробовал провести разметку с обновленным ide6v.prc от troosh, результат неудовлетворительный. Кроме того, если дать команду dir st0: с драйвером
    ide6v.prc - выдает ошибку ?MON-F-No device 001410
    Проверил также новые варианты ide2v.prc и ide7v.prc - ошибка форматирования #10. В общем, принципиально ничего не поменялось. Может эти драйвера рассчитаны на контроллер с другой принципиальной схемой - от руки которая нарисована была.. Или они равнозначны скорее всего???
    Может контроллер банально неисправен, но тогда почему позволяет параметры винта вычитать..
    Возрождение БК0011М: pk-fpga.ru, forum.pk-fpga.ru
    Продажа электронных компонентов >>тут<<

  6. #145
    Activist
    Регистрация
    18.04.2015
    Адрес
    г. Люберцы
    Сообщений
    342
    Спасибо Благодарностей отдано 
    103
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    26 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Woland Посмотреть сообщение
    Проверил также новые варианты ide2v.prc и ide7v.prc - ошибка форматирования #10. В общем, принципиально ничего не поменялось. Может эти драйвера рассчитаны на контроллер с другой принципиальной схемой - от руки которая нарисована была.. Или они равнозначны скорее всего???
    Может контроллер банально неисправен, но тогда почему позволяет параметры винта вычитать..
    Что такое ошибка форматирования?
    Чтобы не гадать какой именно вариант нужно с пользоваться нужно на чипе i8259 посмотреть куда приходят (и приходят ли) сигналы прерывания от ide.
    Судя по исходникам везде используют одинаковые адреса регистров, видимо схемы отличаются дешифратором адресов (на рассыпухе или на дешифраторе).
    Для вычитывания параметров диска как раз прерывания не используют.
    Также прерывания не использует драйвер DH, но он у тебя виснет как и тест памяти

  7. #146
    Master Аватар для Woland
    Регистрация
    26.10.2011
    Адрес
    Москва
    Сообщений
    554
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    15 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от troosh Посмотреть сообщение
    Что такое ошибка форматирования?
    https://ibb.co/R6ZS0GX
    Возрождение БК0011М: pk-fpga.ru, forum.pk-fpga.ru
    Продажа электронных компонентов >>тут<<

  8. Этот пользователь поблагодарил Woland за это полезное сообщение:

    troosh (19.09.2019)

  9. #147
    Activist
    Регистрация
    18.04.2015
    Адрес
    г. Люберцы
    Сообщений
    342
    Спасибо Благодарностей отдано 
    103
    Спасибо Благодарностей получено 
    31
    Поблагодарили
    26 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Woland Посмотреть сообщение
    А теперь понял. Код возврата этот драйвер выдаёт если сам диск сообщает о своём аварийном состоянии, либо когда от него не пришло прерывание.

    Надеюсь ты запускал IDHARD.SAV, а не просто HARD.SAV? (они визуально не различаются)

    Эти обе программы работают через драйвер (используя адрес эмулируемого регистра 0177130), т.е. непосредственно с регистрами контроллера не работают.

    Программа HARD.SAV написана на Си и этот исходник я нашел на дисках, IDHARD.SAV очень похожа, но исходник у неё был другой - нужно будет разбираться по дизассемблеру...

  10. #148
    Master Аватар для Woland
    Регистрация
    26.10.2011
    Адрес
    Москва
    Сообщений
    554
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    15 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от troosh Посмотреть сообщение
    Надеюсь ты запускал IDHARD.SAV, а не просто HARD.SAV? (они визуально не различаются)
    Использовал именно IDHARD.SAV
    Возрождение БК0011М: pk-fpga.ru, forum.pk-fpga.ru
    Продажа электронных компонентов >>тут<<

  11. Этот пользователь поблагодарил Woland за это полезное сообщение:

    troosh (19.09.2019)

  12. #149
    Guru
    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    13,563
    Спасибо Благодарностей отдано 
    1,225
    Спасибо Благодарностей получено 
    1,767
    Поблагодарили
    685 сообщений
    Mentioned
    67 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от troosh Посмотреть сообщение
    Ну а далее видимо просто выбрали код максимально удаленный от значения 0xF (мышь неподключена), т.е. в любом направлении (инкремент/декремент) потребуется больше всего импульсов чтобы перейти из 8 в 0xF. Ну а потом в драйвере эту восьмёрку вычитают, чтобы получилось число со знаком...
    Тут все проще. Просто у этой мыши инвертированный знак. Таким образом, -8 - это нулевое смещение с отрицательным знаком. Т.е. если мышь подключена, но по X не перемещается, то смещение всегда равно 0. Инвертируем знак, получаем -8 (т.к. у нас 4-битный счетчик со знаком). Вот эту восьмерку при инициализации драйвер и проверяет.

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

    В общем, систематизировал особенности работы драйверов MSX-мыши и Корветовской мыши:

    Код:
    При инициализации мыши MSX:
    
    Первый опрос мыши MSX:
    Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x580 (строб 1)
    Read word from CPU register PPIC from location PC=0x588
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x58A (строб 0)
    Read word from CPU register PPIC from location PC=0x5A2
    Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x5A4 (строб 1)
    Read word from CPU register PPIC from location PC=0x5BC
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5BE (строб 0)
    Read word from CPU register PPIC from location PC=0x5D6
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5F0 (сброс строба перед опросом кнопок)
    
    Второй опрос мыши MSX:
    Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x580 (строб 1)
    Read word from CPU register PPIC from location PC=0x588
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x58A (строб 0)
    Read word from CPU register PPIC from location PC=0x5A2
    Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x5A4 (строб 1)
    Read word from CPU register PPIC from location PC=0x5BC
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5BE (строб 0)
    Read word from CPU register PPIC from location PC=0x5D6
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5F0 (сброс строба перед опросом кнопок)
    Код:
    При инициализации мышки Корвет:
    
    Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x546
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x54C
    Read word from CPU register PPIC from location PC=0x550				(X-смещение) ($8 - для стоячей мыши (-0))
    
    
    Опрос мышки Корвет:
    
    Read word from CPU register PPIC from location PC=0x580				(X-смещение)
    Write word 0x00E0 to unrealized CPU register PPIA from location PC = 0x582      (строб 1)
    Read word from CPU register PPIC from location PC=0x5B8				(Y-смещение)
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x5BA      (строб 0)
    Write word 0x0060 to unrealized CPU register PPIA from location PC = 0x600	(сброс строба перед опросом кнопок)
    Таким образом, можно выделить признаки, по которым со стороны эмулятора можно четко определить, какую мышь опрашивает драйвер:

    Для переключение на корветовскую мышь - это:
    Строб=1, затем строб=0, без промежуточных чтений порта C.
    (данное состояние происходит при инициализации Корветовской мыши)

    А переключение на MSX-мышь - это:
    Строб=0, затем строб=1, без промежуточных чтений порта C.
    (данное состояние происходит между двумя чтениями MSX-мыши)

    Есть еще и третье подобное состояние, которое встречается перед чтением кнопок для Корветовской мыши:
    Строб=0, затем строб=0, без промежуточных чтений порта C.
    Но оно ни на что не влияет, и отслеживать его не нужно.
    Последний раз редактировалось Titus; 19.09.2019 в 18:56.

  13. #150
    Master Аватар для Woland
    Регистрация
    26.10.2011
    Адрес
    Москва
    Сообщений
    554
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    15 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Таким образом, можно выделить признаки, по которым со стороны эмулятора можно четко определить, какую мышь опрашивает драйвер
    Это для чего определять? Написание универсального драйвера для обоих типов мышей?
    Возрождение БК0011М: pk-fpga.ru, forum.pk-fpga.ru
    Продажа электронных компонентов >>тут<<

Страница 15 из 27 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Эмулятор Союз-Неон ПК-11/16 - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 335
    Последнее: 01.04.2024, 11:33
  2. Программирование для ПК 11/16 «Союз-Неон»
    от MacBuster в разделе ДВК, УКНЦ
    Ответов: 149
    Последнее: 11.01.2021, 21:10
  3. ПК-11 'Союз-Неон'
    от Keeper в разделе ДВК, УКНЦ
    Ответов: 12
    Последнее: 16.10.2013, 05:07

Ваши права

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