User Tag List

Страница 3 из 5 ПерваяПервая 12345 ПоследняяПоследняя
Показано с 21 по 30 из 45

Тема: Эмулятор Союз-Неон ПК-11/16 - NEONBTL

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Покопался в прошивке ПЛМ P10. Выяснилось, что к адресному пространству контроллера дисковода относятся регистры 0161070 и 0161072. А к адресному пространству контроллера жёсткого диска с 0161040 по 0161056 и 0161076. Сам счетчик буфера сбрасывается любой записью как в регистр 0161054 (HD.SDH), так и в регистр 0161076 (FD.CNT).

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

    nzeemin(15.01.2023)

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

  3. #2

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Буфер контроллеров FDD и HDD

    По анализу прошивки ПЛМ P10 предусмотрен режим работы буфера - запись или чтение. Соответственно перед работой с буфером его надо перевести в необходимый режим. Перевод в режим чтения осуществляется обращением (чтение или запись) к регистру HD.CSR 0161056, а в режим записи - обращением к регистру HD.SDH 0161054. Это также отражено в исходника ВПО в процессе P16HDC:
    ;----------------------------------------
    ; bdir = wr : rd/wr hdsdh ;
    ; bdir = rd : rd/wr hdcsr ;
    ;----------------------------------------
    В режим записи может его так же перевести контроллер HDD, но только в режим записи, т.к. в режим чтения буфер переводится при записи команды в регистр HD.CSR. Для всех других операций, как адресное чтение и запись буфера, а также для работы дисковода, его необходимо выставить. Для дисковода при чтении данных буфер должен быть в режиме записи, а для записи данных - в режиме чтения.
    Также в ПЛМ P10 предусмотрена защита от неправильного использования буфера во время адресного обмена через регистр HD.BUFF 0161040. Т.е. если буфер установили в режим чтения, то запись в него идти не будет и счетчик не будет переходить на следующий адрес. Так же, при установке буфера в режим записи, не будет идти чтение и счетчик не будет переходить на следующий адрес. Это такая защита при исполнении команды MOVB, у которой в цикле записи источника делается пустое чтение этого источника, а затем запись.
    Во время обмена с буфером контроллеров FDD и HDD такой полной защиты нет, т.е. операция чтения и записи в память не будет исполняться, но счетчик будет переходить на следующий адрес.

    Эти 2 пользователя(ей) поблагодарили Alex_K за это полезное сообщение:

    nzeemin(17.01.2023), Titus(17.01.2023)

  4. #3

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В дополнение по прошивке ПЛМ P10. Ранее я писал, что данная прошивка формирует сигналы для выбора контроллера дисковода /CS-FL (адреса 0161070-0161073) и контроллера жёсткого диска /CS-HD (адреса 0161040-0161057 и 0161076-0161077). Также в этой ПЛМ находится бит выбора режима буфера bdir /BUF_WR.

    Выбор контроллера дисковода, выбор осуществляется при проведении операций чтения или записи при условии, что оба контроллера не работают в режиме ПДП:
    /HD-BCS*/FL-DRQ*IOR*&O1610XX*A05*A04*A03*/A02
    /HD-BCS*/FL-DRQ*IOW*&O1610XX*A05*A04*A03*/A02

    Такой же выбор контроллера жёсткого диска:
    /HD-BCS*/FL-DRQ*IOR*&O1610XX*A05*/A04
    /HD-BCS*/FL-DRQ*IOW*&O1610XX*A05*/A04
    IOW*&O1610XX*A05*A04*A03*A02*A01
    Дополнительный регистр 0161076 выбирается только при записи в него, независимо от режима работы контроллеров.

    А вот и установка бита режима буфера:
    CS-HD*/A04*A03*A02*/A01
    BUF-WR*/A01
    BUF-WR*/A02
    BUF-WR*/A03
    BUF-WR*A04
    BUF-WR*/CS-HD
    HD-BCS*FL-WR
    Первое условие настроено на обращение к регистру 161054 и переводит буфер в режим записи. Следующие пять условий являются условиями удержания сигнала, что-то типа триггера. Но все эти условия перестают выполняться при обращении к регистру 0161056 и буфер переводится в режим чтения. Последнее условие служит для перевода в режим записи буфера самим контроллером жёсткого диска. Это необходимо, т.к. команда в контроллер HDD записывается в регистр 0161056, переводя одновременно буфер в режим чтения, так что далее сам контроллер переводит его в режим записи при необходимости.

    Эта ПЛМ также формирует ответ для контроллера FDD в ответ на запрос обмена ПДП, сигнал /FL-DACK:
    FL-DRQ
    FL-DACK*HDBUFCS
    Сигнал также удерживается, если активен выбор буфера.

    А вот и интересный сигнал выбора буфера /HDBUFCS. Сигнал выбора режима чтения/записи буфера /BUF-WR подаётся постоянно, поэтому сама операция работы с буфером делается сигналом /HDBUFCS, который подключен к выводу /CS статического ОЗУ. Также после выдачи этого сигнала осуществляется переход к следующему адресу в счётчике:

    /HD-BCS*/FL-DRQ*IOW*BUF_WR*CS_HD*A05*/A04*/A03*/A02*/A01
    /HD-BCS*/FL-DRQ*IOR*/BUF_WR*CS_HD*A05*/A04*/A03*/A02*/A01
    HD-BCS*FL-RD
    HD-BCS*FL-WR
    FL-DRQ*FL-DACK
    Первые два условия отвечают за адресный обмен с буфером и содержат защиту от его неправильного использования. Видно, что условия выполняются, если осуществляется запись и буфер в режиме записи, а также если осуществляется чтение и буфер в режиме чтения. Если условия не будут выполняться, то буфер не будет выбран, соответственно не осуществится операция чтения/записи и не будет осуществлён переход на следующий адрес.
    Третье и четвертое условие выполняются при обмене контроллера HDD с буфером, а пятое - при обмене контроллера FDD. Здесь нет ограничений от неправильного использования. При работе контроллера HDD такого быть не может, т.к. он сам переключает буфер в необходимый режим. А вот при работе контроллера FDD такое возможно, если перед операцией режим буфера был неправильно выставлен. В любом случае переход на следующий адрес всегда будет выполняться, но при записи в буфер в режиме чтения ничего записываться не будет, будет оставаться старое значение, а при чтении с буфера в режиме записи будет читаться всякая ерунда и эта же ерунда записываться в буфер.

    Здесь также осуществляется выработка сигналов чтения и записи регистров контроллеров /FL-RD и /FL-WR.
    Сигнал /FL-RD:
    /HD-BCS
    /FL-DRQ*IOR*&O1610XX*A05*/A04
    /FL-DRQ*IOR*&O1610XX*A05*A04*A03*/A02
    FL-DRQ*FL-DACK*HDBUFCS*BUF-WR
    Сигнал /FL-WR:
    /HD-BCS
    /FL-DRQ*IOW*&O1610XX*A05*/A04
    /FL-DRQ*IOW*&O1610XX*A05*A04*A03*/A02
    FL-DRQ*FL-DACK*HDBUFCS*/BUF-WR
    Видно, что сигналы формируются не только для адресного обмена, но и при работе контроллера FDD в режиме ПДП.

    Ну и последний сигнал очистки счетчика CL-CNT. Он используется не только для очистки счётчика буфера, но и в качестве условия для записи в регистры 0161054 и 0161076, т.к. в этих регистрах содержатся биты во внешней логике:
    /A04*A01
    /A02*/A04
    /A03*/A04
    /IOW
    /CS-HD
    Условий много, но они должны все не выполнится, т.к. выход у ПЛМ инверсный, а сигнал нужен прямой. Поэтому по этим условиям выбирают все регистры, кроме 0161054 и 0161076. По остальным регистрам хоть одно условие будет истинным и сигнал очистки не выработается. А при выборе регистров 0161054 и 0161076 все условия будут ложными и выработается сигнал очистки.
    Последний раз редактировалось Alex_K; 17.01.2023 в 20:47.

    Эти 3 пользователя(ей) поблагодарили Alex_K за это полезное сообщение:

    nzeemin(18.01.2023), Titus(17.01.2023), xolod(18.01.2023)

  5. #4

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Про ПЛМ P11. Данная ПЛМ содержит в себе биты 0 (HN0), 1 (HN1), 4 (RUN) регистра HD.SDH(0161054), бит 8 счётчика буфера(HDBUFA08) и биты 4 (FD-RESET), 1 (HDBUFA10), 0 (HDBUFA09) регистра FD.CNT(0161076). В регистре 0161076 биты 0 и 1 являются не только выбором части буфера, но и 9-м и 10-м разрядами счётчика буфера. В самой ПЛМ четыре логических вывода, в которых логические произведения складываются по ИЛИ-НЕ, а также четыре регистровых вывода, на выходе которых стоит по D-триггеру, информация в котором защелкивается по переднему фронту на входе CLK, в триггере затем используется инверсный выход. На логических выводах находятся сигналы HN1, HN0, RUN и CLK-P11. Вывод CLK-P11 используется для формирования переднего фронта, который подаётся на вход CLK. Выводы FD-RESET, HDBUFA08, HDBUFA09 и HDBUFA10 являются регистровыми, актуальная информация на них появляется после защелкивания по переднему фронту на входе CLK.

    Пока рассмотрим логические выводы HN0, HN1 и RUN.

    Вывод RUN:
    DB4*CL-CNT*/A01
    RUN*DB4
    RUN*A01
    RUN*/CL-CNT
    Первое условие обеспечивает выбор бита 4 регистра 0161054. Сигнал CL-CNT является не только сигналом сброса счётчика буфера, но и условием записи в регистры 0161054 и 0161076. Различаются эти регистры в по адресной линии A01, если ноль, то это 0161054, если единица - 0161076. В данном случае формируется условие, равное записываемому биту 4 в регистр 0161054. Остальные три условия являются условиями удержания, реализуя функции триггера. Так как выход инверсный, то на выводе появляется инвертированное значение записанного бита. Оно подаётся на входы запуска мотора интерфейсов дисковода и жёсткого диска MFM. Т.к. шина дисковода и диска MFM также инверсная, то запись единицы обеспечивает запуск мотора, запись нуля - остановка мотора.

    Вывод HN1:
    DB1*CL-CNT*/A01
    HN1*DB1
    HN1*A01
    HN1*/CL-CNT
    Всё точно так же, как и битом 4 (RUN), но только бит 1 регистра 0161054. Этот вывод подаётся на вход HN1 интерфейса жёсткого диска, обеспечивает бит 1 выбора головки, а также на вход 2 интерфейса дисковода, обеспечивает выбор плотности, при операции с диском двойной плотности DD устанавливается в один.

    Вывод HN0:
    DB0*CL-CNT*/A01
    HN0*DB0
    HN0*A01
    HN0*/CL-CNT
    Всё точно так же, как и битом 4 (RUN), но только бит 0 регистра 0161054. Этот вывод подаётся на вход HN0 интерфейса жёсткого диска, обеспечивает бит 0 выбора головки, а также на вход 32 интерфейса дисковода, обеспечивает выбор стороны.

    Потом будут описаны другие выводы, которые обеспечивают формирование сигнала CLK и работу трёх старших бит счётчика.

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

    Далее по работу ПЛМ P11.
    Для запоминания информации на регистровых выводах необходимо формирование переднего фронта сигнала CLK. Этот сигнал формируется на выводе CLK-P11, который соединён с выводом CLK самой ПЛМ. По схеме там ещё стоит конденсатор C16 на 330 пФ, служащий для формирования длительности импульса. У формирователя импульса и счётчика два режима работы - обычный и под управлением контроллера жёсткого диска. Обычный режим работы это адресный обмен с буфером и обмен с буфером контроллера дисковода.

    Здесь необходимо рассмотреть два вывода сразу - P11-CLK и HDBUFA08, т.к. они взаимосвязаны в работе.
    Вывод формирования импульса CLK-P11:
    HDBUFA07
    /HDBUFA08*HD-BDRQ*P11-CLK
    HDBUFA08*HD-BDRQ

    Вывод восьмого бита счётчика буфера HDBUFA08:
    /HD-BDRQ*HDBUFA08
    CL-CNT

    Рассмотрим работу в обычном режиме. В данном случае сигнал HD-BDRQ имеет низкий уровень, а значит два последних условия при формировании P11-CLK не будут выполняться. В первом условии сигнала HDBUFA08 подаётся инвертированное значение /HD-BDRQ, поэтому оно всё время будет в единичном состоянии. Так как в данном случае на формирование сигнала P11-CLK влияет только вход HDBUFA07, то при очистке счётчика, если он был в единичном состоянии, то он переходит в нулевое. Также он переходит в нулевое состояние во время счёта, что является одновременно сигналом переноса в старшие разряды. Так как выход у ПЛМ инверсный, то на выходе будет изменение с нулевого на единичное состояние и сформируется передний фронт. Но при ситуации, когда HDBUFA07 был в нулевом состоянии, то формирование фронта при очистке происходить не будет. Но в данном случае разработчики между сигналами очистки буфера CL-CNT и выводом HDBUFA07 со счётчика поставили конденсатор C15 на 75 пФ. Во время очистки счётчика CL-CNT принимает высокий уровень и выводе HDBUFA07 возникает импульс, этакий аналоговый одновибратор. Длительности этого импульса должно хватить на формирование переднего фронта на выходе P11-CLK. Таким образом передний фронт будет сформирован либо во время очистки, либо во время счёта при переходе из единичного состояния в нулевое.
    Во время обычного режима работы по сигналу CLK меняется состояние вывода HDBUFA08. Сигнал /HD-BDRQ в единичном состоянии, а вывод у ПЛМ инверсный, поэтому HDBUFA08 будет переключаться на противоположное значение. Т.к. импульс происходит при переносе из HDBUFA07, то просто меняется состояние HDBUFA08 на противоположное. Но импульс CLK может возникать и во время очистки счётчика, поэтому вторым условием стоит состояние сигнала CL-CNT, во время очистки он в единичном состоянии, поэтому на выводе HDBUFA08 возникает нулевое состояние, разряд очистился.

    Более сложная работа происходит при управлении с контроллера жёсткого диска. Там при операциях записи перед каждым сектором и при форматировании перед запросом буфера выдаётся сигнал HD-BDRQ, этот же сигнал выдаётся после чтения одного сектора. Почему то разработчики решили переключать страницы адреса буфера (биты 9 и 10) только по этому сигналу, наверное от того, что контроллер после операции с каждым сектором требует подтверждения. Остальные биты с 0 по 8 считаются как обычно, т.к. сигнал HD-BDRQ отсутствует. Но бит 8 HDBUFA08 всё равно принудительно дёргается при смене страницы. При выдаче HD-BDRQ контроллер ждёт ответного сигнала на вход BRDY, но в Союз-НЕОН эти выводы соединены. Таким образом выдаётся HD-BDRQ, он поступает на вход BRDY, контроллер в ответ снимает HD-BDRQ и операция продолжается далее, возникает импульс.
    При подаче HD-BDRQ вывод счётчика HDBUFA07 обязательно должен быть очищен, иначе ничего не произойдёт. Состояние вывода HDBUFA08 роли не играет, но рассмотрим ситуацию, когда оно нулевое, что и должно быть.
    Диаграмма работы:
    Код:
    HDBUFA07 _________________________
                       _______
    HDBUFA08 _________/       \_______
                _________
    HD-BDRQ  __/         \____________
             ____    __      _________
    P11-CLK      \__/  \____/
    При подаче сигнала HD-BDRQ выполняется условие /HDBUFA08*HD-BDRQ*P11-CLK и на выводе P11-CLK появляется низкий уровень. Инвертированное значение P11-CLK с учётом задержек снова поступает на вход и условие /HDBUFA08*HD-BDRQ*P11-CLK уже выполняться не будет и на выходе P11-CLK снова появляется высокий уровень и формируется передний фронт на входе CLK. По этому фронту отрабатывает правило /HD-BDRQ*HDBUFA08 для вывода HDBUFA08. Но т.к. /HD-BDRQ у нас в нуле, то на выходе HDBUFA08 защелкивается единица, т.к. используется инверсный выход триггера. После появления единичного сигнала HDBUFA08 для формирования P11-CLK срабатывает правило HDBUFA08*HD-BDRQ, на выходе появляется низкий уровень и ситуация стабилизируется. После исчезновения HD-BDRQ все условия для формирования P11-CLK становятся ложными и вывод переводится в единичное состояние с выдачей переднего фронта. По этому переднему фронту меняется состояние HDBUFA08 с единичного на нулевое, что также приводит к изменению разрядов HDBUFA09 и HDBUFA10 и переключению на следующую страницу. В данном режиме работы длительность импульса HD-BDRQ должна быть больше, чем длительность импульса P11-CLK, иначе будет только один фронт, HDBUFA08 переведется в единичное состояние и переключения страниц не произойдёт.

    Осталась третья часть про старшие разряды счётчика HDBUFA09 и HDBUFA10.
    Последний раз редактировалось Alex_K; 19.01.2023 в 23:58.

    Эти 2 пользователя(ей) поблагодарили Alex_K за это полезное сообщение:

    nzeemin(20.01.2023), Titus(19.01.2023)

  6. #5

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Про старшие разряды счётчика HDBUFA09 и HDBUFA10 в ПЛМ P11.
    Разряды имеют регистровый выход и информация на них защёлкивается по переднему фронту на входе CLK. Передний фронт возникает во время счёта при переносе из 7-ого разряда или во время очистки счётчика. Очистка счётчика возможна при записи в регистры 0161054 и 0161076. При записи в регистр 0161076 должны записаться новые значения 9-го и 10-го разрядов счётчика, которые выступают в качестве выбора банка в СОЗУ. Также передний фронт формируется два раза при выдаче сигнала HD-BDRQ с контроллера жёсткого диска, эти правила срабатывают для обычного счёта.
    Правила формирования новых значений разрядов
    HDBUFA09 и HDBUFA10.

    Разряд
    HDBUFA09:
    /HD-BCS*HDBUFA08*HDBUFA09
    /HDBUFA08*/HDBUFA09*/CL-CNT
    /HDBUFA08*/HDBUFA09*/A01
    CL-CNT*/DB0*A01
    HD-BCS*/HDBUFA09

    Разряд HDBUFA10:
    /HD-BCS*HDBUFA08*HDBUFA09*HDBUFA10
    /HDBUFA09*/CL-CNT*/HDBUFA10
    /HDBUFA08*/CL-CNT*/HDBUFA10
    /HDBUFA09*/HDBUFA10*/A01
    /HDBUFA08*/HDBUFA10*/A01
    DB1*CL-CNT*A01
    HD-BCS*/HDBUFA10



    Рассмотрим вариант обычного счёта при работе с регистром 0161040 и при работе контроллера FDD в режиме ПДП, а также при подаче сигнала HD-BRRQ с контроллера жёсткого диска (два фронта CLK). В данном варианте активны следующие сигналы /HD-BCS, /CL-CNT. Значение сигнала /A01 не имеет значение, т.к. правила с ним повторяют правила с /CL-CNT. Сигналы CL-CNT и HD-BCS неактивны. Итого у нас получаются для исполнения следующие правила.
    Разряд HDBUFA09:
    /HD-BCS*HDBUFA08*HDBUFA09
    /HDBUFA08*/HDBUFA09*/CL-CNT
    Первое правило исполняется при равенстве единице разрядов HDBUFA08 и HDBUFA09. Второе правило при равенстве нулю разрядов HDBUFA08 и HDBUFA09. Если эти разряды имеют разные значения, то ни одно правило не исполняется. Не забываем про инверсный выход с триггера. Итого получается 00>0, 01>1, 10>1, 11>0. Получается, что если 8-й разряд был равен нулю, то 9-й разряд сохраняет своё старое значение, а при равенстве 8-го разряда единице происходит перенос и 9-й разряд меняет своё значение на противоположное.
    Разряд HDBUFA10:
    /HD-BCS*HDBUFA08*HDBUFA09*HDBUFA10
    /HDBUFA09*/CL-CNT*/HDBUFA10
    /HDBUFA08*/CL-CNT*/HDBUFA10
    В случае с 10-м разрядом правила такие же, только участвуют уже три разряда. Изменяться 10-й разряд будет уже только при равенстве единице 8-го и 9-го разрядов из-за переноса. В остальных случаях он сохраняет своё значение. Итог: 000>0, 001>0, 010>0, 011>1, 100>1, 101>1, 110>1, 111>0.

    Следующий случай - это очистка счётчика через запись в регистр 0161054. В данном случае активны сигналы /HD-BCS, CL-CNT, /A01. Неактивны /CL-CNT, A01 и HD-BCS.
    Разряд HDBUFA09:
    /HD-BCS*HDBUFA08*HDBUFA09
    /HDBUFA08*/HDBUFA09*/A01
    Первое правило исполняется при равенстве единице разрядов HDBUFA08 и HDBUFA09. Второе правило при равенстве нулю разрядов HDBUFA08 и HDBUFA09. Если эти разряды имеют разные значения, то ни одно правило не исполняется. Не забываем про инверсный выход с триггера. Итого получается 00>0, 01>1, 10>1, 11>0. В данном варианте 9-й разряд не должен трогаться, но он изменяется, если перед этим был установлен 8-й разряд. Такого по идее не должно быть, т.к. после каждого счёта разряды с нулевого по восьмой должны быть сброшены.
    Разряд HDBUFA10:
    /HD-BCS*HDBUFA08*HDBUFA09*HDBUFA10
    /HDBUFA09*/HDBUFA10*/A01
    /HDBUFA08*/HDBUFA10*/A01
    Всё точно так же, как и в предыдущем счучае, но здесь в сравнении уже участвуют три разряда. Итог: 000>0, 001>0, 010>0, 011>1, 100>1, 101>1, 110>1, 111>0. Так же видим, что мешает 8-й разряд.

    Далее установка этих разрядов через запись в регистр 0161076. В данном случае активны сигналы /HD-BCS, CL-CNT, A01. Неактивны /CL-CNT, /A01 и HD-BCS.
    Разряд HDBUFA09:
    /HD-BCS*HDBUFA08*HDBUFA09
    CL-CNT*/DB0*A01
    В случае равенства единице 8-го и 9-го разрядов срабатывает верхнее правило и записывается ноль, что есть неправильно. Если же 8-й разряд равен нулю, как и должно быть, то срабатывает нижнее правило и осуществляет запись нового значения разряда из нулевого бита. Т.к. выход триггера инверсный, то для получения прямого значения записывается инвертированный бит.
    Разряд HDBUFA10:
    /HD-BCS*HDBUFA08*HDBUFA09*HDBUFA10
    DB1*CL-CNT*A01
    Здесь почти всё точно так же, портят картину три одновременно установленных разряда с 8-го по 10-й, запишется ноль. А вот если какой-то из тех разрядов был равен нулю, то срабатывает нижнее правило и записывает первый бит. Но здесь в правиле он прямой, а на выходе появляется инверсный, наоборот. Для чего это делается, будет объяснено ниже.

    Ну и наконец счёт в режиме обмена с буфером контроллера жёсткого диска. Здесь активны сигналы HD-BCS, /CL-CNT. Неактивны соответственно /HD-BCS, CL-CNT. Значение A01 и /A01 не играет роли.
    Разряд HDBUFA09:
    /HDBUFA08*/HDBUFA09*/CL-CNT
    HD-BCS*/HDBUFA09
    Верхнее правило работает при равенстве разрядов 8 и 9 нулю, в результате получается ноль. В других случаях выполняется нижнее правило. Текущее значение инвертируется и опять же в инверсном виде поступает на выход, т.е. в итоге не меняет значения. При работе верхнего правила значение также не будет изменено.
    Разряд HDBUFA10:
    /HDBUFA09*/CL-CNT*/HDBUFA10
    /HDBUFA08*/CL-CNT*/HDBUFA10
    HD-BCS*/HDBUFA10
    Из-за трёх разрядов ситуация более сложная, но в итоге 10-й разряд не меняется.

    Из-за того, что 9-й и 10-й разряды не меняются во время обмена с буфером контроллера HDD (сигнал HD-BCS), переключение на следующий банк осуществляется обработкой сигнала HD-BDRQ от контроллера жесткого диска. При записи сектора или форматировании сначала подаётся сигнал HD-BDRQ, а уже потом во время операции используется буфер. В случае с чтением сначала заполняется буфер, а уже потом подаётся HD-BDRQ. Из-за этого при записи возникает небольшая коллизия, из-за того что сначала делается переход на следующий банк. Поэтому при операциях записи и форматирования необходимо после заполнения буфера выставить номер предыдущего банка. Это дело учтено в ВПО в процессе P16HDC:
    bitb #10, h.err+1 ; Это дисковод?
    bne F.RW ; На работу с дисководом
    bitb #20, (r2) ; Запись?
    beq 20$ ; Нет
    decb bcnt ; На предыдущий банк
    bicb #^C3, bcnt ;
    20$:
    Это надо учесть при эмуляции контроллера жёсткого диска. При работе с жёстким диском начальный адрес банка не имеет значения.

    В случае работы с контроллером дисковода необходимо после чтения или записи заданного количества секторов подавать сигнал TC на контроллер дисковода. Для этой цели и записывают инверсное значение бита 1. Также для дисковода имеет значение номер устанавливаемого банка, в зависимости от количества секторов: 11 - один сектор, 10 - два сектора, 01 - три сектора, 00 - четыре сектора. Т.к. бит 1 у нас записывается в инверсном значении, то получается следующая картина. Первая колонка - записываемые значения, вторая колонка - они же с инверсией первого бита, далее изменение при счёте:
    11 01 -> 10
    10 00 -> 01 10
    01 11 -> 00 01 10
    00 10 -> 11 00 01 10
    Во всех случаях видим, что после чтения последнего сектора 10-й разряд переходит из нуля в единицу. Для этого к выводу HDBUFA10 подсоединён конденсатор C17 (330 пФ) и резистор R41 (56 кОм). Это аналоговый одновибратор, подающий импульс на вход контроллера TC для прекращения считывания или записи.

    Остался один сигнал HD-RESET. Логического выхода для него не нашлось, поэтому сделали на регистровом:
    Сигнал FD-RESET:
    /DB4*CL-CNT*A01
    /FD-RESET*/DB4
    /FD-RESET*/A01
    /FD-RESET*/CL-CNT
    Если при записи в регистр 0161076 установлен бит 4, то на контроллера FDD подаётся сигнал сброса. После сброса необходимо записать в этот бит нулевое значение.

  7. #6

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,047
    Спасибо Благодарностей отдано 
    1,140
    Спасибо Благодарностей получено 
    1,458
    Поблагодарили
    520 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Preview 109

    https://github.com/nzeemin/neonbtl/r...review-109.zip

    Убран хак в процессоре на команде MOVB.
    Введён флаг HDbuffdir и его переключение по обращению к регистрам.
    Максимальное количество дорожек увеличено до 83.
    dir/bad/fil теперь отрабатывает без ошибок

    Эти 6 пользователя(ей) поблагодарили nzeemin за это полезное сообщение:

    Aleks1985(21.01.2023), Alex_K(21.01.2023), Oleg N. Cher(22.01.2023), Radon17(22.01.2023), Ynicky(22.01.2023), ZEman(21.01.2023)

  8. #7

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,047
    Спасибо Благодарностей отдано 
    1,140
    Спасибо Благодарностей получено 
    1,458
    Поблагодарили
    520 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Preview 111

    https://github.com/nzeemin/neonbtl/r...review-111.zip

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

    UPDATE: Есть бага, перепутано состояние битов для кнопок, и ещё надо убрать контекстное меню - поправлю.
    Последний раз редактировалось nzeemin; 26.01.2023 в 11:23.

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

    Alex_K(26.01.2023)

  9. #8

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Принципиально не хочу делать захват мыши эмулятором.
    Это почему это? )

  10. #9

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,047
    Спасибо Благодарностей отдано 
    1,140
    Спасибо Благодарностей получено 
    1,458
    Поблагодарили
    520 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Это почему это? )
    Потому что с захватом мыши неудобно. Это вводит отдельный режим, в него надо входить, из него надо выходить.
    Хочу сделать без отдельного режима - что-то вроде "когда водим мышь над эмулятором, тогда она бегает в эмулируемой машинке".

  11. #10

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,373
    Спасибо Благодарностей отдано 
    1,695
    Спасибо Благодарностей получено 
    2,214
    Поблагодарили
    868 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

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

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

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

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

Похожие темы

  1. Программирование для ПК 11/16 «Союз-Неон»
    от MacBuster в разделе ДВК, УКНЦ
    Ответов: 152
    Последнее: 01.11.2025, 19:36
  2. Союз-Неон ПК-11/16 описания и доработки
    от pilgrim в разделе ДВК, УКНЦ
    Ответов: 107
    Последнее: 30.10.2025, 00:00
  3. Эмулятор Союз-Неон ПК-11/16 - EmuStudio
    от Titus в разделе Эмуляторы отечественных компьютеров
    Ответов: 335
    Последнее: 01.04.2024, 11:33
  4. Проект рабочей реплики Союз-Неон ПК-11/16
    от dk_spb в разделе ДВК, УКНЦ
    Ответов: 4
    Последнее: 10.08.2018, 12:31
  5. ПК-11 'Союз-Неон'
    от Keeper в разделе ДВК, УКНЦ
    Ответов: 12
    Последнее: 16.10.2013, 05:07

Ваши права

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