|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
откуда растут уши у советских бейсиков
Author |
Message |
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
BIOS Int16h АН = 05h — Поместить символ в буфер клавиатуры. К сожалению - нет. Тут как раз надо, чтобы сработало INT 9 - аппаратно пришел скан-код. Кстати говоря, Int16h Васик подменяет своими - поэтому трюки с Int16h никакие не удались.
Пробовал... но поскольку это не сканкод - эффекта не возымело.
Ещё есть такого типа - вызвать тестовую последовательность. Тоже не подходит.
Самое подходящее - повторить последний скан-код. Но где уверенность,
что он там был?
Можно сказать, что наверняка хоть один но был! А может и не случиться...
Смысл этого резидента моего - дать возможность больше работать мышью...
Так вот мне казалось, что INT 9 - красивое решение, - хоть раз да клавишу
придётся нажать?
А практика показывает - что может и не случиться...
Васюк вызывается щелчком мыши - вот уже и предыдущего нажатия нет...
А в Васюке при отладке - выделяешь мышью, комментировать строки можно тоже мышью...
Выходит - нужного нажатия, чтоб произошло INT 9 - можно и недождаться совсем...
_________________ iLavr
|
26 Aug 2012 05:53 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Манипулирование напрямую с буфером скан-кодов и его указателем (или даже с контроллером прерываний) не приводит к нужному эффекту? Нужные книжки остались на даче, а из памяти уже выветрилось всё...
|
26 Aug 2012 06:10 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Нет... эти вещи же все выше INT 9 по уровню...
INT 9 - это ж аппаратное прерывание, которое как раз и кладет код
в кольцевой буфер...
А чтоб оно случилось - клавиатура и должна выдать код...
Кстати под Вендой это делается просто:
Виртуальная клавиатура как раз и организует "фальшивые" INT 9 для
сессии DOS.
А вот в чистом DOS нужно аппаратное прерывание от клавиатуры.
Но в принципе это всё не так страшно... просто я надеялся - вдруг кто знает редкий
недокументированный трюк из своего опыта...
_________________ iLavr
|
26 Aug 2012 06:51 |
|
|
VituZz
God
Joined: 13 Nov 2010 04:06 Posts: 1345
|
Что-то я запутался...
Если плясать от печки. Клава по факту нажатия вырабатывает скан-код, шлёт его в контроллер а-ля 8042, который вырабатывает прерывание IRQ1. Вектор, разумеется, указывает на память, куда и передаётся управление - Int 9h. Как бы именно аппаратное прерывание не представляется мне совершенно необходимым, вызвав Int 9h с необходимым антуражем, можно вроде добиться тех же результатов...
Аппаратное прерывание - IRQ1. Int 9h - программное. Или я уже совсем всё забыл?
Блин, надо везти книжки домой, вспоминать молодость .
|
26 Aug 2012 07:15 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да ты не попутал - ты совершенно прав: номер запроса на аппаратное прерывание - IRQ1,
Вектор прерывание - 09h.
Аппаратное нужно всего один раз после старта резидентного меню и QBasic-а,
чтобы они выстроились правильно в цепочке перехватов INT 9.
После чего драйвер меню через это INT 9 действительно чисто программно делает INT 9.
Клик мыши по экрану драйвер меню как раз сам преобразует в вызовы INT 9
с нужными сканкодами, чтобы QBasic делал " copy", " paste" и др. безо всякого
нажатия клавиатуры.
Но для этого драйвер меню должен 1 раз встать в очередь обслуживания
INT 9 перед QBasic-ом.
PS. И не вози ты с дачи книжки! Тут где-то и я и Хардыч выкладывали электронный тех-хелп... Год-то 2012-й! - пора переходить на безбумажные технологии!
_________________ iLavr
|
26 Aug 2012 12:24 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 860
|
Не понимаю, в чём проблема.
Обычно перехватывают ещё и прерывание по таймеру, и следят за нужными векторами.
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
26 Aug 2012 22:55 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
А программно щелкнуть инт9 религия не позволяет?
|
26 Aug 2012 23:09 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Позволяет. Но ещё раз повторяю - поскольку в первый момент над резидентом
нет Васика - щелкать INT 9 нет никакого смысла.
Я уже несколько раз объяснил связку:
1. резидентное меню берёт INT 9 на себя и следит, что оно само первое в очереди его обслуживания во время вызова INT 9.
2. QBasic становится поверх резидента и перехватывает INT 9 на себя.
3. По первому нажатию клавиши в QBasic резидентное меню определяет внутри INT 9, что оно не первое. Оно меняет очередь, чтобы стать первым, а QBasic поставить вторым.
4. Теперь резидентное меню может "обманывать" QBasic, подставляя ему коды клавиш через INT 9.
Что значит щелкать INT 9 самому: в конце цепочки перехватов INT 9 в
конце концов находится настоящее INT 9, которое полезет в настоящие
железные порты, где его никто ни с чем не звал...
И что оно будет делать? Я лично не знаю...
Иначе - да... может и можно было бы шлёпать им, скажем, по таймеру...
_________________ iLavr
|
27 Aug 2012 07:02 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Не, ну ставимся в очередь в инт9, смотрим что не первые - меняемся с первым (или сдвигаем всю очередь, чтобы не нарушать порядок). Так нельзя что-ли?
|
27 Aug 2012 20:25 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
У меня такое впечатление, что я в пустоту рассказываю...
Когда мы не первые, то первый - QBasic. Он взял на себя обработку
аппаратного прерывания.
Мы по таймеру "хлопаем" INT 9, но мы - после QBasic-а, а он по INT 9 идёт
в железный порт обработать до нас прерывание - а там нефига нет - что он
будет делать? - Я лично не знаю...
Раз QBasic взял эти функции на себя - а он почему-то всё любит
делать сам даже INT 16h подменяет своим и по стандартным трюкам
к нему с клавиатурой не подезть...
Так вот что он бует делать перед нами - если аппаратно ничего не случилось,
а мы его глупо обманули?
_________________ iLavr
|
27 Aug 2012 22:07 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Нужно подменить функцию подмены векторов и запретить наглую подмену КуВасиком векторов! :3
|
27 Aug 2012 23:06 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Да вобщем-то не шибко принципиальный момент. Просто когда я программировал
эту всю затею, то думал, что если ты зашел в среду программирования, то будешь
на кнопки обязательно нажимать... И первое-же нажатие обеспечивает связку
резидентного меню с QBasic-ом, что практически незаметно случается...
Но Вендавоз так избаловал мышами, что кнопки я нажимать отвык...
Не мог же я такого предусмотреть?
Вся фигня в том, что трудно отследить, кто перехватывает прерывание, нет таких
штатных средств...
Уже когда оно перехвачено - я определяю QBasic по сигнатуре в его внутренней
функции INT 9.
А так - если бы был другой признак - " вот QBasic пришел и INT 9 уже перехватил" -
то и проблем бы не было...
PS. Но что меня искренне удивило, это резидентное меню, расточенное конкретно под QBasic, срабатывает и под некоторыми другими творeниями M$...
_________________ iLavr
Last edited by Lavr on 31 Aug 2012 23:39, edited 1 time in total.
|
27 Aug 2012 23:49 |
|
|
Stan
Banned
Joined: 04 Jan 2013 10:09 Posts: 397 Location: 95.24.178.158
|
Реальные исходники QBasic 1.1 от этих самых M$ имеются вот на этой странице: Download MS Basic versionsВот они: Download MS Qbasic 1.1 source codeЭто на тот случай, если кому-либо интересны принципы работы QBasic . Заодно на этой странице есть практически все дистрибутивы винрарных версий Васиков от M$, начиная от ancient version of MS Basic for the CP/M (1977) и заканчивая Microsoft Visual Basic 4.0.
|
19 Mar 2015 21:27 |
|
|
angry_troll
Doomed
Joined: 08 Apr 2013 04:04 Posts: 449 Location: 213.247.249.139
|
Вот падлюки, машинное время поди на университетском-то им даром было, зато потом сколько жалоб от этих змеюк было, что ихние никчёмные бейсики и прочий шлак тырили... ps: ударим некропостингом по оффтопику!
_________________ привет засранцу лавру :)
|
30 Mar 2015 11:12 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
В этом нашем Интернете, как что дельное и полезное - так пропадает... а всякие ерундовины, лицекниги, кошечки и тытрубка - плодятся безмерно... Решил скачать себе хорошо прокомментированные исходники Altair BASIC 3.2 (4K Edition). А то на них уже ссылаются только в Веб-архив... а они пока еще живые есть! P.S. Кстати, что довольно интересно: когда я сам декомпилировал Бейсики, меня смущало, что в ряде случаев есть JMP в середину другой инструкции. Это сбивает с толку дизассемблер, но меня больше беспокоило - не ошибки ли это, появившиеся когда все друг у друга эти Бейсики тянули? Оказалось, что это фирменные фичи юного Билла Гейца...
_________________ iLavr
|
13 Jun 2017 08:20 |
|
|
Who is online |
Users browsing this forum: No registered users and 19 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|