76

Re: Разбор архитектуры софта ЯЗС

Я сам слегка озадачен, что она нормально работает. Подозреваю, что я пропустил какую-то неявную особенность работы клавиатуры (а может, самой ЯЗС).
Буду разбираться.

77

Re: Разбор архитектуры софта ЯЗС

avivanov76 пишет:

Боюсь, книжку в 300 страниц они забесплатно не захотят сканировать. А бумажный экземпляр я бы купил.

Я уже купил.

78

Re: Разбор архитектуры софта ЯЗС

avivanov76 пишет:

Я сам слегка озадачен, что она нормально работает. Подозреваю, что я пропустил какую-то неявную особенность работы клавиатуры (а может, самой ЯЗС).
Буду разбираться.

Могу снять видео работы с контрапунктом (не очень быстро), могу прислать исходник программы контроллера адаптера. Наверное, больше ничего не могу сделать...

79

Re: Разбор архитектуры софта ЯЗС

Еще раз проверил сигналы на выходе клавиатуры, потом посмотрел на схему ЯЗС и наконец-то картинка сложилась :)

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

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

AlexBel пишет:

Если программа "Гномы" нормально работает с штатной музыкальной клавиатурой, а у меня с её эмулятором не работает, значит, ошибки у меня. Но, в то же время, мой эмулятор нормально работает с "Контрапунктом". Где я что пропустил?

В примере тут написано:

При нажатии первой клавиши выводится 0x80, при отпускании 0x00. Для второй клавиши, соответственно, 0x81 и 0x01.

А должно быть наоборот, при нажатии первой клавиши должно выводиться 0x00, а при отпускании 0x80.
И еще, в "Гномах" номера клавиш прописаны в коде. Допустимы номера от $13 (до) до $1E (си). Те же ноты в других октавах игнорируются.

garnizon пишет:

Я уже купил.

Фу! Отлегло. А то я такой полез за книжкой, а все, единственный экземпляр продан.

80 Отредактировано AlexBel (17-05-2021 13:35)

Re: Разбор архитектуры софта ЯЗС

avivanov76 пишет:

Еще раз проверил сигналы на выходе клавиатуры, потом посмотрел на схему ЯЗС и наконец-то картинка сложилась :)

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

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

AlexBel пишет:

Если программа "Гномы" нормально работает с штатной музыкальной клавиатурой, а у меня с её эмулятором не работает, значит, ошибки у меня. Но, в то же время, мой эмулятор нормально работает с "Контрапунктом". Где я что пропустил?

В примере тут написано:

При нажатии первой клавиши выводится 0x80, при отпускании 0x00. Для второй клавиши, соответственно, 0x81 и 0x01.

А должно быть наоборот, при нажатии первой клавиши должно выводиться 0x00, а при отпускании 0x80.
И еще, в "Гномах" номера клавиш прописаны в коде. Допустимы номера от $13 (до) до $1E (си). Те же ноты в других октавах игнорируются.

В примере указаны "чистые" данные, без инверсий. Вот так у меня формируется выходной код для портя ЯЗС:

ПОРТ_КЛАВИАТУРЫ = ~( НОМЕР_НОТЫ | 0x80 );  - нажатие клавиши
ПОРТ_КЛАВИАТУРЫ = ~( НОМЕР_НОТЫ & 0x7F ); - отпускание клавиши

И, кроме того, если бы данные выводились неправильно, как "Контрапункт" могла бы их корректно воспринимать?
Думаю, мне нужно ещё раз проверить работу "Гномов", самой правильной и самой совместимой версии, той, что точно работает со штатной клавиатурой. Если будет образ с такой версией, я смогу проверить ещё раз.

81

Re: Разбор архитектуры софта ЯЗС

AlexBel пишет:

В примере указаны "чистые" данные, без инверсий.

Так и я говорю про "чистые", которые уже процессор из порта ЯЗС читает. При нажатии первой клавиши из порта $C094 должен читаться $0, а при отпускании - $80.

AlexBel пишет:

И, кроме того, если бы данные выводились неправильно, как "Контрапункт" могла бы их корректно воспринимать?

Если просто бит нажатия инвертирован, то легко: нота будет рисоваться на стане не в момент нажатия, а в момент отпускания клавиши.

На самом деле, возможных причин две:
1) не те номера клавиш. "Гномы" считают, что "до" это клавиша с номером $13 и никак иначе.
2) в той версии, которая была раньше выложена, проверка клавиш выглядит так:

        LDA    DATA_C094    ; прочитали код клавиши
        BPL    CODE_3083
        JMP    CODE_306B

CODE_3083
        STY    DATA_3184
        STA    ZP_FF
        CMP    #$15        ; это "ре"?
        BNE    CODE_3098
        LDA    DATA_C094    ; да, читаем еще раз
        CMP    #$15        ; это точно "ре"?
        BNE    CODE_3098
        LDA    #$01
        JMP    CODE_30FB

CODE_3098
        CMP    #$17
        BNE    CODE_30A8
        LDA    DATA_C094
        CMP    #$17
        BNE    CODE_30A8

Непонятно зачем, но код клавиши читается второй раз и проверка делается второй раз.
То ли разработчики какую-то защиту от дребезга хотели сделать, то ли защиту от эмулятора :)

Я в описание клавиатуры вставлял текст, что код клавиши после выдачи сигнала !DREQ сохраняется еще примерно 120 мкс. Эмулятор клавиатуры так делает?

Потому что если он сразу после чтения данные сбрасывает, то второе чтение и проверка обломятся.

Кстати, из-за этого места в коде я никак не мог выбрать, какие версии NAZKL и SIMKL включить в окончательный образ. Версий этих программ две.

Во второй версии опрос клавиатуры выглядит нормально, без повторной проверки. НО! Там зато есть очень подозрительный обработчик прерывания.

Он делает какие странные действия. Если прерывание пришло от таймера, то переставляет его на следующее срабатывание через 8 секунд. Если было прерывание от клавиатуры, то читает ее порт, и если была отпущена клавиша, то инкрементит ячейку, которая нигде больше в коде не используется. Короче, выглядит как какие-то наброски, вообще не связанные с остальным кодом.
Хуже того, этот вектор IRQ дальше перезаписывает другой модуль (DISPL).

В первой версии текст этого обработчика сохранен (то есть, исходник у авторов обеих версий был), однако ссылок на него уже нет. При установке обработчика вектор IRQ ставится на одинокую команду RTI, а прерывания запрещаются. (Во второй версии прерывания не запрещены.)

Мне кажется, что первая версия - все таки более новая. Возможно, разработчики осознали, что обработчик прерываний не будет работать так, как они хотели, и запатчили его. Может быть, возникали какие-то сбои с клавиатурой и поэтому появилась вторая проверка. Как было на самом деле - теперь уже, наверно, не узнать.

Так что вот новая сборка, там обновлено описание и добавлена пропущенная картинка, кроме того, с него можно непосредственно грузиться. Но версии NAZKL и SIMKL оставлены те, что были, поскольку штатная клавиатура с ними нормально работает.

Post's attachments

Attachment icon GNOM7.zip 127.44 kb, 9 downloads since 2021-05-17 

82

Re: Разбор архитектуры софта ЯЗС

Вот, кстати, возможная причина добавления второй проверки кода клавиш.

У клавиатуры длина кабеля 1 м 40 см. Провода данных не экранированы и сами по себе легко могут собирать наводки.

Но, кроме этого, в ЯЗС чтение порта совмещено с посылкой сигнала !DREQ. Это приводит к тому, что спустя несколько сотен нс (не позже, чем 660 - задержка двух ЛН2 и ТМ2), то есть, близко к моменту защелкивания данных в процессоре, происходит сброс сигнала IRQ. Вполне может быть, что это генерирует наводку на линиях данных.

При повторном же чтении сигнал IRQ уже сброшен и дополнительных наводок не генерирует.

83

Re: Разбор архитектуры софта ЯЗС

Внёс коррективы в программу клавиатурного адаптера. Теперь клавиши работают правильно - и в "Контрапункте" и в "Гномах". "Гномов" использовал из сообщения 81. Большое спасибо avivanov76 за помощь!
Постараюсь в ближайшее время сделать видео с демонстрацией работы программы "Гномы" и клавиатурой.

84 Отредактировано AlexBel (11-07-2021 12:04)

Re: Разбор архитектуры софта ЯЗС

Маленькое видео с частичной демонстрацией работы программы "Семь гномов": https://disk.yandex.ru/d/IiZtLJLtT89j_Q
Поскольку экспромт - не мой конёк, получилось не очень :)

85

Re: Разбор архитектуры софта ЯЗС

Вопрос по программе MUSAGED. Когда я её запускаю (на Агат-9), она начинает грузиться, появляется "звёздочка", потом раздаётся звуковой сигнал и возврат в отладчик. В то же время, программа MIDIGED запускается и работает нормально. Если я правильно понимаю то, что писалось в этой теме, MUSAGED работает, значит, какие-то проблемы у меня. Возможно, версия неправильная. Дайте, пожалуйста, работоспособную версию MUSAGED, если таковая есть.

86

Re: Разбор архитектуры софта ЯЗС

AlexBel пишет:

Маленькое видео с частичной демонстрацией работы программы "Семь гномов": https://disk.yandex.ru/d/IiZtLJLtT89j_Q
Поскольку экспромт - не мой конёк, получилось не очень :)

Да нормально получилось, переживать не о чем. Можно было бы еще таблицу оценок показать и процесс нажимания клавиш, но это уже так, придирки.

AlexBel пишет:

Вопрос по программе MUSAGED. Когда я её запускаю (на Агат-9), она начинает грузиться, появляется "звёздочка", потом раздаётся звуковой сигнал и возврат в отладчик.

MUSAGED полностью рабочая. Звездочек она должна вывести три, по числу файлов. Видимо, какие-то файлы не грузятся или отсутствуют. Позже выложу образ.

87

Re: Разбор архитектуры софта ЯЗС

MUSAGED и MIDIGED в одном флаконе.

Post's attachments

Attachment icon MUSAGED.zip 102.96 kb, 4 downloads since 2021-07-11 

88

Re: Разбор архитектуры софта ЯЗС

Спасибо! MUSAGED работает, я, даже, ввёл с музыкальной клавиатуры небольшую мелодию и проиграл её. Жаль, что во время ввода ноты не воспроизводятся.
Позже сделаю видео с работой программ "7 гномов" и MUSAGED.