User Tag List

Страница 15 из 29 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя
Показано с 141 по 150 из 287

Тема: ПК8000 - Контроллер дисковода

  1. #141

    Регистрация
    07.03.2014
    Адрес
    Vancouver, Canada
    Сообщений
    402
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    PS проверенно на Львове.
    http://zx-pk.ru/showpost.php?p=742648&postcount=45
    из озу работать сложно - много тормозов. если сама программа сидит в ПЗУ,
    а в ОЗУ только класть-брать данные то все железно работает с большим запасом.
    программы работающие с диском из ОЗУ просто вызывают data pump процедуру из ПЗУ.
    Цена вопроса на Львове:
    Три вентиля в контроллере дисковода (были свободные, как вариант 2 диода и резистор) + резистор и транзистор + один провод проброшен через свободный контакт системного коннектора. В самом львове: одна дорожка разрезана + один резистор и один диод + провод на системный коннектор.
    Все обратно совместимое и никак не мешает обычной работе.
    В ПЗУ ДОС забито 2 команды условного перехода NOPами.

    Итого: вариант ПК8000 это очень круто и серьезный over kill

    ---------- Post added at 09:27 ---------- Previous post was at 08:59 ----------

    PPS конкретнее: цикл подачи байта сейчас занимает 23 мкс против 32 отведенных на это MFM
    на Львове каждый второй доступ к памяти от видеоадаптера и тоступ процессора может быть задержан до 1 мкс,
    так вот даже при таких усховиях MFM работает из RAM! на пределе быстродействия 30 мкс, но работает.
    Последний раз редактировалось kapitan-u; 05.10.2014 в 03:49.

  2. #142

    Регистрация
    15.02.2009
    Адрес
    Зерноград
    Сообщений
    568
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Прошу прощения за долгое молчание. Накопились семейные дела.. Сейчас вроде стал виден просвет..

    Цитата Сообщение от hantarex Посмотреть сообщение
    в контроллере четыре устройства, все адресуются, как память: D7-ПЗУ, D14-к1818ВГ93, D8,D9- схема готовности ВГ93, D17,D18-выбор диска, стороны диска.
    Я вчера посидел со схемкой. Я не пойму, как адресуется ПЗУ? Судя по схеме замены РТ2, выбор ПЗУ перекрывает адреса 4000h-7FFFh. Так и должно быть? Получается, что при чтении портов ВГ93 или ИР26, так же будет происходить выборка ПЗУ и будет конфликт на шине. При записи в порт ПЗУ отваливается по /ОЕ. Я правильно думаю? Или чего то не допонимаю?
    ZX-Spectrum 128(краснодарский вариант)+YM+Covox+3,5" FDD+5,25" FDD+Nemo controller+HDD+CD-ROM+PS/2 Keyboard+PS/2 Mouse (остальное в проекте...) (Всё самодельное) Плата Внутри Внешний вид

  3. #143

    Регистрация
    18.02.2010
    Адрес
    г. Пенза
    Сообщений
    407
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    68
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Mifody Посмотреть сообщение
    Я не пойму, как адресуется ПЗУ? Судя по схеме замены РТ2, выбор ПЗУ перекрывает адреса 4000h-7FFFh. Так и должно быть?
    Да, именно так.
    Получается, что при чтении портов ВГ93 или ИР26, так же будет происходить выборка ПЗУ и будет конфликт на шине.
    Это смотря откуда и как читать.
    Если в двух словах, то вызов подпрограммы чтения/записи сектора происходит следующим образом:
    1. По умолчанию на адреса 0x4000-0x7FFF отображается обычная ОЗУ. Подпрограмма чтения/записи (в верхних адресах памяти) переносит 17 байт данных из 0x7FF7 в 0xEE02.
    2. Устанавливает адрес буфера обмена в переменную по адресу 0xEE24.
    3. Отображает на адреса 0x4000-0x7FFF ПЗУ контроллера (через порт 0x80).
    4. Переход на подпрограмму чтения/записи сектора (0x40BA - чтение, 0x412B - запись), которые берут данные уже с обычной ОЗУ (с 0xEE24).
    5. По завершении восстанавливает отображение на 0x4000-0x7fff обычной ОЗУ.

    При записи в порт ПЗУ отваливается по /ОЕ. Я правильно думаю? Или чего то не допонимаю?
    Честно говоря не понял что и куда отваливается, но рискну предположить, что речь про способ записи на адреса 0x7FF7-0x7FFF. Дело в том, что даже если в эти адреса отображается ПЗУ, то запись все равно пройдет в ОЗУ! Мэппирование памяти работает только на чтение, а операции записи тупо игнорируют эту фичу и пишут во все, что отображается на данный адрес.

  4. #144

    Регистрация
    15.02.2009
    Адрес
    Зерноград
    Сообщений
    568
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от hantarex Посмотреть сообщение
    з.ы. после исправления бага с выбором ПЗУ машина перестала вываливаться в Васик есть над чем подумать.
    Так ведь так и должно быть. Значит загрузчик считался из ПЗУ и ждёт загрузки с системной дискеты.
    А можно по содержимому ПЗУ хотя бы в 2 словах сказать, как происходит инициализация контроллера? Я, к сожалению, не в состоянии это понять на данном этапе познаний.. Сейчас при включении ПК8000 с контроллером начинает крутить дисковод и загорается светодиод активности дисковода №0. При нажатии РЕСЕТ дисковод останавливается, светик активности гаснет. Через 2-3 сек. опять крутит дисководом и активен дисковод №0. То есть в порт ТМ8 запись идёт верно. Но на выводе 15 D18 остаётся низкий уровень, и соответственно ВГ93 остаётся в состоянии РЕСЕТ. Оно может так и должно быть, пока комп не считает из контроллера какие то определённые данные. Но даже если принудительно убрать с ВГшки ресет, данные она не читает, так как на её 33 выводе еденица. Я как понимаю, чтоб она начала что то читать, ей должно прийти запрос на чтение сектора. Но до этого не доходит. Далее на выводе /CS и /RD ВГ93 постоянно какая то активность на этом всё и останавливается. Это что, комп пытается что то прочитать из ВГшки, но у него не получается? На всём протяжении инициализации контроллера на выводах R и W ИР26 высокий уровень. То есть комп туда ничего не пишет и не читает. А должен? (или делает это очень быстро, что мой осцилл этого не замечает. К стати, в ТМ8 он пишет так, что мой осцилл не видет активности на ноге 9 ТМ8..) Этого не видно по прошивке? Микросхемы дешифратора точно рабочие. Проверял. Что то ума не приложу, в чём затык..
    ZX-Spectrum 128(краснодарский вариант)+YM+Covox+3,5" FDD+5,25" FDD+Nemo controller+HDD+CD-ROM+PS/2 Keyboard+PS/2 Mouse (остальное в проекте...) (Всё самодельное) Плата Внутри Внешний вид

  5. #145

    Регистрация
    18.02.2010
    Адрес
    г. Пенза
    Сообщений
    407
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    68
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Mifody Посмотреть сообщение
    Так ведь так и должно быть. Значит загрузчик считался из ПЗУ и ждёт загрузки с системной дискеты.
    Не. Я точно помню, что если дискеты нет, то происходил выход в васик.
    А можно по содержимому ПЗУ хотя бы в 2 словах сказать, как происходит инициализация контроллера?
    Сначала по адресу 0x7FF7 пишется 0x81 и сразу же по адресам 0x7FF7 и 0x7FF8 пишется 0x01, после чего пауза (65536 * 256 циклов, во время которых время от времени на 0x7FF8 пишется 0xD0). Затем такая же комбинация, но уже пишется 0x82 и 0x02 соответственно. В принципе могу более точно воспроизвести эти действия, если нужно конечно.
    Во время циклов ожидания проверяется бит 0, по адресу 0x7FF8. Правда непонятно, как это работает, так как чтение идет с ПЗУ, да и резульаты проверки впоследствии нигде не используются. Странно конечно, но что етсть, то есть.
    Затем инициализируется память по 0xEE21 (EE21 - текущий диск, EE22 - текущий трек, EE23 - текущий сектор, EE24 - адрес буфера DMA (настраивается на адрес 0xDF80), EE26 - тип сектора). Инициализируются RST7 и переменные для подпрограммы таймера. Затем вызывается подпрограмма чтения сектора.
    Если чтение проходит успешно, то управление передается на адрес, записанный в слове 0xDF81 (то есть считанный с дискеты, там обычно 0xDFA0). Ну а там пошла подготовка к загрузке системы, настройка экрана и тд и тп.
    Как то так. Могу код предоставить, там немного и несложно.

    А может в оригинальной схеме ПЗУ перекрывает не весь диапазон 0x4000-0x7FFF?

    ---------- Post added at 15:42 ---------- Previous post was at 15:40 ----------

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

  6. #146

    Регистрация
    15.02.2009
    Адрес
    Зерноград
    Сообщений
    568
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от DemonId7 Посмотреть сообщение
    Не. Я точно помню, что если дискеты нет, то происходил выход в васик.
    О как.. Но опять же, комп должен определить по состоянию ВГшки, что дискеты нет. А если кроме ПЗУ он, получается, читать ничего не может, то вот и висит всё время в ожидании чего-то..
    Интересно, что должно произойти, чтобы по адресу 7FF7h записался байт, у которого старший бит (7) равен 1. При этом долно произойти разблокировка ВГшки..

    Цитата Сообщение от DemonId7 Посмотреть сообщение
    Могу код предоставить, там немного и несложно.
    Это файл romngmd.lst, который тут выкладывали? Если он, то это у меня есть. Если что то другое, то давайте. Хотя, я мало что в асм ВМ80 понимаю.. Нужно изучать с нуля..

    Цитата Сообщение от DemonId7 Посмотреть сообщение
    А может в оригинальной схеме ПЗУ перекрывает не весь диапазон 0x4000-0x7FFF?
    Я тоже подозреваю, что косяк может быть в дешифраторе. Но дампа РТ2 так и не сделали. И, честно говоря, не уверен, что сделают..

    Цитата Сообщение от DemonId7 Посмотреть сообщение
    Кстати, а схема и разводка без дефицитных деталей будет?
    Я делаю по оригинальной схеме. На печатке, что тут изготовили. hantarex вроде делал по какой то упрощённой схеме. Но у него (могу ошибаться) вроде тоже не заработало. Для меня на данном этапе знаний тяжело (наверно даже невозможно) самому разрабатывать железо. Если будет модернизированная и упрощённая (проверенная) схема, то я смогу развести печатку в ПКАД.
    А какие детали там дифецитные? Там, по моему, только РТ2.. Да и то не дефицит, а просто фиг где прошьёшь.. Но ведь
    придумали ей замену на рассыпухе..
    Последний раз редактировалось Mifody; 03.12.2014 в 16:51.
    ZX-Spectrum 128(краснодарский вариант)+YM+Covox+3,5" FDD+5,25" FDD+Nemo controller+HDD+CD-ROM+PS/2 Keyboard+PS/2 Mouse (остальное в проекте...) (Всё самодельное) Плата Внутри Внешний вид

  7. #147

    Регистрация
    03.08.2010
    Адрес
    Ставрополь
    Сообщений
    286
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    531ГГ1 - тот еще треш. в Ставрополе таких нет, а заказывать - влом.
    ПК8000 "Веста", "Сура". ПК8002 "Эльф". ПК8010,8020 "Корвет".

  8. #148

    Регистрация
    18.02.2010
    Адрес
    г. Пенза
    Сообщений
    407
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    68
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Mifody Посмотреть сообщение
    Это файл romngmd.lst, который тут выкладывали? Если он, то это у меня есть. Если что то другое, то давайте. Хотя, я мало что в асм ВМ80 понимаю.. Нужно изучать с нуля..
    Не, у меня свой дизассемблинг. Но раз с асмом плохо, то лучше дам код на псевдовасике, так будет понятнее. Да и я обнаружил, что функция задержки работает не так как я думал до этого - она практически сразу прерывается, так как с 0x7FF8 считывается 0. В общем код:
    Код:
    START_ROM:
      [0xEE1D] = 0
      [0x7FF7] = 0x81
      [0x7FF7] = 0x01
      WAIT(0x01)
      [0x7FF7] = 0x82
      [0x7FF7] = 0x02
      WAIT(0x02)
      [0x7FF7] = 0x00
      oldmap   = INP(0x80) ; используется CP/M для вызова подпрограмм ПЗУ
      [0xEE21] = 0         ; cur disk
      [0xEE22] = 0         ; cur track
      [0xEE23] = 1         ; cur sector
      [0xEE24] = 0xDF80    ; addr DMA buffer
      [0xEE26] = 0         ; type sector - обычный
    
      [0x0038] = 0xC9      ; make JMP on RST7
      [0xEE1B] = 0         ; timer count - используется в обработчике RST7
    
      A = ReadSector()     ; чтение первого сектора в 0xDF80,
                           ; результат в регистре A
      if (A = 0)
          return           ; выход в васик
    
      HL = [0xDF81]
      if (H <> 0xDF)
          return           ; выход в васик
      goto HL              ; переход на загруженный код, где происходит дозагрузка системы
    
    
    WAIT(n)
    {
      BC = 65536
      [0x7FF8] = n         ; reg ВГ93 = 1 or 2
      WAIT_256()
      WHILE (BC <> 0)
        A = [0x7FF8]       ; в ПЗУ здесь 0!
        if (A AND 1) = 0
            return
        BC = BC - 1
      ENDW
      [0x7FF8] = 0xD0
      WAIT_256()
    }
    
    WAIT_256()
    {
      A = 256
      WHILE (A <> 0)
        A = A - 1
      ENDW
    }
    Как видите, выход происходит по результату работы подпрограммы считывания сектора ReadSector(). Сама ReadSector() работает с данными расположенными в адресах 0xEEXX, потому коллизий не происходит.

    Я тоже подозреваю, что косяк может быть в дешифраторе. Но дампа РТ2 так и не сделали. И, честно говоря, не уверен, что сделают..
    Вся соль вопроса в функции ReadSector(), она может дать все ответы куда и что отображается. Я ее глубоко не копал, так как для меня сам контроллер ВГ93 - темный лес и я просто не понимаю код, работающий с ней.
    Так что либо искать описание ВГ93 и хотя бы поверхностно дизассемблировать ReadSector(), либо снимать дамп РТ2. Второе конечно предпочтительнее, но тут я не помошник. С первым могу помочь, как время появится.

  9. #149

    Регистрация
    18.02.2010
    Адрес
    г. Пенза
    Сообщений
    407
    Спасибо Благодарностей отдано 
    18
    Спасибо Благодарностей получено 
    68
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Глянул одним глазком на доку по ВГ93. На адрес 0x7FF7 судя по всему отображается регистр статуса/команд. Тогда функция WAIT() и не задержка вовсе, а отсылка команды контроллеру.
    Все равно непонятным остается одно - каким образом функции ПЗУ читают регистр статуса контроллера, если он отображается на 0x7FF7? Тем же подпрограммам чтения/записи сектора чтение регистра статуса просто необходимо. Замкнутый круг какой-то. Закончу с плагином, попробую выяснить это из кода ПЗУ.

  10. #150

    Регистрация
    15.02.2009
    Адрес
    Зерноград
    Сообщений
    568
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    11
    Поблагодарили
    10 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Что то я совсем запутался.. 7FF7h это ведь регистр работы дисковода. ТМ8.. И, судя по схеме, комп туда может только писать. Читать от туда он вроде как не может.. Или он как, пишет в ТМ8, а читает из ОЗУ?
    ZX-Spectrum 128(краснодарский вариант)+YM+Covox+3,5" FDD+5,25" FDD+Nemo controller+HDD+CD-ROM+PS/2 Keyboard+PS/2 Mouse (остальное в проекте...) (Всё самодельное) Плата Внутри Внешний вид

Страница 15 из 29 ПерваяПервая ... 111213141516171819 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Контроллер дисковода
    от andrew76 в разделе Внешние накопители
    Ответов: 55
    Последнее: 12.04.2024, 16:33
  2. Ответов: 26
    Последнее: 25.01.2019, 18:31
  3. Ответов: 24
    Последнее: 30.04.2016, 23:47
  4. Не работает контроллер дисковода GRM2+
    от Shnurkov в разделе Внешние накопители
    Ответов: 5
    Последнее: 16.03.2009, 00:59
  5. Куплю контроллер дисковода для УКНЦ
    от tnt23 в разделе Барахолка (архив)
    Ответов: 2
    Последнее: 27.02.2009, 08:51

Ваши права

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