(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". А нам того и надо!
Успехов Вам в кодинге, начинающие!