User Tag List

Страница 8 из 38 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя
Показано с 71 по 80 из 371

Тема: Винчестер УКНЦ

  1. #71

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,048
    Спасибо Благодарностей отдано 
    1,141
    Спасибо Благодарностей получено 
    1,460
    Поблагодарили
    520 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    При загрузке ПЗУшкой от "Электронных работ" (трасса записи в порты винчестера):

    HDD Write 1f4 <-- 0xffff
    HDD Write 1f4 <-- 0xff00
    HDD Write 1f4 <-- 0xffff
    HDD Write 1f4 <-- 0xff00
    HDD Write 1f6 <-- 0xff00
    HDD Write 1f5 <-- 0xff00
    HDD Write 1f4 <-- 0xff00
    HDD Write 1f3 <-- 0xff01
    HDD Write 1f2 <-- 0xff01
    HDD Write 1f7 <-- 0x0020
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=1, SC=1
    HDD Write 1f2 <-- 0xf522
    HDD Write 1f6 <-- 0x0009
    HDD Read sector complete
    HDD Write 1f7 <-- 0x0091
    HDD COMMAND 91 (SET CONFIG): H=9, SC=33

    Вот здесь непонятка -- получается что сначала задаются параметры следующей команды, но затем завершается передача сектора, что приводит к декременту sector_count (SC, порт 1F2). В результате команда 91h получает параметр SC=33, что конечно неверно и в дальнейшем приводит к ошибкам позиционирования.
    Либо я тут неправильно понимаю логику SC и он должен уменьшаться до завершения передачи данных сектора -- но неясно в какой момент.

    Если быть точным, то установка параметров команды 91h происходит сразу же после чтения первых двух байт сектора:
    HDD Read 1f7 0xffd0
    HDD Read 1f7 0xffd0
    HDD Read 1f7 0xff58 ; Снят сигнал BUSY
    HDD Read 1f7 0xff58
    HDD Read 1f0 0xf5dd ; Прочитаны первые два байта 1-го сектора
    HDD Write 1f2 <-- 0xf522 ; Установка параметров команды 91h
    HDD Write 1f6 <-- 0x0009
    HDD Read 1f0 0x5d4d
    HDD Read 1f0 0x5d4d

    UPD: В общем, сделал пока декремент счётчика непосредственно перед началом чтения -- вроде как работает.

    Сейчас уже загружает ряд блоков, но в итоге всё равно выпадает в СТОП:

    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=1, SC=1
    HDD COMMAND 91 (SET CONFIG): H=9, SC=34
    ; Тут выбор раздела 0
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=2, SC=1 ; 0-й блок тома: начальный загрузчик
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=4, SC=4 ; 2-5 блоки: загрузчик монитора
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=8, SC=2 ; 6-7 блоки: каталог
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=10, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=12, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=14, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=16, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=23, SC=1
    HDD COMMAND 20 (READ MULT): C=0, H=5, SN=27, SC=1
    HDD COMMAND 20 (READ MULT): C=0, H=5, SN=27, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=22, SC=1
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=26, SC=33
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=25, SC=1
    Последний раз редактировалось nzeemin; 09.03.2010 в 21:36.

  2. #72

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Вот здесь непонятка -- получается что сначала задаются параметры следующей команды, но затем завершается передача сектора, что приводит к декременту sector_count (SC, порт 1F2). В результате команда 91h получает параметр SC=33, что конечно неверно и в дальнейшем приводит к ошибкам позиционирования.
    Либо я тут неправильно понимаю логику SC и он должен уменьшаться до завершения передачи данных сектора -- но неясно в какой момент.

    Если быть точным, то установка параметров команды 91h происходит сразу же после чтения первых двух байт сектора:
    HDD Read 1f7 0xffd0
    HDD Read 1f7 0xffd0
    HDD Read 1f7 0xff58 ; Снят сигнал BUSY
    HDD Read 1f7 0xff58
    HDD Read 1f0 0xf5dd ; Прочитаны первые два байта 1-го сектора
    HDD Write 1f2 <-- 0xf522 ; Установка параметров команды 91h
    HDD Write 1f6 <-- 0x0009
    HDD Read 1f0 0x5d4d
    HDD Read 1f0 0x5d4d
    Действительно странно как-то, чувствую надо дизассемблировать IDDRIV.SAV для того, чтобы понять логику работы.

    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=1, SC=1
    // Читается мастер-блок с информацией о разделах
    HDD COMMAND 91 (SET CONFIG): H=9, SC=34
    ; Тут выбор раздела 0
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=2, SC=1
    // Чтение первичного загрузчика (он же содержит драйвер чтения)
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=4, SC=4
    // Чтение вторичного загрузчика
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=8, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=10, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=12, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=14, SC=2
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=16, SC=2
    // Чтение каталога. Здесь вторичный загрузчик ищет сам файл операционной системы, драйвера
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=23, SC=1
    // Чтение доп.части вторичного загрузчика
    HDD COMMAND 20 (READ MULT): C=0, H=5, SN=27, SC=1
    // Чтение нулевого блока драйвера винча ID.SYS
    HDD COMMAND 20 (READ MULT): C=0, H=5, SN=27, SC=2
    // Чтение всего драйвера ID.SYS. Здесь вторичный загрузчик должен переместить его в ОЗУ ближе к 160000, примерно 157*** с чем-то
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=22, SC=1
    // Чтение доп.части вторичного загрузчика
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=26, SC=33
    // Чтение самой операционной системы. Читается KMON, USR и RMON
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=25, SC=1
    // Чтение доп.части вторичного загрузчика

  3. #73

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ошибочка при исполнении этой команды:
    HDD COMMAND 20 (READ MULT): C=0, H=3, SN=26, SC=33
    Здесь запрашивается чтение файла операционной системы : читается с блока 0176(8) 020142(8) слов по адресу 0117270(8). Соответственно с адреса 117270 по 130267 данные расположены на 0-м цилиндре 3-й стороны, с адреса 130270 должно читаться с 1-го сектора 4-й стороны 0-го цилиндра, а фактически начинает читаться с 34-го сектора 3-й стороны 0-го цилиндра, т.е. неправильно осуществляется переход на следующую сторону/цилиндр.

    Нашел ошибку в void CHardDrive::NextSector() : при переходе на следующую сторону надо m_cursector = 1;, а не 0. Загрузилась система, но эмулятор вылетел по ошибке - нет отработки команды с кодом 30 (собирал как Release, а не Debug).

  4. #74

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Еще надо в файле образа заменить таблицу разделов на вот такую:

    Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

    00000000 22 0A EE D8 ED D8 ED D8 ED D8 ED D8 ED D8 00 00
    00000010 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00

    В данном случае она отражает реальное состояние дел. Загрузиться можно только с разделов с 0 по 4, на 5-м разделе "No boot on volume".

  5. #75

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,048
    Спасибо Благодарностей отдано 
    1,141
    Спасибо Благодарностей получено 
    1,460
    Поблагодарили
    520 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    Нашел ошибку в void CHardDrive::NextSector() : при переходе на следующую сторону надо m_cursector = 1;, а не 0. Загрузилась система, но эмулятор вылетел по ошибке - нет отработки команды с кодом 30 (собирал как Release, а не Debug).
    Исправил. Если соберёшь в режиме Product -- то мы уже загружаемся, показывается интерфейс настройки драйвера печати, затем выходим на командную строку, и команда DIR даже работает.



    Во вложении -- прошивки и exe-файл. Также выложил новую бету эмулятора на сайте.
    Вложения Вложения
    Последний раз редактировалось nzeemin; 10.03.2010 в 09:37.

  6. #76

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    HDD Write 1f6 <-- 0xff00
    HDD Write 1f5 <-- 0xff00
    HDD Write 1f4 <-- 0xff00
    HDD Write 1f3 <-- 0xff01
    HDD Write 1f2 <-- 0xff01
    HDD Write 1f7 <-- 0x0020
    HDD COMMAND 20 (READ MULT): C=0, H=0, SN=1, SC=1
    HDD Write 1f2 <-- 0xf522
    HDD Write 1f6 <-- 0x0009
    HDD Read sector complete
    HDD Write 1f7 <-- 0x0091
    HDD COMMAND 91 (SET CONFIG): H=9, SC=33

    Вот здесь непонятка -- получается что сначала задаются параметры следующей команды, но затем завершается передача сектора, что приводит к декременту sector_count (SC, порт 1F2). В результате команда 91h получает параметр SC=33, что конечно неверно и в дальнейшем приводит к ошибкам позиционирования.
    Либо я тут неправильно понимаю логику SC и он должен уменьшаться до завершения передачи данных сектора -- но неясно в какой момент.

    Если быть точным, то установка параметров команды 91h происходит сразу же после чтения первых двух байт сектора:
    HDD Read 1f7 0xffd0
    HDD Read 1f7 0xffd0
    HDD Read 1f7 0xff58 ; Снят сигнал BUSY
    HDD Read 1f7 0xff58
    HDD Read 1f0 0xf5dd ; Прочитаны первые два байта 1-го сектора
    HDD Write 1f2 <-- 0xf522 ; Установка параметров команды 91h
    HDD Write 1f6 <-- 0x0009
    HDD Read 1f0 0x5d4d
    HDD Read 1f0 0x5d4d
    А вообще-то все правильно. Запрашивается команда чтения одного сектора, он прочитывается во внутренний буфер винчестера, и если не было ошибок при чтении, то SC устанавливается в ноль и в регистре статуса соответствующие биты. А далее уже программа должна прочесть из буфера эти 256 слов. А так как в самом первом слове находится геометрия, то соответственно она подготавливает данные для выполнения команды с кодом 91h.
    Если предположить, что буфер имеет размер одного сектора, то он сначала целиком читается в буфер, уменьшается CS, устанавливаются соответствующие биты в регистре статуса и далее с регистра данных считываются данные. При записи соответственно сначала надо заполнить буфер, а потом уже винчестер записывает нужный сектор, декрементирует SC и устанавливает в регистре статуса и ошибок результат записи сектора.

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

  8. #77

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,048
    Спасибо Благодарностей отдано 
    1,141
    Спасибо Благодарностей получено 
    1,460
    Поблагодарили
    520 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Реализовал команду 30h (WRITE MULTI) -- это было уже совсем просто.
    Так что на прошивке ide_hdbootv0400.bin уже загружается, пишет в файлы и каталог.
    Серьёзных тестов не делал, поэтому осторожнее, делаем бэкапы образа винчестера.

    UKNCBTL.exe во вложении.

    P.S. Принимаю заявки на реализацию других IDE-команд -- только говорите сразу какие программы их генерируют и при каких условиях -- чтобы проверять.
    Последний раз редактировалось nzeemin; 12.03.2010 в 21:54.

  9. #78

    Регистрация
    07.10.2007
    Адрес
    п.Пудость Гатчинского р-на Лен.обл.
    Сообщений
    3,247
    Спасибо Благодарностей отдано 
    360
    Спасибо Благодарностей получено 
    638
    Поблагодарили
    414 сообщений
    Mentioned
    46 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от nzeemin Посмотреть сообщение
    Реализовал команду 30h (WRITE MULTI) -- это было уже совсем просто.
    Так что на прошивке ide_hdbootv0400.bin уже загружается, пишет в файлы и каталог.
    Серьёзных тестов не делал, поэтому осторожнее, делаем бэкапы образа винчестера.
    С ide_wdromv0110.bin запись тоже заработала, да и грузится стало.
    Цитата Сообщение от nzeemin Посмотреть сообщение
    P.S. Принимаю заявки на реализацию других IDE-команд -- только говорите сразу какие программы их генерируют и при каких условиях -- чтобы проверять.
    Наверное 21h - работает так же как и 20h, и соответственно 31h - аналогично 30h. Надо ECh(Identify drive), эту команду должны употреблять IDINST.SAV от "Электронных работ" и WDX.SAV от Олега Ховайко.
    Можно еще ввести в команды чтения и записи выход по ошибке с установкой бита ABRT в регистре ошибок, если запрашиваемая геометрия выходит за пределы.
    Еще можно ввести работу с инверсными образами, определить автоматом по смещению 0x1F0-0x1FB в мастер-блоке - если там 0xFF - то и образ инверсный. Можно также по геометрии, если кол-во сторон и секторов больше 128, то также образ можно считать инверсным.
    Последний раз редактировалось Alex_K; 12.03.2010 в 22:57.

  10. #79

    Регистрация
    21.04.2006
    Адрес
    город Черняховск
    Сообщений
    1,102
    Спасибо Благодарностей отдано 
    29
    Спасибо Благодарностей получено 
    9
    Поблагодарили
    9 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Начал бы кто печатки рисовать и схему править под 2х2716..

  11. #80

    Регистрация
    20.12.2005
    Адрес
    Москва
    Сообщений
    2,048
    Спасибо Благодарностей отдано 
    1,141
    Спасибо Благодарностей получено 
    1,460
    Поблагодарили
    520 сообщений
    Mentioned
    20 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex_K Посмотреть сообщение
    С ide_wdromv0110.bin запись тоже заработала, да и грузится стало.
    У меня только один образ есть, с диска rkz. С него через wdboot не грузится, говорит -- ?WDROM-F-Некорректный boot-блок

    Кстати, а по инструкции Арсения можно загрузочный образ создать? пригодилось бы.

Страница 8 из 38 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Игры на УКНЦ
    от Titus в разделе ДВК, УКНЦ
    Ответов: 125
    Последнее: 29.12.2020, 23:12
  2. Реплика КМД УКНЦ
    от tnt23 в разделе ДВК, УКНЦ
    Ответов: 451
    Последнее: 26.06.2020, 15:07
  3. Дискетки от УКНЦ
    от ZXSlaver в разделе ДВК, УКНЦ
    Ответов: 12
    Последнее: 15.11.2009, 17:25
  4. Куплю SCSI-Винчестер (50pin)
    от AlexFantasy в разделе Барахолка (архив)
    Ответов: 10
    Последнее: 28.03.2009, 11:31

Ваши права

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