А почему не используешь команды ВВ55, чтобы рулить отдельными битами порта С?
- - - Добавлено - - -
ORI 6 / XRI 6 === ANI 0F9h
- - - Добавлено - - -
XRI 06H; != XRI 04h & ORI 02h
А почему не используешь команды ВВ55, чтобы рулить отдельными битами порта С?
- - - Добавлено - - -
ORI 6 / XRI 6 === ANI 0F9h
- - - Добавлено - - -
XRI 06H; != XRI 04h & ORI 02h
У нас данность: линия А порта ВВ55 используется для передачи данных. Так придумали авторы Ориона при организации ROM-диска. У меня задача по этой "ША" гонять данные в двух направлениях: при чтении ROM/RAM в одну сторону, а при записи RAM - в другую.
Менять назначение линий порта диска означает переписывание всего ранее созданного ПО, в т.ч. ОС и ПЗУ "Монитора" - эта затея совершенно бесперспективная, имхо.
Смысл в следующем: нужно бит D2 сбросить, а бит D1 установить. Для этого нужно выполнить:
Вместо этого я одной командой убиваю двух зайцев:Код:XRI 04h ORI 02h
Типа экономия двух байтКод:XRI 06H
- - - Добавлено - - -
Про "ANI 0F9h" не понял... В данном месте была задача сбрость биты D2 и D1 в ноль, не меняя значения остальных битов порта!
Добавил: а, теперь въехал! Спасибо за хинт
Последний раз редактировалось Denn; 05.08.2016 в 14:24.
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
При чём тут порт А. Я имею ввиду, чтобы изменить бит порта С (например, чтобы выдать тактовый сигнал через порт клавиатуры), не нужно его читать. Можно просто дать команду ВВ55 для изменения бита порта С.
Если бит D1 был установлен, то ты его этой командой только сбросишь.
А по поводу зайцев - обрати внимание на ORI 6 / XRI 6 === ANI 0F9h
А ANI 0F9h тогда что делает?
Есть команда ВВ55 (которую нужно выдавать в порт управления): 0000NNNV, где NNN - номер бита, а V - новое значение
можно сократить доКод:LDA PT_KBD ORI 04H STA PT_KBD XRI 04H STA PT_KBD
- - - Добавлено - - -Код:MVI A,5 STA PT_KBD+1 DCR A STA PT_KBD+1
Остальные биты при этом не изменятся.
Прикольно! Не знал. Надо будет попробовать. А она в любом режиме ВВ55 работает?
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Только когда порт С (или его половина) на вывод. Порты А и В так менять нельзя.
Есть ещё стробируемый ввод/вывод. При этом часть порта С (или полностью) используется для сигналов управления. Тут лучше даташит или книжку какую почитать.
Используется для вывода на принтер (можно даже в фоне по прерыванию), например. Но тут нужно, чтобы порт С был правильно соединен с сигналами управления принтера.
- - - Добавлено - - -
Ещё по поводу оптимизации:
не использует регистр A и работает быстрее, чемКод:DCR C JNZ LLL DCR B JNZ LLL
Но там есть подводные камни - нужно перед циклом увеличить на 1 регистр B, если он был равен нулю или регистр С был не равен нулю.Код:DCX B MOV A,C ORA B JNZ LLL
В практическом коде у меня сделано много оптимизаций по скорости. Вместо dcx-mov-ora просто INR L, вместо LDA/STA - LDAX/STAX, операции со стеком. Здесь просто пример кода, самый простой и прозрачный вариант для понимания принципов работы с ЭД.
Последний раз редактировалось Denn; 05.08.2016 в 15:39.
Критиковать - значит объяснять автору, что он делает не так, как делал бы я, если бы умел
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)