МФК: Колесов Александр из Ростова на Дону советует всем, кто пользуется Мини-драйвером дисковых операций (ZX-РЕВЮ 95/4), внести в него несколько изменений.
форум
КОРР: Предлагаю доработку, позволяющую получить рело-цируемый вариант Мини-драйвера.
Для начала строки 25, 36 и 51 (здесь и далее ссылки на исходный вариант А.Алексеева) переделываем следующим образом: 25 CALL #007С CD 7С 00 JR DOS 18 64
51 МЗ: CALL #007С CD 7С 00 JR DOS 18 2Е Как видим, все сводится к замене команды CALL DOS на CALL #007С и относительному переходу на метку DOS.
Далее, ввиду того, что после внесенных изменений длина программы увеличилась на шесть байтов, исправляем следующие строки:
63 М4: DJNZ L3 ЮСЕ
67 DJNZ L1 10 ВО
И, наконец, самое главное. Переделываем программу (это еще шесть дополнительных байтов), начиная со строки 78 (метка DOS):
SP SP
(SP).HL
HL
HL
(SP).HL IX
#3D2F
3B 3B E3 23 23 E3
DD E5 C3 2F 3D
DEC DEC EX INC INC EX
PUSH JP END
Из всего вышесказанного ясно, что изменения каснулись только способа вызова подпрограмм из ПЗУ TR-DOS. Теперь коментарии.
После того, как отработает всем известная (см. например, ZX РЕВЮ 95/1) конструкция CALL #007С, по команде JR DOS попадаем на метку DOS и получаем на стеке адрес следующей за CALL #007С команды, в нашем случае -это JR DOS:
DEC SP DEC SP Помещаем содержимое вершины стека (т.а адрес возврата) в HL, a HL сохраняем на стеке:
EX (SP).HL Увеличиваем значение адреса возврата, чтобы после выхода из подпрограммы ПЗУ TR-DOS "проскочить" JR DOS: INC HL INC HL Возвращаем на стек новый адрес возврата и восстанавливаем HL:
EX (SP),HL А теперь, как обычно, помещаем на стек адрес подпрограммы из ПЗУ TR-DOS и переходим на ее исполнение: PUSH IX JP #3D2F Вот и все. Смело набирайте и пользуйтесь: пашет как зверь!