TSR (программистское)
Aug. 1st, 2004 08:02 pmМеня попросили сказать, как в DOSе пишут TSR-программы. Помните, были такие, в памяти постоянно висели?
TSR: Terminate and Stay Resident. Это я ещё помню. А вот как их делают, совершенно забыл. Что-то там надо было сообщить ДОСу... кажется, сколько памяти считать занятой после выхода, чтобы command.com выше неё заново запустить, а не переписать поверх TSRа. А потом как-то выйти через int21... обычным путём или каким-то особенным?
Пытаюсь вспомнить и не могу. А ведь когда-то написал их немалое число. Висели они, милые, и перехватывали какие-то прерывания... брр, какие же это были прерывания? На клавиатуру было два, аппаратное и BIOSовое. Кажется, 09 и 16. 21 ещё приходилось прослушивать пару раз, для всяких трюков более сложных. И таймер, конечно — а каким был таймер? Восьмым? Не помню тоже.
Ещё их можно было запускать в верхней памяти, вот. Которая от 640kb то 1Mb. Но ещё не забываем про буфер дисплея (адреса были разные, для графического, текстового монохромного, и текстового цветного режимов. Только не помню, какие это были адреса). И expanded memory, когда была, туда же где-то мэппилась, да? И ещё extended была, которой мне не пришлось воспользоваться программным образом, только expanded пару раз.
Вот интересно, помнит кто-то вот так сходу, что должна делать TSR-программа, чтобы грамотно всё устроить? Не подсматривая в Гугль или ещё куда? Ясно ведь, что в два щелчка можно всё найти, это неинтересно. Не подсматривая — помнит кто? Отзовитесь.
Если есть такие люди, то я им, наверное, завидую. Или нет. Не знаю даже. Знаю одно: моя память по-другому устроена. Я не помню таких вещей. Из моей памяти всё медленно, но очень-очень верно улетучивается. Не пользовался каким-то языком программирования пару лет — забыл. Не какие-то глубокие вещи даже забыл, а на уровне “как переменные объявлять”. Про APIs, как эти прерывания злосчастные, уже и говорить нечего.
Может, это к лучшему? Может, это хлам, который и стоит забывать? Всегда же можно подучить и вспомнить, если есть необходимость; да и приходится нередко. А может и не так. Почему хлам? Кто его знает, как человеческая память устроена, и какие у неё возможности. То, что в ней много сидит технических сведений, которые сейчас не нужны, не значит вовсе, что они занимают какое-то нужное место, и мешают что-то другое запомнить. Тогда остаётся только завидовать тем, у кого этот процесс угасания памяти не так ярко выражен, как у меня. Кто может вспомнить, что же там такое надо было говорить ДОСу 13 лет назад, чтобы остаться в памяти TSRом. Не знаю.
Из забытого мной можно составить город.
TSR: Terminate and Stay Resident. Это я ещё помню. А вот как их делают, совершенно забыл. Что-то там надо было сообщить ДОСу... кажется, сколько памяти считать занятой после выхода, чтобы command.com выше неё заново запустить, а не переписать поверх TSRа. А потом как-то выйти через int21... обычным путём или каким-то особенным?
Пытаюсь вспомнить и не могу. А ведь когда-то написал их немалое число. Висели они, милые, и перехватывали какие-то прерывания... брр, какие же это были прерывания? На клавиатуру было два, аппаратное и BIOSовое. Кажется, 09 и 16. 21 ещё приходилось прослушивать пару раз, для всяких трюков более сложных. И таймер, конечно — а каким был таймер? Восьмым? Не помню тоже.
Ещё их можно было запускать в верхней памяти, вот. Которая от 640kb то 1Mb. Но ещё не забываем про буфер дисплея (адреса были разные, для графического, текстового монохромного, и текстового цветного режимов. Только не помню, какие это были адреса). И expanded memory, когда была, туда же где-то мэппилась, да? И ещё extended была, которой мне не пришлось воспользоваться программным образом, только expanded пару раз.
Вот интересно, помнит кто-то вот так сходу, что должна делать TSR-программа, чтобы грамотно всё устроить? Не подсматривая в Гугль или ещё куда? Ясно ведь, что в два щелчка можно всё найти, это неинтересно. Не подсматривая — помнит кто? Отзовитесь.
Если есть такие люди, то я им, наверное, завидую. Или нет. Не знаю даже. Знаю одно: моя память по-другому устроена. Я не помню таких вещей. Из моей памяти всё медленно, но очень-очень верно улетучивается. Не пользовался каким-то языком программирования пару лет — забыл. Не какие-то глубокие вещи даже забыл, а на уровне “как переменные объявлять”. Про APIs, как эти прерывания злосчастные, уже и говорить нечего.
Может, это к лучшему? Может, это хлам, который и стоит забывать? Всегда же можно подучить и вспомнить, если есть необходимость; да и приходится нередко. А может и не так. Почему хлам? Кто его знает, как человеческая память устроена, и какие у неё возможности. То, что в ней много сидит технических сведений, которые сейчас не нужны, не значит вовсе, что они занимают какое-то нужное место, и мешают что-то другое запомнить. Тогда остаётся только завидовать тем, у кого этот процесс угасания памяти не так ярко выражен, как у меня. Кто может вспомнить, что же там такое надо было говорить ДОСу 13 лет назад, чтобы остаться в памяти TSRом. Не знаю.
Из забытого мной можно составить город.
no subject
Date: 2004-08-01 10:16 am (UTC)no subject
Date: 2004-08-01 10:18 am (UTC)no subject
no subject
Date: 2004-08-01 10:21 am (UTC)А вот из таблицы помню мало, разве что, да, 9,21, и ещё, конечно, 33:)
no subject
Date: 2004-08-01 10:27 am (UTC):)
Date: 2004-08-01 10:33 am (UTC)Еще помню рекомендации, что стоит либо мониторить прерывание 13h, либо пользоватся кучей функций int 29h, совершенно недокументированного поначалу, и потом бол-менее описанном в int-list, чтобы не "всплыть" посреди дисковой операции ...
Помню что рекомендовалось перехватывать пользовательский таймер (1Сh), но все хватали 8-ку, ибо с пользовательским была постоянная проблема. 9-ку перехватывали, когда писали всякие драйвера клавиатуры. А еще мы умудрялись писать тср-ки и на паскале, и на Си :)
no subject
Date: 2004-08-01 10:50 am (UTC)http://www.clipx.net/ng/dos5/
http://www.delorie.com/djgpp/doc/dpmi/
no subject
Date: 2004-08-01 10:53 am (UTC)no subject
Date: 2004-08-01 10:55 am (UTC)Или это и есть цитата из стихов, которых _я_ не помню? :))
no subject
Date: 2004-08-01 10:56 am (UTC)no subject
Date: 2004-08-01 11:01 am (UTC)no subject
Date: 2004-08-01 11:02 am (UTC)no subject
Date: 2004-08-01 11:05 am (UTC)no subject
no subject
Date: 2004-08-01 11:08 am (UTC)Я этот стих, конечно, читала, но вот не опознала в таком виде.
no subject
Date: 2004-08-01 11:13 am (UTC)no subject
Date: 2004-08-01 11:28 am (UTC)двадцатое! двадцатое прерывание!
молодость, молодость...
no subject
Date: 2004-08-01 11:44 am (UTC)Re: :)
Date: 2004-08-01 11:59 am (UTC)no subject
Date: 2004-08-01 12:05 pm (UTC)2. napisat' draiver
3. kazhetsya kakai-to funkciya 21-go TSR (20 - kazhetsya prosto exit?)
no subject
Date: 2004-08-01 12:08 pm (UTC)Если этого всего не делать, то есть (реальная) опасность того, что загубишь чью-то операцию чтения/записи, когда всплывёшь по нажатию клавиши во время дисковой активности. Т.к. не все TSRы были достаточно умными, умные юзеры помнили, что лучше подождать, пока не горит лампочка диска, перед тем, как вызывать какой-нибудь TSR по клавише ;)
no subject
Date: 2004-08-01 12:15 pm (UTC)no subject
Date: 2004-08-01 12:26 pm (UTC)no subject
Date: 2004-08-01 12:43 pm (UTC)no subject
Date: 2004-08-01 12:45 pm (UTC)