User Tag List

Страница 21 из 50 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя
Показано с 201 по 210 из 494

Тема: Вектор-06Ц: Операционные системы

  1. #201

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,389
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    А если сделать DCR C и выкинуть модификацию D, то заворот останется?
    Вряд ли в этом есть необходимость, похоже этот фрагмент работает правильно

    Этот пользователь поблагодарил ivagor за это полезное сообщение:

    b2m(06.04.2020)

  2. #202

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Блин, опять поднял волну зазря

    - - - Добавлено - - -

    Вот не хотел я в вашем мдосе копаться, но раз уж назвался груздем...

    Проблема тут:
    Код:
    	MOV  H, A	; (HL,E) = (A,HL)
    	POP  B		; для подчистки стека, загружаем временно в BC
    	CALL    L_D9D9	; проверка готовности НЖМД, получение кода ошибки и RET
    	PUSH B		; возвращаем BC в стек
    	ANI     0C0h	; 1110 0000
    	CPI     040h	; 0100 0000 устройство готово к операции
    	RNZ		; выход, если не готово
    	DI		; запрет прерываний на время установки параметров
    	PUSH D
    	CALL    L_D8F3	; расчёт номера цилиндра = 00h
    	OUT     055h	; Цилиндр, младшие биты номера цилиндра
    	POP  D
    	MOV  H, L
    	MOV  L, E
    	CALL    L_D8F3	; расчёт номера цилиндра = 00h
    	OUT     054h	; Цилиндр, старшие биты номера цилиндра
    Задаём диск 2В. Исходный номер сектора 0101E6h, делим на 120h (18*16 секторов на дорожке). Процедура L_D8F3 делит 16-битное на 16-битное с остатком. Потом двигаем остаток на 8-бит и берём младшие 8 бит, и снова делим на 16-бит.

    Проблема только в том, что остаток 16-битный.

    О способе деления я умолчу, он тут работает как задумывалось. Но это тоже мрак.

    - - - Добавлено - - -

    Получается, выражение "секторов*головок" должно быть <256
    Последний раз редактировалось b2m; 06.04.2020 в 18:54.

    Этот пользователь поблагодарил b2m за это полезное сообщение:

    Improver(07.04.2020)

  3. #203

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,389
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не успел. Только я все же хотел впихнуть нормальную процедуру деления 24/16 (быстро нашлась 32/16, поэтому ее), т.к. сейчас эта комбинация делит неправильно. Просто так впихнуть не получается, надо разбираться, где свободное место, уверен, что Improver легко поправит, он знает где там запас.

  4. #204

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я думаю, если выкинуть все эти "патчи" для старой процедуры деления, то место появится.

    - - - Добавлено - - -

    По-моему, можно даже обойтись процедурой 24/8, первый раз делим на кол-во секторов (остаток - номер сектора-1), второй раз на количество головок (остаток номер головки). Частное (16-битное) - номер цилиндра.

    - - - Добавлено - - -

    Тогда будет ограничение "цилиндров*головок"<65536 (это если частное 16-битное).

    - - - Добавлено - - -

    Деление 24/8

    Код:
        MVI C,16 ; HL=AHL/B, A=AHL%B
    L1: DAD H
        ADC A
        JC L2
        CMP B
        JC L3
    L2: SUB B
        INR L
    L3: DCR C
        JNZ L1
        RET
    По-моему - оптимально.
    Последний раз редактировалось b2m; 06.04.2020 в 20:11.

    Эти 3 пользователя(ей) поблагодарили b2m за это полезное сообщение:

    Improver(07.04.2020), ivagor(07.04.2020), KTSerg(07.04.2020)

  5. #205

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,389
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сегодня котелок уже не варит, сделал тупо (с делением 24/16 через процедуру 32/16), ну и там еще потупил. Исходник этого сна разума не выкладываю, но бинарник вроде заработал правильно, пусть будет.
    Вложения Вложения

    Эти 2 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    electroscat(08.04.2020), Improver(07.04.2020)

  6. #206

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,065
    Спасибо Благодарностей отдано 
    582
    Спасибо Благодарностей получено 
    471
    Поблагодарили
    253 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ivagor поскромничал выложить исходники... Попробую сам поправить в Т-72 драйвер на основе кода 24/8 от b2m. Но, с другой стороны, общественный разум опять победил! На этот раз многолетнюю проблему глюка с жёсткими дисками.

    P.S. Кстати, появилась идея перевести обращение к диску на LBA, для этого, по сути, будет достаточно дополнить номер сектора с 24 до 28 бит нулями. Это избавит от всех вычислений, привязки к количеству цилиндров/головок/секторов диска и т.п., но только пока не известно, как поведут себя разнообразные CF-карты, комбодевайсы и поддерживают ли эмуляторы Вектора режим LBA для жёстких дисков...

  7. #207

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,389
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Сделал по заветам b2ma, убрал много лишнего. К этому варианту уже не стыдно приложить исходники, вернее только измененные файлы. Improver, b2m, спасибо!

    - - - Добавлено - - -

    Забыл спросить один момент. Регистры 55h и 54h - в досах в 54h пишут младший байт, в 55 - старший, в памятке Tim0xи написано наоборот. Если бы оба были по 8 бит, то без разницы, но разрядность старшего меньше, или это только для старых hdd важно а в новых и старший 8 бит?
    Вложения Вложения

    Эти 3 пользователя(ей) поблагодарили ivagor за это полезное сообщение:

    b2m(07.04.2020), Improver(07.04.2020), KTSerg(07.04.2020)

  8. #208

    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    1,065
    Спасибо Благодарностей отдано 
    582
    Спасибо Благодарностей получено 
    471
    Поблагодарили
    253 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Забыл спросить один момент. Регистры 55h и 54h - в досах в 54h пишут младший байт, в 55 - старший, в памятке Tim0xи написано наоборот.
    Я сначала опирался на инфу с базиса из HDD.TXT, и свои комментарии в исходниках ставил по ней, но там скорее всего опечатка, в порт 055h пишутся старшие биты, а в 054h -- младшие.

  9. #209

    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,926
    Спасибо Благодарностей отдано 
    105
    Спасибо Благодарностей получено 
    290
    Поблагодарили
    216 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Сделал по заветам b2m
    Можно я поворчу. Процедуру деления я бы на место старой поместил (у тебя лишний jmp), столь короткие метки не стал бы использовать.
    А так - да, всё как я и полагал.

    - - - Добавлено - - -

    И да, цикл чтения/записи сектора я бы разделил. Какой смысл каждые 2 байта анализировать чтение нужно или запись? Ускорение будет 5-10%.

    Этот пользователь поблагодарил b2m за это полезное сообщение:

    Improver(07.04.2020)

  10. #210

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,389
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    38 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    jmp несомненно лишний, я даже убирал оттуда процедуру, но в процессе поиска ошибки (надо было раскомментить mvi d,0) грешил на размещение процедуры, вернул ее под jmp и забыл вернуть обратно. Метки короткие, да нехорошо. Можно даже внутри процедуры все сделать без меток, c $+-. Больше я трогать не буду, лучше Improver доработает (если захочет). Но если еще есть загадки/ошибки, то я всегда готов (если только не очень сложные ).
    Насчет 55 и 54 похоже действительно опечатка в описании. C ВУ приходит инверсный адрес, они его инвертируют и подают на IDE.

    Этот пользователь поблагодарил ivagor за это полезное сообщение:

    Improver(07.04.2020)

Страница 21 из 50 ПерваяПервая ... 171819202122232425 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 213
    Последнее: 13.06.2022, 14:02
  2. Ответов: 4
    Последнее: 20.08.2007, 16:14
  3. Организация plug-in'нной системы
    от CityAceE в разделе Программирование
    Ответов: 9
    Последнее: 20.09.2005, 12:45
  4. Описание системы команд - давайте централизуем ;)
    от Alex/AT в разделе Программирование
    Ответов: 42
    Последнее: 09.07.2005, 22:34
  5. Инициализация системы
    от breeze в разделе Программирование
    Ответов: 13
    Последнее: 24.03.2005, 10:03

Ваши права

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