Delphi. Програма та Інтерфейс. додаток своє
Спосіб створення TSR програм без PSP
У даній статті розглядається спосіб побудови резидентних програм - TSR (Terminate and Stay Resident), що дозволяє використовувати область PSP (Program Segment Prefix) для розміщення резидентного коду програми.
Дещо про недокументованих функціях DOS.
Для розуміння механізму розробки TSR без PSP необхідно ознайомитися з деякими недокументованими функціями DOS і з форматами PSP і MCB - Memory Control Block.
PSP - program segment prefix.
PSP завжди будується DOS при запуску будь-якої програми і безпосередньо передує початку програми. Розглянемо формат PSP.
містить команду INT 20h, яка використовується для завершення програми
довгий виклик диспетчера функцій DOS. Містить команду довгого переходу до диспетчера функцій DOS. Використовується в програмах, орієнтованих на CP / M. Зсув в команді довгого переходу
містить кількість байтів, доступних в сегменті коду програми.
копія вектора переривання 22h, за яким управління передається для
завершення програми.
копія вектора переривання 23h, за яким управління передається при натисканні CONTROL-BREAK або CONTROL-C.
Розмір блоку - 16 байт.
Недокументовані функції DOS.
Розглянемо тепер недокументовані функції DOS, які використовуються для побудови TSR без PSP.
встановити поточний PSP.
Ця функція вказує DOS, що в якості поточного слід використовувати вказаний PSP.
створити підлеглий PSP.
Ця функція вимагає від DOS створити підлеглий PSP. На відміну від функції 26h дані не копіюються з поточного PSP, а будуються заново.
Розглянемо послідовність дій при завершенні програми.
Даний метод випробуваний в різних сумісних операційних середовищах:
- MS / PC DOS 3.30;
- MS / PC DOS 4;
- MS DOS 5 beta release;
- DR DOS 3.41;
- DR DOS 5;
- з використанням завантажувача LOADHI від системи QEMM 5.0;
- з використанням завантаження в старшу пам'ять HILOAD DR DOS 5.
Приклад резидентної програми без PSP.
Для кращого розуміння порядку завершення резидентної програми без PSP наведемо приклад.