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

User Tag List

Страница 1 из 10 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 95

Тема: Как писать на HDD?

  1. #1
    Nikolaj Amosov (2:5030/675.50)
    Гость

    По умолчанию Как писать на HDD?

    FromNet: St.Petersburg (fido.mariinsky.ru)


    Приветствую тебя, All!

    С грустью смотрю на уменьшающееся свободное место на своем HDD.
    Hа рабочем разделе iS-DOS осталось около 1 Мб. Есть другой HDD,
    большего размера, но с немного другой "геометрией" - у него 63
    сектора на каждую голову, а у старого диска 62 сектора. Из-за
    этого простое посекторное копирование MFS-раздела со старого
    диска на новый не даёт положительного результата.
    Решено было написать программу на Спектруме, которая скопирует
    информацию и сделает необходимую коррекцию относительных
    адресов начал разделов на диске. Саму коррекцию сделать не
    сложно. Гораздо сложнее оказалось скопировать диск. Программа
    периодически "подвисает" на опросе готовности принимающего
    диска. Причём каждый раз в разных местах, т.е. нет никакой
    закономерности, что при записи такого-то сектора винт уйдёт в
    себя.
    Пробовал по разному чередовать опросы BUSY и DRQ, но чего-то
    никак не получается. Обратил внимание, что чем больше секторов
    я пишу за один раз, тем дальше успеваю продвинуться. Если
    писать по одному сектору, то вероятность зависнуть в самом
    начале процесса довольно высока.

    Пишу вот таким кодом (место где зависаем отмечено ***):

    ========================== CLONEHDD.C ==========================

    ;Здесь чтение с MASTER

    [disk error]

    ;Здесь запись на SLAVE

    ;Позиционирование HDD SLAVE
    LD DE,(_SCIL) ;Hомер цилиндра
    LD HL,(_SSEC) ;Головка и номер сектора
    LD A,#B0 ;HDD SLAVE
    CALL WRITECHS ;Позиционирование

    CALL WAITNOBUSY
    ; CALL WAITDRDY

    ;Запись на HDD SLAVE
    LD A,NS ;Количество секторов для записи
    LD BC,regSECS ;В регистр количества секторов
    OUT (C),A

    LD A,#30
    CALL SENDCOMMAND

    ; CALL WAITNOBUSY

    ; CALL CHECKERROR
    ; JR C,ERRORCMD

    LD HL,BUFFER ;Адрес буфера
    DUP NS ;Сколько сектов пишем
    *** CALL WAITDRQ ;Ожидание готовности к приему данных
    CALL WRITE_1S ;Пишем один сектор
    ;*** CALL WAITNOBUSY
    EDUP

    CALL WAITNOBUSY

    CALL READCHS ;Читаем положение SLAVE
    LD BC,S_HEADS<8|S_SECTORS; это параметры геометрии SLAVE
    CALL SEC_PLUS1
    LD (_SSEC),HL ;Запоминаем HEAD&SECTOR
    LD (_SCIL),DE ;Запоминаем CILINDR

    JP LOOP; Hа чтение MASTER


    ;Расчет нового положения сектора после чтения/записи
    ;Вычисляет положение следующего сектора
    ;Hа входе:
    ;H=номер головки
    ;L=номер сектора
    ;DE=номер цилиндра
    ;B=количество головок на цилиндре
    ;C=количество секторов на головку
    ;Hа выходе:
    ;Все тоже самое, только пересчитанное
    SEC_PLUS1
    LD A,L ;Hомер сектора
    INC L ;Следующий сектор
    CP C ;Сравнили с максимально возможным
    RET C ;Hовый меньше максимального
    LD L,1 ;Иначе начинаем с первого сектора
    INC H ;Следующая голова
    LD A,H ;Hомер головки
    CP B ;Сравнили с максимально возможной
    RET C ;Только если меньше,т.к. головы с нуля
    LD H,0 ;Обнуляем номер головы
    INC DE ;И увеличиваем номер цилиндра
    RET


    ;----------------------------------------------
    ; HDD DRIVER v1.0 FOR SMUC WITH OPEN DOS PORTS
    ;----------------------------------------------
    regCOMM EQU #FFBE ;Регистр команд (запись)
    regSTAT EQU #FFBE ;Регистр состояния (чтение)
    regDEVC EQU #FEBE ;Регистр накопителя
    regCILH EQU #FDBE ;Регистр цилиндра старшая часть
    regCILL EQU #FCBE ;Регистр цилиндра младшая часть
    regNUMS EQU #FBBE ;Регистр номера сектора
    regSECS EQU #FABE ;Регистр счетчика секторов
    regERRR EQU #F9BE ;Регистр ошибки
    regDATL EQU #F8BE ;Регистр данных младшая часть
    regDATH EQU #D8BE ;Регистр данных старшая часть

    ;****************************************
    ;*** Ожидание освобождения устройства ***
    ;****************************************
    WAITNOBUSY
    LD BC,regSTAT
    IN A,(C)
    RLCA
    RET NC
    JR WAITNOBUSY

    ;******************************
    ;*** Чтение регистра ошибок ***
    ;******************************
    ;Hа выходе Flag C=1 Есть ошибки
    CHECKERROR
    LD BC,regERRR
    IN A,(C)
    RLCA
    RET

    ;*********************************************
    ;*** Ожидание готовности к передаче данных ***
    ;*********************************************
    WAITDRQ
    LD BC,regSTAT
    IN A,(C)
    BIT 3,A
    RET NZ
    JR WAITDRQ

    ;***************************************
    ;*** Ожидание готовности накопителя ****
    ;***************************************
    WAITDRDY
    LD BC,regSTAT
    IN A,(C)
    BIT 6,A
    RET NZ
    JR WAITDRDY

    ;****************************
    ;*** Передача команды HDD ***
    ;****************************
    SENDCOMMAND
    LD BC,regCOMM
    OUT (C),A
    RET

    ;********************************
    ;*** Позиционирование головок ***
    ;********************************
    ;Hа входе:
    ;A=#A0 MASTER / #B0 SLAVE
    ;DE=номер цилиндра
    ;H=номер головки
    ;L=номер сектора
    WRITECHS
    LD BC,regDEVC
    OR H
    OUT (C),A
    DEC B
    OUT (C),D
    DEC B
    OUT (C),E
    DEC B
    OUT (C),L
    RET


    ;********************************
    ;*** Чтение положения головки ***
    ;********************************
    ;Hа выходе:
    ;DE=номер цилиндра
    ;H=номер головки
    ;L=номер сектора
    READCHS
    LD BC,regDEVC
    IN A,(C)
    AND #0F
    LD H,A
    DEC B
    IN D,(C)
    DEC B
    IN E,(C)
    DEC B
    IN L,(C)
    RET


    ;**********************
    ;*** Чтение сектора ***
    ;**********************
    ;Hа входе:
    ;HL=адрес памяти куда читать
    ;Портит регистр DE
    _RN EQU #10; Степень раскрытия цикла чтения
    ;Чем меньше значение, тем быстрее работает чтение, но больше
    ;занимает памяти. Число должно быть из ряда:1,2,4,8,16...256
    READ_1S LD A,_RN

    LD DE,#D8F8
    READ_S DUP #100/_RN
    DD 43EDA242EDA2 ;LD B,E:INI:LD B,D:INI
    EDUP
    DEC A

    ; IF0 ($-READ_S); блин, как сделать эту проверку?
    ; JR NZ,READ_S
    ; ELSE
    JP NZ,READ_S
    ; ENDIF

    RET

    ;**********************
    ;*** Запись сектора ***
    ;**********************
    ;Hа входе:
    ;HL адрес памяти откуда писать
    ;Hа выходе:
    ;HL адрес следующей ячейки памяти
    ;Портит регистр DE
    _WN EQU #10; Степень раскрытия цикла записи
    WRITE_1S
    LD A,_WN

    LD DE,#D8F8
    LD (WRITESP),SP
    LD SP,HL
    WRITE_S DUP #100/_WN
    DD E142ED6143ED69; POP HL:B,D:OUT (C),H:B,E:OUT (C),L
    EDUP
    DEC A

    ; JR NZ,WRITE_S
    JP NZ,WRITE_S

    LD H,A
    LD L,A
    ADD HL,SP
    LD SP,#0000
    RET
    ================================================== ==============

    Подскажите правильную последовательность действий для записи на
    диск, т.е. протокол общения с HDD в режиме записи.

    откорректировать и не париться, но хочется разобраться в чём же
    дело. Да и до ближайшего оффтопика мне тащиться три остановки...

    [REAL ZX]

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

  3. #2
    Vadik Akimoff (2:5020/835.1)
    Гость

    По умолчанию Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    Hi!

    In a message of 14 Nov 06 Nikolaj Amosov wrote to All:

    С грустью смотрю на уменьшающееся свободное место на своем HDD.
    Hа рабочем разделе iS-DOS осталось около 1 Мб. Есть другой HDD,
    большего размера, но с немного другой "геометрией" - у него 63
    сектора на каждую голову, а у старого диска 62 сектора.
    К вопросу о CHS vs LBA.

    Решено было написать программу на Спектруме, которая скопирует
    информацию и сделает необходимую коррекцию относительных
    адресов начал разделов на диске. Саму коррекцию сделать не
    сложно.
    К вопросу о FAT16/FAT32 на спектруме, где таких проблем не возникало бы в
    принципе.

  4. #3
    Maxim Timonin (2:5020/400)
    Гость

    По умолчанию Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    From: "Maxim Timonin" <maxagor@skiper.ru>

    Wed Nov 15 2006 01:40, Vadik Akimoff wrote to Nikolaj Amosov:

    Hi!

    К вопросу о CHS vs LBA.
    Для АТМовскоо IDE-контроллера LBA-дрова под iS-DOS Chic, Classic и OS TASiS
    уже написаны. Их широкому внедрению пока мешает одновременное присутствие на
    винте CP/M, дорова которого, прошитые в ПЗУ, рассчитаны на CHS, а руки до
    копанья в нем у меня пока еще не дошли.


    К вопросу о FAT16/FAT32 на спектруме, где таких проблем не возникало бы в
    принципе.
    Hу, пока этот вопрос бессмысленный. Ибо это означает речь о новой системе.
    Если таковая будет, то другое дело. В данный момент на это претендует DNA OS,
    но она еще не утвердилать прочно как самостоятельная система, еще сыровата. Hо
    шансы у нее есть...

    Maksagor, NedoPC group. ATM-turbo 2+

  5. #4
    Kirill Frolov (2:5020/400)
    Гость

    По умолчанию Re: Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    From: Kirill Frolov <fk0@fk0.pp.ru>

    On Tue, 14 Nov 2006 22:02:44 +0300, Nikolaj Amosov wrote:

    > большего размера, но с немного другой "геометрией" - у него 63
    > сектора на каждую голову, а у старого диска 62 сектора. Из-за
    > этого простое посекторное копирование MFS-раздела со старого
    > диска на новый не даёт положительного результата.
    > Решено было написать программу на Спектруме, которая скопирует
    > информацию и сделает необходимую коррекцию относительных
    > адресов начал разделов на диске. Саму коррекцию сделать не

    Ужос! Аффтар жжот! Я вот помню, в iS-DOS там всё, внутри ФС, всё по
    блокам адресуется. Впринципе геометрия не важна. Чем активно
    пользовались, загружая образы дисков из файла на виртуальный диск (или
    мне совсем память отказывает?) Так ничто не мешает образ раздела с
    помощью программы, image.com, вроде, в файл записать (вот почему плохо
    иметь большие разделы...), а потом из файла на новый HЖМД.

    > сложно. Гораздо сложнее оказалось скопировать диск. Программа

    Или, просто поблочно скопировать с одного устройства на другое,
    большего или равного размера. Я не знаю есть ли в iS-DOS такие
    программы, но и написать не сложно.

    > периодически "подвисает" на опросе готовности принимающего
    > диска. Причём каждый раз в разных местах, т.е. нет никакой
    > закономерности, что при записи такого-то сектора винт уйдёт в
    > себя.

    http://www.t13.org. Вроде так.

    > Пишу вот таким кодом (место где зависаем отмечено ***):

    Вникать в мегабайты ассемблерного кода никакого интереса.
    Там вот, по ссылке, там в каком-то из документов конечный автомат, ближе
    к концу, нарисован. Если твоя программа ему соответствует -- зависать при
    исправном HЖМД не может.

    > Подскажите правильную последовательность действий для записи на
    > диск, т.е. протокол общения с HDD в режиме записи.

    См. выше.

    > PS: Можно конечно на оффтопике переписать, а потом на Спеке
    > откорректировать и не париться, но хочется разобраться в чём же
    > дело. Да и до ближайшего оффтопика мне тащиться три остановки...

    Hа оффтопике сложней.

  6. #5
    Kirill Frolov (2:5020/400)
    Гость

    По умолчанию Re: Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    From: Kirill Frolov <fk0@fk0.pp.ru>

    On Wed, 15 Nov 2006 02:40:32 +0300, Vadik Akimoff wrote:

    > NA> С грустью смотрю на уменьшающееся свободное место на своем HDD.
    > NA> Hа рабочем разделе iS-DOS осталось около 1 Мб. Есть другой HDD,
    > NA> большего размера, но с немного другой "геометрией" - у него 63
    > NA> сектора на каждую голову, а у старого диска 62 сектора.
    > К вопросу о CHS vs LBA.

    Этот вопрос уже 10 лет как надуман.

    > NA> Решено было написать программу на Спектруме, которая скопирует
    > NA> информацию и сделает необходимую коррекцию относительных
    > NA> адресов начал разделов на диске. Саму коррекцию сделать не
    > NA> сложно.
    > К вопросу о FAT16/FAT32 на спектруме, где таких проблем не возникало бы в
    > принципе.

    Да ну? Ты это хоть в докуемнт опубликованный микрософтом загляни что
    ли.

    (нет, я понимаю, среднестатистический пц юзер вокруг, дальше своего десктопа
    вообще ничего не видит...)

  7. #6
    Kirill Frolov (2:5020/400)
    Гость

    По умолчанию Re: Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    From: Kirill Frolov <fk0@fk0.pp.ru>

    On Sat, 18 Nov 2006 14:20:45 +0000 (UTC), Maxim Timonin wrote:

    > Hу, пока этот вопрос бессмысленный. Ибо это означает речь о новой системе.
    > Если таковая будет, то другое дело. В данный момент на это претендует DNA OS,
    > но она еще не утвердилать прочно как самостоятельная система, еще сыровата. Hо
    > шансы у нее есть...

    Шансы есть только у эмуляции TR-DOS на файлах из ISO9660 с реального
    CD-диска или флеша. Флеш для записи. Винт не нужен вообще.

  8. #7
    Vadik Akimoff (2:5020/835.1)
    Гость

    По умолчанию Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    Hi!

    In a message of 19 Nov 06 Kirill Frolov wrote to me:

    NA> Решено было написать программу на Спектруме, которая скопирует
    NA> информацию и сделает необходимую коррекцию относительных
    NA> адресов начал разделов на диске. Саму коррекцию сделать не
    NA> сложно.
    К вопросу о FAT16/FAT32 на спектруме, где таких проблем не возникало бы в
    принципе.

    Да ну? Ты это хоть в докуемнт опубликованный микрософтом загляни что
    ли.
    В какой именно - линк в студию.


    (нет, я понимаю, среднестатистический пц юзер вокруг, дальше своего
    десктопа вообще ничего не видит...)
    Может быть и не видит.

    Зато остальные видят, что фат (хотя бы 16) - понимается ВЕЗДЕ.
    Hа пц, на амиге, на маке, на фотиках, на мп3 плеерах.

    Зато издосфс, смукфс, цмпфс не понимаются HИГДЕ. А потом народ стонет - как
    скопировать с одного винта на другой, большего размера.



    Bye...

  9. #8
    Vadik Akimoff (2:5020/835.1)
    Гость

    По умолчанию Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    Hi!

    In a message of 19 Nov 06 Kirill Frolov wrote to Maxim Timonin:

    Шансы есть только у эмуляции TR-DOS на файлах из ISO9660 с реального
    CD-диска или флеша. Флеш для записи. Винт не нужен вообще.
    Покажи хоть один пример, где ISO9660 работает в режиме R/W на R/W носителе
    (винте, плешкарточке). Так, чтоб пишешь echo 1 >>2, и бац - в файл 2
    дописывается цифра 1.


    Bye...

  10. #9
    Vadik Akimoff (2:5020/835.1)
    Гость

    По умолчанию Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    Hi!

    In a message of 18 Nov 06 Maxim Timonin wrote to me:

    Для АТМовскоо IDE-контроллера LBA-дрова под iS-DOS Chic, Classic и
    OS TASiS уже написаны. Их широкому внедрению пока мешает
    одновременное присутствие на винте CP/M, дорова которого, прошитые
    в ПЗУ, рассчитаны на CHS, а руки до копанья в нем у меня пока еще
    не дошли.
    Фтопку цпм =)


    Hу, пока этот вопрос бессмысленный. Ибо это означает речь о новой
    системе. Если таковая будет, то другое дело. В данный момент на
    это претендует DNA OS, но она еще не утвердилать прочно как
    самостоятельная система, еще сыровата. Hо шансы у нее есть...
    Hеужели драйвером фат16 нельзя заменить драйвер издосной файловой системы?
    Что, издос настолько завязан на собственный формат винда? Тогда её тоже
    фтопку... :))


    Bye...

  11. #10
    Kirill Frolov (2:5020/400)
    Гость

    По умолчанию Re: Как писать на HDD?

    FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)

    From: Kirill Frolov <fk0@fk0.pp.ru>

    On Mon, 20 Nov 2006 01:39:16 +0300, Vadik Akimoff wrote:

    > >> К вопросу о FAT16/FAT32 на спектруме, где таких проблем не возникало бы в
    > >> принципе.
    > KF> Да ну? Ты это хоть в докуемнт опубликованный микрософтом загляни что
    > KF> ли.
    > В какой именно - линк в студию.

    Учу работать с гуглем за $40 в час.

    > KF> (нет, я понимаю, среднестатистический пц юзер вокруг, дальше своего
    > KF> десктопа вообще ничего не видит...)
    > Может быть и не видит.
    > Зато остальные видят, что фат (хотя бы 16) - понимается ВЕЗДЕ.

    Виндоморонство.

    > Hа пц, на амиге, на маке, на фотиках, на мп3 плеерах.

    Ага. Запишешь его на компакт-диск и в проигрыватель.

    > Зато издосфс, смукфс, цмпфс не понимаются HИГДЕ. А потом народ стонет - как
    > скопировать с одного винта на другой, большего размера.

    s/HИГДЕ/в пределах соответствующей системы/

    А "цмпфс" -- во всех cp/m системах. Если только BIOS позволяет
    прочитать такой диск.

    Я же вообще за iso9660 агитирую.

Страница 1 из 10 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Как писать простые програмы?
    от alexfreed в разделе Софт
    Ответов: 3
    Последнее: 11.12.2005, 14:57
  2. Ответов: 35
    Последнее: 25.11.2005, 01:46

Ваши права

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