nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 12:44



Reply to topic  [ 156 posts ]  Go to page Previous  1 ... 7, 8, 9, 10, 11  Next
откуда растут уши у советских бейсиков 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
VituZz wrote:
Функция 05h BIOS Int16h - это не то, что нужно?

BIOS Int16h АН = 05h — Поместить символ в буфер клавиатуры.
К сожалению - нет. Тут как раз надо, чтобы сработало INT 9 - аппаратно пришел скан-код.
Кстати говоря, Int16h Васик подменяет своими - поэтому трюки с Int16h никакие
не удались.
VituZz wrote:
Кроме того, если в порт 60h послать код EEh, то клава ответит также кодом EEh (эхо).

Пробовал... но поскольку это не сканкод - эффекта не возымело.

Ещё есть такого типа - вызвать тестовую последовательность. Тоже не подходит.

Самое подходящее - повторить последний скан-код. Но где уверенность,
что он там был?
Можно сказать, что наверняка хоть один но был! А может и не случиться...

Смысл этого резидента моего - дать возможность больше работать мышью...
Так вот мне казалось, что INT 9 - красивое решение, - хоть раз да клавишу
придётся нажать?
А практика показывает - что может и не случиться...
Васюк вызывается щелчком мыши - вот уже и предыдущего нажатия нет...
А в Васюке при отладке - выделяешь мышью, комментировать строки можно тоже мышью...
Выходит - нужного нажатия, чтоб произошло INT 9 - можно и недождаться совсем... :wink:

_________________
iLavr


26 Aug 2012 05:53
Profile
God
User avatar

Joined: 13 Nov 2010 04:06
Posts: 1345
Reply with quote
Post 
Манипулирование напрямую с буфером скан-кодов и его указателем (или даже с контроллером прерываний) не приводит к нужному эффекту? Нужные книжки остались на даче, а из памяти уже выветрилось всё...


26 Aug 2012 06:10
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
VituZz wrote:
Манипулирование напрямую с буфером скан-кодов и его указателем (или даже с контроллером прерываний) не приводит к нужному эффекту?

Нет... эти вещи же все выше INT 9 по уровню...
INT 9 - это ж аппаратное прерывание, которое как раз и кладет код
в кольцевой буфер...

А чтоб оно случилось - клавиатура и должна выдать код...

Кстати под Вендой это делается просто:

Image

Виртуальная клавиатура как раз и организует "фальшивые" INT 9 для
сессии DOS.
А вот в чистом DOS нужно аппаратное прерывание от клавиатуры.

Но в принципе это всё не так страшно... просто я надеялся - вдруг кто знает редкий
недокументированный трюк из своего опыта...

_________________
iLavr


26 Aug 2012 06:51
Profile
God
User avatar

Joined: 13 Nov 2010 04:06
Posts: 1345
Reply with quote
Post 
Что-то я запутался...
Если плясать от печки. Клава по факту нажатия вырабатывает скан-код, шлёт его в контроллер а-ля 8042, который вырабатывает прерывание IRQ1. Вектор, разумеется, указывает на память, куда и передаётся управление - Int 9h. Как бы именно аппаратное прерывание не представляется мне совершенно необходимым, вызвав Int 9h с необходимым антуражем, можно вроде добиться тех же результатов...
Аппаратное прерывание - IRQ1. Int 9h - программное. Или я уже совсем всё забыл?
Блин, надо везти книжки домой, вспоминать молодость :D .


26 Aug 2012 07:15
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Да ты не попутал - ты совершенно прав: номер запроса на аппаратное прерывание - IRQ1,
Вектор прерывание - 09h.
Аппаратное нужно всего один раз после старта резидентного меню и QBasic-а,
чтобы они выстроились правильно в цепочке перехватов INT 9.
После чего драйвер меню через это INT 9 действительно чисто программно делает INT 9.

Клик мыши по экрану драйвер меню как раз сам преобразует в вызовы INT 9
с нужными сканкодами, чтобы QBasic делал "copy", "paste" и др. безо всякого
нажатия клавиатуры.

Но для этого драйвер меню должен 1 раз встать в очередь обслуживания
INT 9 перед QBasic-ом.



PS. И не вози ты с дачи книжки! Тут где-то и я и Хардыч выкладывали
электронный тех-хелп... Год-то 2012-й! - пора переходить на безбумажные
технологии!
:lol:

_________________
iLavr


26 Aug 2012 12:24
Profile
Devil

Joined: 26 May 2003 06:57
Posts: 859
Reply with quote
Post 
Lavr wrote:
Но для этого драйвер меню должен 1 раз встать в очередь обслуживания
INT 9 перед QBasic-ом.

Не понимаю, в чём проблема.
Обычно перехватывают ещё и прерывание по таймеру, и следят за нужными векторами.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


26 Aug 2012 22:55
Profile WWW
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
А программно щелкнуть инт9 религия не позволяет?


26 Aug 2012 23:09
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
HardWareMan wrote:
А программно щелкнуть инт9 религия не позволяет?

Позволяет. Но ещё раз повторяю - поскольку в первый момент над резидентом
нет Васика - щелкать INT 9 нет никакого смысла.

Я уже несколько раз объяснил связку:
1. резидентное меню берёт INT 9 на себя и следит, что оно само первое в очереди его обслуживания во время вызова INT 9.
2. QBasic становится поверх резидента и перехватывает INT 9 на себя.
3. По первому нажатию клавиши в QBasic резидентное меню определяет внутри INT 9, что оно не первое. Оно меняет очередь, чтобы стать первым, а QBasic поставить вторым.
4. Теперь резидентное меню может "обманывать" QBasic, подставляя ему коды клавиш через INT 9.
Code:
@QBMENU.COM
@qb.exe %1 /AH /L C:\QBASIC\BASFILE.QLB


Что значит щелкать INT 9 самому: в конце цепочки перехватов INT 9 в
конце концов находится настоящее INT 9, которое полезет в настоящие
железные порты, где его никто ни с чем не звал... :wink:
И что оно будет делать? Я лично не знаю...

Иначе - да... может и можно было бы шлёпать им, скажем, по таймеру...

_________________
iLavr


27 Aug 2012 07:02
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Lavr wrote:
Иначе - да... может и можно было бы шлёпать им, скажем, по таймеру...

Не, ну ставимся в очередь в инт9, смотрим что не первые - меняемся с первым (или сдвигаем всю очередь, чтобы не нарушать порядок). Так нельзя что-ли?


27 Aug 2012 20:25
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
У меня такое впечатление, что я в пустоту рассказываю... :(
Когда мы не первые, то первый - QBasic. Он взял на себя обработку
аппаратного прерывания.
Мы по таймеру "хлопаем" INT 9, но мы - после QBasic-а, а он по INT 9 идёт
в железный порт обработать до нас прерывание - а там нефига нет - что он
будет делать? - Я лично не знаю...

INT 09h wrote:
Как работает стандартный обработчик клавиатурного прерывания INT 09h, входящий в состав BIOS?

Этот обработчик выполняет следующие действия:
читает из порта 60h скан-код нажатой клавиши;
записывает вычисленное по скан-коду значение ASCII-кода нажатой клавиши в специальный буфер клавиатуры, расположенный в области данных BIOS;
устанавливает в 1 бит 7 порта 61h, разрешая дальнейшую работу клавиатуры;
возвращает этот бит в исходное состояние;
записывает в порт 20h значение 20h для правильного завершения обработки аппаратного прерывания.

Раз QBasic взял эти функции на себя - а он почему-то всё любит
делать сам даже INT 16h подменяет своим и по стандартным трюкам
к нему с клавиатурой не подезть...

Так вот что он бует делать перед нами - если аппаратно ничего не случилось,
а мы его глупо обманули?

_________________
iLavr


27 Aug 2012 22:07
Profile
Banned
User avatar

Joined: 20 Mar 2005 13:41
Posts: 2141
Location: От туда
Reply with quote
Post 
Нужно подменить функцию подмены векторов и запретить наглую подмену КуВасиком векторов! :3


27 Aug 2012 23:06
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Да вобщем-то не шибко принципиальный момент. Просто когда я программировал
эту всю затею, то думал, что если ты зашел в среду программирования, то будешь
на кнопки обязательно нажимать... И первое-же нажатие обеспечивает связку
резидентного меню с QBasic-ом, что практически незаметно случается...

Но Вендавоз так избаловал мышами, что кнопки я нажимать отвык... :lol:
Не мог же я такого предусмотреть? :wink:

Вся фигня в том, что трудно отследить, кто перехватывает прерывание, нет таких
штатных средств...
Уже когда оно перехвачено - я определяю QBasic по сигнатуре в его внутренней
функции INT 9.
А так - если бы был другой признак - "вот QBasic пришел и INT 9 уже перехватил" -
то и проблем бы не было... :D


PS. Но что меня искренне удивило, это резидентное меню, расточенное конкретно
под QBasic, срабатывает и под некоторыми другими творeниями M$
...
:o

_________________
iLavr


Last edited by Lavr on 31 Aug 2012 23:39, edited 1 time in total.



27 Aug 2012 23:49
Profile
Banned
User avatar

Joined: 04 Jan 2013 10:09
Posts: 397
Location: 95.24.178.158
Reply with quote
Post Re:
Lavr wrote:
Я до сих пор с удовольствием люблю что-либо декомпильнуть,
последнее - был QBasic от M$ - я в нём полазил под Идой...

Реальные исходники 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
Profile
Doomed

Joined: 08 Apr 2013 04:04
Posts: 449
Location: 213.247.249.139
Reply with quote
Post Re:
Shaos wrote:
первый прототип бейсика для альтаира писался собственноручно Алленом и Гейтсом на университетском PDP-10


Вот падлюки, машинное время поди на университетском-то им даром было, зато потом сколько жалоб от этих змеюк было, что ихние никчёмные бейсики и прочий шлак тырили... :rotate:

ps: ударим некропостингом по оффтопику!

_________________
привет засранцу лавру :)


30 Mar 2015 11:12
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Post Re:
Lavr wrote:
А вот, собственно и знаменитый Интерпретатор бейсика для Altair 8800.
Толку в нём, наверное, никакого, но как знаменитый прадедушка - в коллекцию... :wink:
Quote:
Интерпретатор бейсика, с которого и пошла вся история майкрософт... 1975 год.
Запустить можно на любом эмуляторе Альтаира 8800. Второй файлик как раз и
является вспомогательным файлом, необходимым для запуска бейсика на этом
эмуляторе.
Источник

В этом нашем Интернете, как что дельное и полезное - так пропадает... :-? а всякие ерундовины,
лицекниги, кошечки и тытрубка - плодятся безмерно... :o

Решил скачать себе хорошо прокомментированные исходники Altair BASIC 3.2 (4K Edition).
А то на них уже ссылаются только в Веб-архив... а они пока еще живые есть! :lol:


P.S. Кстати, что довольно интересно: когда я сам декомпилировал Бейсики, меня смущало,
что в ряде случаев есть JMP в середину другой инструкции. Это сбивает с толку дизассемблер,
но меня больше беспокоило - не ошибки ли это, появившиеся когда все друг у друга эти
Бейсики тянули? Оказалось, что это фирменные фичи юного Билла Гейца...
:wink:
Quote:
Reuben Harris has disassembled an early Altair Basic binary, and his conclusion is that the 1975 Bill Gates was a true hacker in the finest sense of the word.
In more than one instance, for example, Gates's code jumps to the second or third byte of a 2- or 3-byte 8080 instruction. What looks like an error is just a way to save a byte here and there.
This is what some might call "running light without overbyte." And that was what mattered in 1975. Dennis Allison, this magazine's cofounder, once told me that there is only space and time, and you have to decide which to conserve. (Those are not even remotely his words, but I'm pulling this one out from behind my own mental furniture after more than a decade. He did say something to that effect.) In 1975, when speed was a luxury and saving 3 bytes might mean the difference between being able to implement a feature and not being able to implement it, what you conserved was space. Bill was very good at this.

_________________
iLavr


13 Jun 2017 08:20
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 156 posts ]  Go to page Previous  1 ... 7, 8, 9, 10, 11  Next

Who is online

Users browsing this forum: No registered users and 10 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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.