City #20
14 июля 1999 |
|
ООООООООООООООООООООО ОООООООООО ЛИКБЕЗ ОООООООООО ООООООООООООООООООООО ╔════════════════════════════════════════╗ ║ ║ ║ ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ║ ║ ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚════════════════════════════════════════╝ продолжение П.Федин Адрес 1270. Проверка переменной 23801 и проверка достижения конца каталога при его печати. 1270 PUSH HL ;сохранение HL и BC PUSH BC LD A,(23801) ;берем номер дисковода для выдачи каталога LD HL,23798 ;назначен этот диско- вод ? CP (HL) CALL NZ,15755;если нет, то о послед- ствиях читайте в конце Ошибка в программе!! Об этом особо в конце текста. POP BC ;восстановление HL и BC POP HL JP 12230 ;проверка достижения конца каталога и возв- рат Обратите особое внимание на команду CALL NZ,15755. В аналогичной подпрограмме для LIST стоит CALL NZ,15819.В нашем же случае управление будет передано в подпрограмму печати символа (ее адрес 15744) на адрес, где находятся 2 байта адреса от команды CALL 15764. Программа с этого адреса будет такой: SUB H DEC A CALL 8433 POP DE POP BC POP HL RET Таким образом произойдет изменение памяти, если оно разрешено, затем со стека будут сняты 3 адреса и помещены в регистры и за- тем произойдет возврат. Последствия всего этого определяются программой, вызвавшей 1270. ────────────────────────────────────────── Адрес 1287. Прибавление 16 к HL. 1287 LD DE,16 ADD HL,DE RET ────────────────────────────────────────── Адрес 1292. Проверка и обработка достиже- ния конца буфера при работе с каталогом. Установите 23756 и поместите в HL текущее место буфера. Если достигнут его конец, то в HL будет начало буфера и в него будет загружен следующий сектор каталога. 1292 PUSH HL ;сохранение HL и BC PUSH BC LD BC,41435;достигнут конец буфера ? ADD HL,BC JR C,1303 ;если да,то загрузка сле- дующего сектора POP BC ;восстановление HL и BC POP HL RET ;возврат 1303 LD HL,23756;следующий сектор INC (HL) CALL 1004 ;загрузка его в буфер POP BC ;восстановление BC и HL POP HL LD HL,23845;помещение в HL адреса начала буфера RET ;возврат ────────────────────────────────────────── Адрес 1316. Вычисление номера дисковода по его имени. Имя поместите в А, на выходе там будет номер. 1316 AND 223 ;буква заглавная SBC A,65 ;вычисление номера диско- вода JP C,7450 ;если именем был символ меньше "A", то ошибка CP 4 ;номер получился больше 3? JP NC,7450;если да, то ошибка RET ;возврат ────────────────────────────────────────── Адрес 1338. Выполнение команды NEW. Уста- новите 23825 и 23611. Используется также с адреса 1385 (запись информации о файле; номер файла задайте в регистре C). 1338 CALL 7629 ;прием имен файлов на стек калькулятора CALL 7541 ;если идет проверка на синтаксис, то возврат CALL 4142 ;прием расширения файла CALL 7344 ;установка старого имени файла LD A,(23798);берем номер дисковода LD (23800),A;сохраняем его JP NZ,985 ;если файл не найден, то ошибка PUSH BC ;сохранение номера файла CALL 5725 ;загрузка описателя фай- ла CALL 7344 ;установка нового имени файла PUSH AF ;сохранение результата проверки имени файла LD A,(23800);в новом имени файла назначен другой диско- вод LD HL,23798 CP (HL) JP NZ,7450 ;если да, то ошибка CALL 1029 ;настройка на диск POP AF ;восстановление резуль- тата проверки имени файла JP Z,7248 ;если такой файл уже есть, то ошибка POP BC ;восстановление номера файла 1385 CALL 5739 ;загрузка сектора с опи- сателем файла и замена описателя CALL 7747 ;перезапись сектора JP 993 ;сообщение O.K. ────────────────────────────────────────── Адрес 1394. Проверка переменной 23824. Со- ответственно содержимому будет установлен флаг Z,а само содержимое будет в аккумуля- торе. 1394 LD A,(23824) OR A RET ────────────────────────────────────────── Адрес 1399. Проверка количества стертых файлов. Установите 23825. Если там 0, то будет сообщение NO FILE, иначе O.K. 1399 LD A,(23825);берем количество стер- тых файлов OR A ;оно равно 0 ? JP Z,985 ;если да, то NO FILE JP 993 ;иначе O.K. продолжение следует ...
Other articles:
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 23 November