Coding - coding для чайников: цивилизованный выход в TR-DOS.

Deja Vu #09
(C) SKL-KEEPER aka Колесников Сергей
__________________________________________


      Coding для "чайников"


   Эту небольшую  заметку я хочу посвятить
тому, как осуществить корректный и удобный
для пользователя выход из программы.
   А  что, разве не попадались Вам систем-
ные программы или утилиты,которые по окон-
чании  своей  работы  даже не задавали Вам
вопрос о том, хотите ли Вы закончить рабо-
ту  с программой? Что делает в этом случае
пользователь? Да жмет "Reset" и все дела!
   А  бывает, что  и спрашивает, что, мол,
закончили  работу?  Пользователь  нажимает
"Y"  и благополучно вываливается в Бейсик!
Бедному  юзеру  ничего  не  остается,  как
опять  жать "Reset", чтобы на экране мони-
тора  или телевизора увидеть привычное TR-
-DOS'овское меню...
   А ведь как красиво, корректно и цивили-
зованно  поступают  разработчики программ,
когда пользователь при желании всего одним
или двумя нажатиями клавиш выходит из про-
граммы, а компьютер уже услужливо не прос-
то  сбросился,  но и вышел в TR-DOS и даже
загрузил  "boot"! Какое удовольствие испы-
тывает  синклерист от работы с такой прог-
раммой! И разработчика добрым словом помя-
нет!:-)
   Мне  стало  интересно, а как же это де-
лается? Загрузил  одну  из таких цивилизо-
ванных  программ в свой "Скорпион" и с по-
мощью  теневого монитора немного покопался
в ней. Все оказалось настолько просто, что
даже неудобно заметку посвящать этой теме!
Но, тем  не  менее, я  нигде  и никогда не
встречал в литературе подобного материала,
поэтому решил поделиться этой своей наход-
кой  с друзьями по увлечению. Пусть даже и
не  для применения, а просто для интереса,
я думаю, Вам это пригодится. А Вы, асы ко-
динга,  не  улыбайтесь,  а  лучше побольше
посвящайте  статей  и  заметок  о секретах
программирования, причем, в  расчете не на
"матерых"  кодеров, а  на  тех, кто в  ас-
семблере  слабоват, но хочет знать поболь-
ше!
   Итак,  если  Вам нужно сделать выход из
программы  таким  образом, как  я  описал,
после запроса о желании оставить программу
Вы  делаете  опрос  клавиатуры  на нажатие
"Y",  и, если она нажата, переход на такую
программку:

RESET   LD   HL,0
        PUSH HL
        JP   #3D2F


   Чуть-чуть  комментария. Мы  посредством
регистра  HL заносим на стек нулевой адрес
и  делаем  JP на адрес #3D2F, где, как из-
вестно, стоит NOP и RET. После команды RET
мы  возвращаемся  на адрес, находящийся на
вершине  стека, а там у нас ноль. Но обра-
щение  к  адресу  #3D2F переключает ПЗУ на
TR-DOS. Если  TR-DOS  запускается с адреса
0,  то после инициализации компьютера сис-
тема выбирает дисковод "А" и пытается заг-
рузить с него и запустить Бейсик-программу
"boot". А нам того и надо!

    Успехов Вам в кодинге, начинающие!