City
#52
24 февраля 2001 |
|
Ликбез - ПОЛHОЕ ОПИСАHИЕ + ПОЛHЫЙ ДИЗАССЕМБЛЕP ПЗУ TR-DOS 5.04 (5.03)
░░▓▓ ██▓▓░░░░░▓▓█▓░░ ▒▒▒▒▒▒▒▓▓▒▒▒▒▒▒▒▒▒▓████▓▓██▓▓██████▓▓█████▒░░░░░ ░░░░▒▒▓▓▓▓▓▓▓█████▓▓███████▓████▓▓▓██▓▓█▓▓▓▓▓▓▓▓███▒ ░▓██████▓██████▓███▓▓░░██████▓░███▓███████▓██▓█▓▓▒░ ▓▓▓▓▓▓▓█▓▓▓█▓██▓▓████░░████████░█████ ▒▒█████▓▓▓▓██████▓█ ░▒▓▓▓▓█▓█████▓▓ ███▓▓▓▓█░▓▓▓███▓▒ ▒▓▓███▓▓██▓▓▓▓██░░▒▒▓▓▓ ░▒▓▓▓▓████▓▓ ▓░ ░████▓█░░██▓▓██▒ ░ ░██▓▓█▓▓▓▓███▓ ░█▒ ░░░▒███████▓ █▓░ █▓▓███▓▓██████▓▓▒ ░ ░████▓▓▒▓▓█▓ ▓█ ▓▓▓ ▓██▓▓█▓▓▓█▓ ▒▓░ ▓▓ ▓█▓ ▓█ ▓▒ ▓▓▒ ▒▓▒ ░█▒▓▓ ▓░▓▓ ░▒▒▒▓▓▓░░█▒ ▓▓░ ▒ ░█▓ █▓ ▒▓█▓ ░▓ ░ ░▓ ░▒█░▓▓ ▓▓▓▓ ▓███▓░░▒ ▓█▓ ▓░ ▓░ ░▓ ▒ ░██░ ▒▓ ░ ░█ ▓▒ █▓▓▓ ▒▒▓▓▓ ▓█▓░ ▓█░ ░ █ ▓▒ ░▓▓ ░▒ ▒▓▓▓▒░ ░▓▓▓█▓ ▒██████▓░░▓▓█▓ ▓███░▓░█░░▓█▓▓▓█░░░▓██▓░░▓▓▓▓ ░░██░░░▓▓▓▒▓ ░░░░░▒▓▓▓▓▓██░░▓▓▓▓▓▓▓▓▓███████▓▓███▓▓█████▓▓▓░░▓▓▓░█▓▓▓▓▒▒▒░ ░▒▒▒▓▓▓▓▓███░░░██▓▓▓██░░▓██▓▓▓▓▓▓▓░░░▓▓▓▓▓▓▓███░▓▓▓ ░▓████▓▓█████▓▓▓███████▓▓████▓▓▓░░▓█▓▓▓▓▓▓▓▓▒▒▒░░ ░░ ░░▒░▒▒▒░▒▒░░░▒░▒▓▓▒▒▒░▒▒░▒░░░░░░░░▓▓▓░░ (c) П.Федин ПОЛНОЕ ОПИСАНИЕ + ПОЛНЫЙ ДИЗАССЕМБЛЕР ПЗУ TR-DOS 5.04 (5.03) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ДЛЯ ПРОФЕССИОНАЛОВ, А ТАКЖЕ ДЛЯ ТЕХ, КТО ХОЧЕТ ИМИ СТАТЬ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ продолжение LD C,127 ;адрес регистра данных LD A,E ;установка номера дорожки OUT (63),A LD HL,(23784);берем адрес таблицы секторов для проверки 8330 LD B,3 ;3 попытки LD A,(HL) ;берем номер сектора из таблицы OUT (95),A ;установка сектора PUSH HL ;сохранение адреса таблицы секторов 8336 DI ;запрет прерываний LD A,128 ;чтение сектора OUT (31),A PUSH BC ;сохранение количества попыток CALL 16357 ;чтение данных по адресу из HL (в пзу, не страшно) IN A,(31) ;все в порядке ? AND 127 POP BC ;восстановление счетчика попыток JR Z,8358 ;если все в порядке, то следующий сектор DJNZ 8336 ;следующая попытка LD HL,23766 ;есть 1 битый сектор INC (HL) 8358 POP HL ;восстановление адреса таблицы секторов LD A,(HL) ;берем номер текущего сектора INC HL ;берем адрес номера следующего сектора CP 1 ;конец таблицы ? JR NZ,8330 ;если нет, то повтор EI ;разрешение прерываний RET ;возврат ──────────────────────────────────────────────────────────────── Адрес 8367. Запись байта 1 раз. В регистр D поместите байт, в C - 127 и выдайте команду записи на вг-93. Используется также с адреса 8369 (запись байта несколько раз; все для 8367 плюс в B количество выдач). 8367 LD B,1 ;запись 1 раз 8369 IN A,(255);ожидание DRQ или INTRQ AND 192 JR Z,8369 RET M ;если поступил INTRQ, то возврат OUT (C),D ;выдача байта DJNZ 8369 ;повтор до конца RET ;возврат ──────────────────────────────────────────────────────────────── Адрес 8381. Форматирование диска. Установите 23770, 23767, 23782 и 23784. 8381 LD HL,23767 ;берем число форматируемых дорожек LD B,(HL) XOR A ;дорожки проверять INC HL LD (HL),A LD E,255 ;начнем с дорожки 0 PUSH BC ;сохранение количества дорожек 8390 INC E ;следующая дорожка LD A,E LD B,27 ;позиционирование CALL 15940 CALL 8171 ;выбор верхней стороны диска CALL 13021 ;печать номера дорожки и форматирование ее LD A,(23770);берем флаг количества сторон CP 128 ;форматировать 2 стороны ? JR NZ,8417 ;если да, то CALL 8182 ;выбор нижней стороны диска CALL 13071 ;печать номера дорожки и форматирование ее 8417 POP BC ;восстановление количества дорожек DJNZ 8390 ;если еще не все, то повтор RET ;возврат ──────────────────────────────────────────────────────────────── Адрес 8421. Удаление буфера с изменением памяти. На входе уста- новите переменные 23734, 23800, 23820 и 23832. Выход: в 23832 записывается 255, а если в 23820 выл 0, то туда также засылается 255. Используется также с адреса 8433 (изменение памяти, работа- ет только с 23734 и 23832). 8421 PUSH AF ;сохранение AF LD A,(23800);ничего не делать ? CP 255 JR Z,8476 ;если да, то возврат POP AF ;восстановление AF CALL 10608 ;удаление буфера 8433 PUSH AF ;сохранение AF LD A,(23734);изменение разрешено ? CP 244 JR Z,8476 ;если нет, то возврат XOR A LD HL,23832 ;подтверждение есть ? OR (HL) LD (HL),255 ;в следующий раз подтверждение будет JR Z,8476 ;если его не было, то возврат LD A,(23820);буфер есть ? OR A LD HL,23747 ;начало первого блока LD DE,23859 ;начало второго блока JR NZ,8465 ;если есть буфер, то второй блок смещен на 257 LD DE,24116 ;байтов 8465 LD B,45 ;длина блоков - 45 байтов 8467 LD C,(HL) ;меняем блоки местами LD A,(DE) LD (HL),A LD A,C LD (DE),A INC HL INC DE DJNZ 8467 8476 POP AF ;восстановление AF RET ;возврат ──────────────────────────────────────────────────────────────── Адрес 8478. Очистка буфера редактора. 8478 LD HL,(23641);берем адрес буфера редактора LD (HL),13 ;ENTER LD (23643),HL;установка курсора INC HL ;конец области LD (HL),128 RET ;возврат ──────────────────────────────────────────────────────────────── Адрес 8490. Восстановление командной строки. Установите 23840. 8490 LD DE,(23641);символы переносить в буфер редактора LD HL,23840 ;из 23840 CALL 688 ;перенос символов RET ;возврат продолжение следует ...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября