Важная информация

User Tag List

Показано с 1 по 4 из 4

Тема: Как ТР-ДОСе сделать overwrite файла на асме?

  1. #1
    Activist
    Регистрация
    20.02.2008
    Адрес
    Siauliai, Lithuania
    Сообщений
    367
    Спасибо Благодарностей отдано 
    42
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Exclamation Как ТР-ДОСе сделать overwrite файла на асме?

    Привет,

    Как ТР-ДОСе сделать overwrite файла на асме?

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran Аватар для TomCaT
    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,792
    Спасибо Благодарностей отдано 
    53
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    См. 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
    [свернуть]


  4. #3
    Activist
    Регистрация
    20.02.2008
    Адрес
    Siauliai, Lithuania
    Сообщений
    367
    Спасибо Благодарностей отдано 
    42
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от TomCaT Посмотреть сообщение
    См. 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 номер вниз, и только тогда вписать наш дескриптор удаленного файла.

    Одним словом, файл всегда одинаковой длины в секторах?

    Если да, все довольно просто.

    Если нет, то все довольно сложно.
    да файл всегда одинаковой длины в секторах

  5. #4
    Veteran Аватар для TomCaT
    Регистрация
    25.06.2005
    Адрес
    Одесса
    Сообщений
    1,792
    Спасибо Благодарностей отдано 
    53
    Спасибо Благодарностей получено 
    46
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тогда только шаги (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)

Похожие темы

  1. Попиксельный скролл на Асме
    от helcril в разделе Для начинающих
    Ответов: 8
    Последнее: 17.12.2009, 09:31
  2. Архивирование wav файла
    от p@lex в разделе Музыка
    Ответов: 4
    Последнее: 09.02.2008, 00:23
  3. Процедуры на асме (умножение деления)
    от gres8 в разделе Программирование
    Ответов: 3
    Последнее: 25.01.2007, 10:26
  4. Ответов: 0
    Последнее: 18.08.2006, 22:40
  5. Вопрос о ДОСе, 5CF4
    от TomCaT в разделе Программирование
    Ответов: 4
    Последнее: 02.08.2006, 10:19

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •