PPC, спасибо. Нагуглил упомянутый pdf-ник.
Что-то там была ещё какая-то заморочка, что какие-то ДОС-овские программы сами этим пользовались...
PPC, спасибо. Нагуглил упомянутый pdf-ник.
Что-то там была ещё какая-то заморочка, что какие-то ДОС-овские программы сами этим пользовались...
Ну, вообще, если совсем по-чесноку, то любая прога, которая хочет работать с памятью и претендует называться CP/M-совместимой, обязана начинать своё исполнение с выяснения, сколько этой памяти есть в наличии. Вот, скажем, релокируемый отладчик SID (или DDT) перед тем, как переместиться в старшие адреса, где он работает, читает значение слова по адресу 6 чтобы выяснить, куда перемещаться.
А вот 99% "нативных" Векторовских програм игнорируют среду исполнения и прибивают при запуске BIOS, будучи запущены из МикроДОС. А ведь могли бы определять, что запущены из операционной системы и сохранять его для того, чтобы назад вернуться по окончании программы. Я всегда стараюсь по возможности такой код в прогу вставить.
Кстати, отвечая на ваш вопрос, про relocation table чуть выше в этой ветке: да, все примерно так и делают: либо - битовая таблица, где каждый корректируемый адрес представлен одним, скажем, единичным битом, а остальные адреса - нулевыми, либо - заголовок со словами смещениями в тело программы, где надо править. Первый подход, использует SID, L80 при линковки REL файлов. Второй подход - линкер пакета BDS C (ясно, что линковка это не исполнение программы, но разница в общем невеликая: до динамического редактирования связей - один шаг всего).
Кстати, у меня где-то есть забавный документ, объясняющий как с помощью пальца и палки автоматизировать создание таблиц релокации (там вроде речь про M80/L80, но подойдёт любой ассемблер с макросами и модульной линковкой).
Вот до битовой таблицы я не додумался, когда в 90-ых драйвер мыши писал...
Но там настройщик, загрузчик и сам драйвер занимают чуть больше 1КБ, а сам драйвер от 130 до 160 Байт. Можно было не экономить...
Нашел у себя в архиве исходник одной из версий настройщика/загрузчика драйвера мыши, и пару вариантов готового (собранного) драйвера. Но это тестовые варианты, т.к. настроены на "ПУ", а родная мышь была на адресах D5h и D6h, тоже тестовый (работающий с адреса 100) исходник есть.
Вот и пытаюсь в них разобраться, т.к. комментариев в коде практически не делал А умные люди говорили: не ленись, делай комменты...
KTSerg, а поделитесь исходником?
В принципе не жалко. Было бы чем делиться. Рабочая дискета с последними рабочими версиями драйвера утеряна. Остались только не понятные, пробные, разрозненные исходники, которые даже друг к другу не подходят.
Да и Мышь у меня специфическая, с контроллером внутри. Её фото и название я на этом форуме кидал в другой ветке.
Драйвер мыши не работал (в привычном понимании) в чистом ДикроДосе,т.к. в командной строке сильно не поелозишь. Мышка работала в текстовых редакторах работающих под МикроДосом.
При запуске установщика драйвера, запрашивалось коды нажатия каких клавиш генерировать при нажатии кнопок мыши и перемещениях. Введённые коды сохранялись в драйвер и он устанавливался в верхушку свободной памяти. При перемещениях мыши, драйвер подкидывал прямо в буфер МикроДоса коды, как будто были нажаты соответствующие клавиши. По этой причине драйвер работал ещё и с определёнными версиями МикроДоса.
Вот кусок кода установщика драйвера:
А вот такой текст есть в собранном в один файл установщике драйвера.DB ' APRaprапрАПР"Мышь"',0DH,0AH,0AH
DB ' Программирование:',0DH,0AH,0AH
DB ' "Мышь" "Клавиатура"',0DH,0AH,0AH,00H
INF: DB ' Вверх ',00H
DB 0DH,0AH,' Вправо ',00H
DB 0DH,0AH,' Вниз ',00H
DB 0DH,0AH,' Влево ',00H
DB 0DH,0AH,' Левая кн. ',00H
DB 0DH,0AH,' Правая кн. ',00H
INF2: DB 0AH,0AH,' Вы согасны? (Д/Н) ',00H
INF3: DB 0AH,0AH,0DH,' Повторить? (Д/Н) ',00H
INFF1: DB '"F1"',00H
INFF2: DB '"F2"',00H
INFF3: DB '"F3"',00H
INFF4: DB '"F4"',00H
INFTAB: DB '"Таб"',00H
INFR: DB '"Пробел"',00H
INFPS: DB '"Пс"',00H
INFZB: DB '"Зб"',00H
INFWK: DB '"Вк"',00H
INFSTR: DB '"Стр"',00H
INFAR2: DB '"Ар2"',00H
INFLE: DB '"Кур. влево"',00H
INFPR: DB '"Кур. вправо"',00H
INFWE: DB '"Кур. вверх"',00H
INFNI: DB '"Кур. вниз"',00H
INFUS: DB '^'
INFUS1: DB 24H,00H
q ne zna` takoj DOS. izwinite.
KTSerg, ясно. Я думал, это драйвер обычной COM-портовой мыши.
А смысл цеплять к Вектору СОМ-портовую мышь? Она слишком наглая, ей "до лампочки" приняли от неё инфу о перемещениях или нет... для неё контроллер нужен, аппаратные прерывания, и скорость...
Покопался в ps/2, комп может инициировать отправку данных в клаву или мышь, но синхрой занимается не комп (в отличии от протокола i2c), и нигде не говорится о возможности "притормозить" зажимая синхру...
Значит опять нужен контроллер посредник...
Последний раз редактировалось KTSerg; 07.03.2019 в 21:11.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)