City
#42
25 марта 2000 |
|
Ликбез - полный дизассемблер ПЗУ (часть 32).
╔═════════════════════════════════════════════════╗ ║.................................................║ ║..... .................. ..............║ ║.... @@@ ................ @@@@ ..............║ ║... @ @ ............... @ ..............║ ║.. @ @ ............... @ ................║ ║.. @ @ @ ║ ║.. @ @ @ @ @ @@ @@@@ @@@ @@@ ║ ║.. @ @ @ @ @ @ @ @ @ @ @ @ @ ║ ║.. @ @ @ @ @@@ @ @ @@ @ @ @ ║ ║ @ @ @ @ @ @ @ @@ @@@@ @ @ ║ ║ @ @ @ @ @ @@ @ @ @ @ @ @ @@ ║ ║ @@ @@ @@@ @@ @ @@ @@@@ @@@@ @ ║ ║ @@@ @ ║ ║........................................ @ @ ║ ║....................................... @ @ ║ ║........................................ @@@@ ║ ║.......................................... ║ ║.................................................║ ╚═════════════════════════════════════════════════╝ (c) П.Федин ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 5.04T (5.03) ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ КТО ХОЧЕТ ИМИ СТАТЬ ~~~~~~~~~~~~~~~~~~~ пpодолжение 6925 CALL 7541 ;если проверка на синтаксис, то возврат CALL 7564 ;берем текущий символ LD HL,23781 CP 228 ;это DATA ? JR Z,6956 ;если да, то запись массива CP 13 ;это ENTER ? JP NZ,7450 ;если нет, то ошибка LD (HL),"B" ;расширение B CALL 6846 ;проверка наличия такого файла и свободного места в каталоге CALL 7708 ;удаление из командной строки пятибайтных чисел 6951 CALL 7134 ;установка начала и длины файла JP 6995 ;запись файла 6956 LD (HL),"D" ;расширение D CALL 6846 ;проверка наличия файла и места в каталоге CALL 7183 ;установка начала и длины файла JR NC,6995 ;если все в порядке, то запись файла JP C,7450 ;иначе ошибка 6969 CALL 7653 ;принятие начала и длины файла LD HL,(23769);установка начала файла LD (23767),HL LD HL,(23771);установка длины файла LD (23769),HL 6984 CALL 7541 ;если проверка на синтаксис, то возврат LD A,"C" ;расширение C LD (23871),A CALL 6846 ;проверка наличия файла и места в каталоге 6995 CALL 7001 ;запись файла JP 1385 ;запись информации о нем ─────────────────────────────────────────────────── Адрес 7001. Запись файла. Установите 23761, 23767, 23769 и 23771, а в буфер загрузите сектор 8 дорож- ки 0. 7001 LD HL,(23767);установка начала файла LD (23782),HL EX DE,HL ;переброска его в DE LD HL,(23769);берем длину файла LD A,L ;она равна 0 ? OR H JP Z,7450 ;если да, то ошибка LD A,L ;вычисление длины файла в секто- рах OR A JR Z,7021 INC H 7021 LD A,H ;установка длины файла в секто- рах LD (23786),A LD E,A ;вычисление нового количества свободных секторов LD D,0 LD HL,(24074) SBC HL,DE JP C,7237 ;если на диске нет места, то ошибка PUSH HL ;сохранение нового количества свободных секторов LD HL,(23641);добавление к программе на бей- сике байта 170 LD (HL),170 INC HL LD DE,(23761);и номера строки автостарта LD (HL),E INC HL LD (HL),D LD HL,(23771);установка длины файла LD (23784),HL LD HL,(24070);установка адреса файла на дис- ке LD (23787),HL EX DE,HL ;переброска его в DE LD HL,(23782);берем начало файла LD A,(23786) ;берем его длину в секторах LD B,A CALL 7757 ;запись файла LD HL,(23796);берем адрес свободного прост- ранства диска PUSH HL ;сохраняем его CALL 1021 ;загрузка в буфер сектора 8 до- рожки 0 POP HL ;восстановление адреса свободно- го места на диске LD (24070),HL;установка его POP HL ;восстановление количества сво- бодных секторов LD (24074),HL;установка его LD HL,(24073);берем номер файла LD A,(HL) LD (23838),A ;установка его INC (HL) ;записали еще 1 файл PUSH HL ;сохранение адреса с кол-вом файлов на диске CALL 7747 ;перезапись сектора 8 дорожки 0 POP HL ;восстановление адреса с кол- вом файлов LD C,(HL) ;берем номер записанного файла DEC C LD A,(23781) ;расширение файла B ? CP "B" CALL Z,7112 ;если да, то установка длины программы без переменных RET ;возврат пpодолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября