|
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одолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 17 ноября