Из журнала Deja Vu #09, Кемерово, 1999 (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". А нам того и надо! Успехов Вам в кодинге, начинающие!