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

User Tag List

Страница 23 из 64 ПерваяПервая ... 192021222324252627 ... ПоследняяПоследняя
Показано с 221 по 230 из 639

Тема: [Поиск 2] Подготовка к сборке платы. Вопросы

  1. #221
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так, подебажил немного и со временем стало понятно. Они запихнули вызов процедуры установки сис тиков в зависимости от RTC (SET_TOD) в обработчик INT 19H. Но фишка вся в том, что XT-IDE заменяет INT 19H на свой собственный. И когда основной биос просканил add-ROM расширения и загрузил их (XT-IDE BIOS), то в конце он вызывает INT 19H. Только там уже INT 19H не Поисковый, а XT-IDE'шный. Поэтому процедура SET_TOD никогда не вызывается. Поэтому с дискетой без XT-IDE время будет работать. Пофиксить имхо легко - нужно перенести вызов функции SET_TOD из обработчика INT 19H куда-нибудь повыше, например перед вызовом INT 19H.

    Но с датой то что не так? Вот это вообще загадка на миллион. Пойду дебажить дальше.

  2. #222
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну с датой вроде тоже немного прояснилось. DOS пользует функцию 04h прерывания 1ah для чтения даты. В CH должно вернуться столетие в BCD. Поисковый BIOS возвращает там 0xFF. DOS с такого расклада офигевает, потому как 0xFF нифига не валидное число в BCD, и уходит на ошибку, то есть устанавливает дату на свою дефолтную. Почему Поиск возвращает там 0xFF? Да хрен его знает. В обработчике Int 1Ah он честно возвращает значение столетия из ячейки 0x32h CMOS. Но большой вопрос - а не пишет ли он в эту ячейку свою карту дефектов RAM, и вообще, инициализирует ее хоть как-нибудь? Честно говоря, все сорцы BIOS (2.1) напоминают урывками нахватанные где-то куски кода, часть от Поиск-1, часть от сорцов IBM AT, часть еще откуда-то, кое как слепленные в нечто целое по быстрому, при этом разные куски разбросаны по разным файлам. Хочется взять и сжечь. Разбираться в этом совершенно не хочется.
    Фиксится так же просто и беспощадно, в лучших традициях этого BIOS - в функции 04 прерывания Int 1Ah в регистре CH всегда возвращать 0x20h. Тем самым решается проблема 2000 года, так как год не может быть никакой другой, корме 20xx -))

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

    Вообщем на скорую руку подправил BIOS v2.6 по вышеописанным методам. Должен теперь в ДОС аутоматически брать время/дату из RTC. Еще поправлен класс машины на FC (IBM AT) чтоб некоторые программы все-таки позволяли работать с CMOS. Другое остальное ничо не трогал, все как в оригинальной версии v2.6.
    Вложения Вложения
    Последний раз редактировалось Tronix; 18.10.2017 в 10:37.

  3. #223
    Member
    Регистрация
    29.12.2014
    Адрес
    г. Санкт-Петербург
    Сообщений
    36
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    посмотри мою утилитку (выше ссылка) она выдает дамп цмоса и карту установленой памяти
    в пустых банках будет FF все верно вот он оттуда его и берет или 00 если память есть

    с 19h по 29h ячейки

    а в 32h там вообще мусор уже может быть

    кстати в доке той есть ошибки относительно того как конфиг в цмосе лежит но я уже разобрался если надо что как

    и все верно про биос - как я и писал выше когда смотрел исходники биос собран из кусков методом копипаста кем то без царя в голове - совершенно точно

    давайте всетаки сделаем нормальный скажем анон биос 3 - уберем из него все лишнее + добавим цмос по ат стандарту по возможности и будет классно

    алгоритм инициализации памяти понятен я могу тебе расписать его а в остальном анон биос сойдет главное вот только функции часов нормально добавить

    кстати так анон 8 кб то можно хт-иде прям туда зашить как варик перед ним? счас в поиске какой то кривой мфм биос есть с настройками на 5 винтов

    правда надо еще зашить норм флоповый биос в аноне 1-44 кажыс не поддерживал?
    Последний раз редактировалось medvdv; 18.10.2017 в 01:55.

  4. #224
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от medvdv Посмотреть сообщение
    алгоритм инициализации памяти понятен я могу тебе расписать
    Я с памятью так и не вкурил с этими портами 0x0E, 0x0F. Распиши, если не сложно.

  5. #225
    Member
    Регистрация
    29.12.2014
    Адрес
    г. Санкт-Петербург
    Сообщений
    36
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Tronix

    Итак есть следующие регистры

    0xF0 - запись и чтение из SRAM перекодировки логического адреса в физический
    0xE0 - логический адрес для которого мы будем писать или читать физический из 0xF0 - те адрес в этой SRAM

    SRAM из 256 ячеек по байту

    она транслирует постранично 2 мб логическое пространство в 2мб физическое, размер страницы 16кб

    те там хранятся соответственно 8 старших бит физического адреса памяти

    [ ADDRMEM21 | ADDRMEM20 .. | ADDRMEM14 ]

    Если мы хотим изменить трансляцию адреса - то 0xE0 идет на адресные линии SRAM а 0xF0 читает/пишет содержимое
    Соответственно пишем в 0xE0 логический адрес а потом читаем/пишем в 0xF0 соответствующий ему физический - и там и там старшие 8 бит

    Кроме того для самого проца память видна только до первых 640 кб этого логического пространства
    а все сверх 640кб мапится через 4 страницы по 16 кб
    они идут подряд по адресам D0000 D4000 D8000 DC000

    И таким образом постраничный аппаратный EMS работает так:

    последнее что записали в 0xE0 идет как старшая часть ЛОГИЧЕСКОГО адреса когда идет доступ к D0000
    в 0xE1 доступ к D4000
    в 0xE2 доступ к D8000
    в 0xE3 доступ к DС000

    Т.е. для каждого окна мы выбираем 16 кб ЛОГИЧЕСКУЮ страницу из 2-х мегабайт любую
    которая будет видна в этом окне.

    И потом еще она будет транслирована в ФИЗИЧЕСКУЮ по таблице из SRAM

    Все физическое пространство памяти - тоже 2 мегабайта
    Там 4 банка по 512 килобайт они идут подряд в физическом пространстве адресов
    В каждом банке получается может стоять физически 512 или 128 или ничего
    И это надо проверить при тесте

    А точнее можно проверить все - в том числе просто не учитывать испорченные страницы DRAM - что кстати круто! Если драм где то испортилась - у тебя просто на 16КБ меньше памяти, ничего не надо перепаивать и никаких парити чеков и тд

    Те мы просто перебираем все 256 физических страниц по 16 килобайт
    тестим каждую и если она работает и без ошибок добавляем ее следующей в логическое адресное пространство

    В конце мы знаем сколько у нас рабочих 16 кб страниц и значит объем рабочей памяти

    Короче, исходную инициализацию делаем дословно так

    Код:
    uint8_t log_page = 0;
    uint8_t phys_page = 0;
    uint16_t memory_size_kb = 0;
    
    do {
    	outportb(0xE0, log_page);
    	outportb(0xF0, phys_page);
    	if (OK == test_mem(0xD0000,0x4000)) {
    		memory_size_kb += 16;
    		++ log_page;
    		printf(“TEST MEMORY %d KB OK\r”, memory_size_kb);
    	}  else 
    		mark_unworking_page_bit_in_CMOS(phys_page);
    
    } while(++phys_page);
    и на выходе у нас:

    1 - размер доступной памяти в memory_size_kb
    2 - правильный маппинг по любому даже если ставить микрухи не с нулевого банка
    3 - битовая карта нерабочих страниц

    Интересно что для какой то цели это пишется в CMOS RAM в виде карты из 16 байт где каждый бит получается есть ДВЕ (почему то) страницы.
    если он 1 - там нет памяти или она битая а если 0 - есть память и все хорошо.

    Видимо это пишется для EMS драйвера чтобы ему заново не проверять память?

    Но реально ему было бы достаточно номера максимальной рабочей логической страницы и того факта что при POST они были правильно замаплены в физические. Вобщем странно. Наверное при горячем сбросе это используется или еще как?

    Кроме того в CMOS есть бит который говорит не тестить память а типа брать маппинг из CMOS “фабричный” те можно записать туда что угодно и даже рабочие куски памяти будут считаться битыми и наоборот - но не знаю работает ли этот бит реально в 2.6

    интересные моменты кроме того

    1 - если мы очень захотим можно сделать основную память меньше 640 таким образом отдав лишнее на EMS
    2 - мы можем перекидывать в основное адресное пространство страницы из EMS и до 640 кб, по сути по любому адресу с шагом в 16 кб показать любую страницу физической памяти из рабочих, менять их быстро местами и т.д. скажем можно было бы таким образом убирать часть кода дос или оболчки а потом быстро возвращать и т.д.

    вообще такой MMU страничный на XT это очень даже передовая штука была, если бы он был стандартом сразу от IBM
    Последний раз редактировалось medvdv; 19.10.2017 в 00:41.

  6. #226
    Activist
    Регистрация
    07.12.2015
    Адрес
    г. Винница, Украина
    Сообщений
    269
    Спасибо Благодарностей отдано 
    42
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    28 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ох, надо было отдельную тему по БИОСу создать
    Новодел "Поиск-2" + VGA Realtek + XT-IDE (3.2Gb) + ISA Fdd & Com (5.25", 3.5") + SoundBlaster Pro
    Бложик

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

  8. #227
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    medvdv, Спасибо, постараюсь вникнуть на свежую голову. Но для меня этот участок кода в биос по-прежнему остается загадкой:

    Код:
            XOR     AL,AL
    ;----------------------------------------------------------------------------
    ;	ТЕСТ РЕГИСТРОВ R0...R3 УСТРОЙСТВА EMS ОЗУ И ДЕШИФРАТОРА
    ;       		ФИЗИЧЕСКИХ АДРЕСОВ ОЗУ
    ;------------------------------------------------------------------------------
    	MOV	DL,0FFH
    LP2:	MOV	CX,100H
    LP1:	OUT	0E0H,AL      ;- адрес для статики
    	XCHG	AL,DL
    	OUT	0F0H,AL	     ;- значение
    	XCHG	AL,DL
            INC	AL
    	LOOP	LP1
    Что этим хотел сказать афтор?

  9. #228
    Member
    Регистрация
    29.12.2014
    Адрес
    г. Санкт-Петербург
    Сообщений
    36
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Tronix

    ну аффотор просто записал FF во все ячейки РУ2 этого маппера
    я думаю для того чтобы проверить живое ли это SRAM потом - прочитав что там лежит далее

    те это просто часть теста SRAM трансляции адресов

    дословно он просто перебирает все логические адреса и пишет для них FF как физический
    те SRAM[0..0xFF]=0xFF

    Код:
    uint8_t log_page = 0;
    
    do { 
            outportb(0xE0, log_page);
    	outportb(0xF0, 0xFF);
    } while(++log_page);
    потом он видимо прочтет все ячейки и проверит прочиталось ли FF

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

    Давайте сделаем отдельный топик и там доведем до ума биос поиска 2

  10. #229
    Activist
    Регистрация
    07.12.2015
    Адрес
    г. Винница, Украина
    Сообщений
    269
    Спасибо Благодарностей отдано 
    42
    Спасибо Благодарностей получено 
    34
    Поблагодарили
    28 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Tronix, medvdv, вот чего еще реально не хватало при сборке - кодов на POST-карте. Это было бы полезное улучшение
    Новодел "Поиск-2" + VGA Realtek + XT-IDE (3.2Gb) + ISA Fdd & Com (5.25", 3.5") + SoundBlaster Pro
    Бложик

  11. #230
    Veteran Аватар для Tronix
    Регистрация
    16.09.2010
    Адрес
    г. Москва
    Сообщений
    1,933
    Спасибо Благодарностей отдано 
    78
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    115 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Тем временем, коллективным разумом завели видеокарту Trident 9000 на XT, и Поиск-2 в частности. Начало здесь, подробности здесь.


Страница 23 из 64 ПерваяПервая ... 192021222324252627 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 112
    Последнее: 04.07.2022, 11:21
  2. КЦГД - поиск софта, вопросы и ответы
    от Titus в разделе ДВК, УКНЦ
    Ответов: 238
    Последнее: 28.09.2018, 09:53
  3. Ответов: 19
    Последнее: 03.12.2014, 15:41
  4. Куплю платы расширения для ПОИСК-а
    от Kacher в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 28.07.2011, 20:15
  5. Орион-про: Вопросы по сборке
    от Prusak в разделе Орион
    Ответов: 48
    Последнее: 12.10.2010, 00:18

Ваши права

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