Привет,
Как ТР-ДОСе сделать overwrite файла на асме?
Привет,
Как ТР-ДОСе сделать overwrite файла на асме?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
См. VIRT, раздел Books, N 76. ZX-Spectrum & TR-DOS для пользователей и программистов - А.Ларченко, Н.Родионов'94.
Со страницы 190 и дальше.
Вкратце алгоритм такой:
1. Функция #13 - задать дескриптор файла. До этого заготовить 9 байт имя+тип файла в памяти.
2. Функция #0A - поиск файла по началу дескриптора. Получаем номер файла для
3. #08 - чтение дескриптора по номеру. Все байты #00..0F дескриптора в памяти.
4. Если файл всегда одинаковой длины (как часто бывает с блоком отгрузки в играх), этот шаг не нужен. Иначе сравниваем старшие части - (длину куска для перезаписи +1)/256 и занимаемое количество секторов (байт в позиции #0D в дескрипторе). Если новый кусок выходит больше - просто перезаписать не получиться. Большинство тогда просто стирает старый файл и создает новый, не делая никаких MOVE и не разбивая файл на два - это потеря места на дискете в ущерб надежности.
5. Если длина в секторах та же, из байтов дескриптора #0E и #0F берем сектор и дорожку файла на диске, и используем функцию #06 для записи блока секторов в это же место.
6. Если длина в секторах та же, а длина в байтах (двухбайтовое число в позиции #0B..#0C в дескрипторе) отличалась, то вообще говоря, для полной чистоты работы нужно после шага (5) заменить значение длины на новое в дескрипторе, после чего записать его под старым (запомненным ранее) номером.
7. Если длина в секторах меньше длины старого файла, очень не рекомендуется обойтись теми же мерами шагов (5) и (6), а следует после выполнения (5) и (6) пометить освободившиеся сектора (старая длина в секторах - новая длина в секторах) как удаленный файл (0 в байте #00 дескриптора) с любым именем, типом и значениями "старт/длина" (байты #01..#0C), но с правильной длиной в секторах и правильно рассчитанными "сектор/дорожкой" начала освободившихся секторов старого файла. А для этого такой новый дескриптор придется вписать НА ДИСК под номером сразу после или сразу перед дескриптором заменяемого файла (смотря какие сектора освобождаются - с конца старого файла или с начала соответственно, выбор не существенен). А для вписывания дескриптора в середину придется увеличить и полное количество файлов и количество удаленных файлов на диске (изменив дескриптор диска в секторе #08 дорожки #00), сдвинуть все дескрипторы файла после нашего файла на 1 номер вниз, и только тогда вписать наш дескриптор удаленного файла.
Одним словом, файл всегда одинаковой длины в секторах?
Если да, все довольно просто.
Если нет, то все довольно сложно.
Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
Власть людей сильнее, чем люди у власти.
Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)
Скрытый текст
Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
Мы все немного режем по дереву, а потом собираем корабли в бутылках.
Is it the same old story you are going to tell me
or is it the old story telling me and you we are the same?
http://www.sky.od.ua/~ptsk[свернуть]
Тогда только шаги (1), (2), (3), (5) из перечисленных выше. И, наверное, без 6, так как и длина файла в байтах, конечно одинаковая?
Код:; шаг 1 LD HL,<адрес 9 байт имени и типа файла> LD C,#13 CALL #3D13 ; шаг 2 LD A,9 LD (5D06),A LD C,#0A CALL #3D13 ; шаг 3 LD A,C INC C JR Z,ERROR LD C,#08 CALL #3D13 INC C DEC C JR NZ,ERROR ; шаг 5 LD DE,(5CEB) LD A,(5CEA) LD B,A LD C,06 LD A,255 LD HL,<адрес нового содержимого файла> CALL 3D13 INC C DEC C JR NZ,ERROR ... ; сюда переход, если перезапись не удалась ERROR: ...
Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
Власть людей сильнее, чем люди у власти.
Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)
Скрытый текст
Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
Мы все немного режем по дереву, а потом собираем корабли в бутылках.
Is it the same old story you are going to tell me
or is it the old story telling me and you we are the same?
http://www.sky.od.ua/~ptsk[свернуть]
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)