City
#35
04 декабря 1999 |
|
Ликбез - полный дизассемблер ПЗУ (часть 27).
┌─────────────────────────────────────────────────┐ │ ************* ЛИКБЕЗ ****************** │ └─────────────────────────────────────────────────┘ (c) П.Ю.Федин ╔═════════════════════════════════════════════════╗ ║ ║ ║ ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ ║ ║ ║ ║ TR-DOS 5.04T (5.03) ║ ║ ║ ║ ДЛЯ ПРОФЕССИОНАЛОВ, ║ ║ ║ ║ А ТАКЖЕ ДЛЯ ТЕХ, ║ ║ ║ ║ КТО ХОЧЕТ ИМИ СТАТЬ. ║ ║ ║ ╚═════════════════════════════════════════════════╝ пpодолжение Адрес 6053. Перемещение файла. Установите 23763, 23843, 23759, 23765 и 23767. 6053 LD A,(23763) ;перемещен весь файл ? OR A RET Z ;если да, то возврат PUSH HL ;сохранение HL LD HL,23843 ;буфера хватит на остаток ? SUB (HL) POP HL ;восстановление HL JR NC,6109 ;если буфера не хватит, то пере- мещаем часть файла LD A,(23763) ;берем количество оставшихся се- кторов LD B,A XOR A ;переместили все LD (23763),A 6074 PUSH BC ;сохранение количества перемеща- емых секторов LD HL,(23759);берем адрес рабочей области PUSH HL ;сохранение его LD DE,(23765);берем адрес части перемещаемого файла на старом месте CALL 7741 ;загрузка секторов LD HL,(23796);установка адреса следующей час- ти файла LD (23765),HL POP HL ;восстановление адреса рабочей области POP BC ;и количества перемещаемых сек- торов LD DE,(23767);берем адрес части перемещаемого файла на новом месте CALL 7757 ;запись секторов LD HL,(23796);установка адреса следующей час- ти файла LD (23767),HL JR 6053 ;повтор 6109 LD (23763),A ;установка количества оставшихся секторов PUSH HL ;сохранение HL LD HL,23843 ;берем длину рабочей области в секторах LD B,(HL) POP HL ;восстановление HL XOR A ;обнуление аккумулятора JR 6074 ;перемещение секторов ─────────────────────────────────────────────────── Адрес 6121. Загрузка в буфер сектора с описателем файла и перенос описателя. В регистре C- номер фай- ла, в A- направление перемещения (0 - в переменные, иначе - в прочитанный сектор). 6121 PUSH AF ;сохранение направления перемеще- ния LD HL,23756;первый сектор каталога - 0 LD (HL),0 LD A,C ;определение номера сектора с опи- сателем файла 6128 SUB 16 JR C,6135 INC (HL) JR 6128 6135 ADD A,16 ;берем номер описателя в секторе LD C,A PUSH BC ;сохраним его CALL 1004 ;загрузка в буфер сектора с описа- телем POP BC ;восстановление номера описателя в секторе POP AF ;и направление перемещения CALL 7332 ;определение адреса описателя фай- ла в буфере LD DE,23773;берем второй адрес для LDIR LD BC,16 ;берем длину описателя OR A ;установка направления перемещения JR Z,6157 EX DE,HL 6157 LDIR ;перенос описателя файла RET ;возврат ─────────────────────────────────────────────────── Адрес 6160. Выполнение команды VERIFY. Установите 23825 и 23611. Используется также с адресов: 6165 - выполнение команды LOAD. Установите 23825 и 23611; 6168 - выполнение команды LOAD, PEEK или POKE. Ус- тановите 23825, 23611 и 23824. 6160 LD A,255 ;верификация файла LD (23801),A 6165 CALL 6226 ;обнуление 23824 6168 CALL 6198 ;обработка параметров и загрузка файла CALL 7541 ;если идет проверка на синтаксис, то возврат LD A,255 ;выполняется команда LOAD LD (23824),A LD A,(23801);выполняется VERIFY ? CP 255 JP Z,993 ;если да, то O.K. LD A,(23781);расширение файла B ? CP "B" Внимание! Если была операция с одним сектором фай- ла, то надо выходить независимо от расширения. JP Z,298 ;если да, то обработка строки ав- тостарта JP 993 ;иначе O.K. пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября