Error404 wrote:Функционал по Paste я планировал реализовать, но не взлетело, ибо в сугубо аппаратной модели с клавиатурой на ВВ55 не получается вогнать в ПК текст имитируя замыкание кнопок матрицы клавиатуры (мои нажатия не проходят через п.п. отсечки дребезга контактов Мониторов, а наворачивать их многократные повторения которые еще неизвестно как заработают (не будет ли ОРИОН вводиться как ОООРРРИИИОООННН) - ну его нафиг).
Сама идея пастирования через имитацию сигналов на входе ППА клавиатуры порочна и не позволит получить нужную скорость ввода символов.
Борьба с дребезгом не повредит, т.к, во первых, она будет работать только если идут подряд два одинаковых символа, а во вторых, столь быстрый темп ввода эмуляцией ППА не получить.
Потому что есть минимальная длительность фиксации нажатия (~0.1 секунды, это время сканирования матрицы и эхо-печати), но с учетом длительности ролика, Paste с эхо печатью даже в монохроме не сможет иметь темп ниже 0.25 секунды (время ролика). Таким образом при Paste со входов ППА клавиатуры вставка 100 символов займёт не менее 25 секунд, а 1 кб будет пастироваться 4 минуты.
Но зачем имитировать сигналы на входе ППА клавиатуры. Проще ввести точку перехвата и выдавать Paste-коды с неё. Все драйверы с автоповтором используют подпрограмму F81B (и никогда не F803). Причём внешние драйверы клавиатуры используют стандартный вход F81B, а п/п-мма F803 внутри ПЗУ М3 с векторизацией входа F81B вызывает саму F81B, а вот М3 без векторизации вызывает внутренний вход в опрос клавиатуры, но не проблема изменить ПЗУ так, чтобы вызывался стандартный вход F81B. Таким образом все опросы клавиатуры проходят только через одну точку F81B. Потому для Paste достаточно перехватывать и имитировать нажатия длительностью 0.2 секунды только для единственной подпрограммы F81B, что не проблема сделать в эмуляторе. Это сработает, в том числе и для ORDOS, хотя будет очень медленно.
Но если интересует Paste только в CP/M, то всё проще, лучше и намного быстрее. Т.к CP/M вводит только через CONIN CP/M BIOS-а. Достаточно на время Paste выдавать всегда готовность по BIOS функции STATUS и выдавать очередной пастируемый символ по каждому CALL CONIN. Это лучше потому, что тогда не важна скорость ролика и темп ввода получится максимально быстрый. И это не будет решение только для CP/M с одним конкретным уровнем TPA, если ввести автонастройку на адрес BIOS по адресу JMP-а в ячейке 0.
А Copy маркированного текста
ИЗ эмулятора можно сделать если иметь специально написанный текстов редактор 8-ми разрядки и если эмулятор имеет функцию приёма в Paste-буфер Windows, т.е в эмуляторе нужны функции доступные для программ 8-ми разрядки.
В моём эмуляторе ОРИОНА есть функции эмулятора, которые вызываются командой INIR, в регистре A номер функции, в других регистрах Z80 параметры. Так программа КР580 может узнать текущее время, получить каталог винчестера (каталога FILES.CPM), считать/записать файл. Потому возможен нортон в котором в одной панели каталог виртуального CP/M-диска, а в другом каталог винчестера. Потому Copy/Paste мне был не нужен, если надо сделать вставку, достаточно поместить файл в каталог FILES.CP/M. Имея функции эмулятора, встроить Paste для использования в текстовом редакторе это работа на 30 минут.
А вообще обмен между эмулятором и средой IBM PC имеет смысл только для эмуляторов в которых встроенная DOS работает только с образами дисков, отчего набор файлов доступных в эмуляторе надо специально компоновать отдельной программой, что неудобно для реальной работы. А грамотные эмуляторы в этом не нуждаются т.к вообще не используют образы, ни квазидисков, ни дискет.