Народ! Где можно посмотреть схему "контроллера" IDE для Ориона?
На "orion-z" картинка накрылась медным тазом... :(
Вид для печати
Народ! Где можно посмотреть схему "контроллера" IDE для Ориона?
На "orion-z" картинка накрылась медным тазом... :(
А исходные тексты к рулению HDD или чего там еще есть? А то может и для ПК8000 портировать получится.
Это не оно http://www.pjrc.com/tech/8051/ide/ ?
Очень похоже, на то, что было, но порты A и С надо обменять местами.
Ага, это и есть исходная картинка. Меняем порты A и С (это пришлось сделать, чтобы дефолтные ПЗУ-шные загрузчики ORDOS не слали в IDE мусор если IDE повешен на порт F500 вместо ROM-DISK) и получаем то, что я постом ранее выложил в виде ASCII картинки:
http://orion-z.hoter.ru/images/HDD_scheme.gif
Добавлено через 11 минут
Все что я напрограммировал (DOS c IDE, драйвер для "сырого" доступа к HDD, порт Fat16/32) есть как в исполняемом варианте, так и в исходниках на моей страничке (оно в основном в образах дисков).
Для этой задачи Рекомпилятор "Z80->ВМ80А" будет как раз кстати. Весь процесс автоматизирован.
Добавлено через 11 минут
К этой схеме можно подключить флешку CF? Она будет работать в качестве HDD или тут есть какие-нибудь "подводные камни"?
Работает точно так же, как и HDD. Я в-основном на CF и отлаживался (с ним проще с питанием), подключая при помощи адаптера CF-IDE (купил готовый за 300р, но есть и схемы для самодельщиков - там надо 2 разъема спаять: 40 ног IDE к 50-ногому CF, схема есть у меня на странице).
Кроме того, существуют еще и вот такие девайсы для подключения SD/MMC:
http://www.nedopc.org/forum/viewtopic.php?t=8973
Т.е. IDE-интерфейс штука очень полезная и что немаловажно для наших раритетов - очень простая в подключении и программировании.
На Орионе я решил делать так: винт разбивается на стандартные MBR-партиции - как в винде. Поддерживается 4 стандартных master-партиции. И разбитый так винт можно подключать как к PC с виндой (винда работает со своей FAT-партицией, плюс утилитами можно сдампить в образ и обратно и CP/M-партицию), так и к Ориону, который живет (грузится) в своей CP/M партиции и может монтировать другие CP/M партиции этого или второго винта.Цитата:
Сообщение от Mick
Под CP/M для Ориона для этого я написал утилиту fdisk.com, которая в этом стандарте (MBR-партиции) создает/удаляет партиции и файловые системы CP/M.
Также я портировал библиотеку работы с FAT(12/16/32), написал для нее оболочку (fat.com), и на Орионе из-под CP/M можно в обе стороны пофайлово обмениваться данными с FAT-партициями винды. В отличие от fdisk.com, fat.com понимает extended партиции, т.к. WinXP для FAT-партиций более 32G по дефолту лепит extended-партицию.
И fat.com, и fdisk.com написаны абстрактно на языке С - они не лезут напрямую ни в экран (работа идет стандартным VT-52), ни к контроллеру IDE - низкоуровневая запись/чтение 512B вынесены в отдельный драйвер (в моем случае - это IDEBDOS.COM, написанный на asm)
Исходники во вложении этого сообщения. Я использовал компилятор HiTech C v3.09 для CP/M и макроассемблер Microsoft M80/L80.
Варианты загрузки с IDE на i8255 (580вв55) на Орионе:Цитата:
Сообщение от Tim0xA
- при помощи ПЗУ F800 (один из: M35ZMSH.BIN, M35ZRKH.BIN, M36ZMSH.BIN, M36ZRKH.BIN - см. ROM_IDE.ZIP во вложении). ПЗУ при включении питания вместо ORDOS сразу грузит MBR-сектор с master-IDE в ОЗУ по адресу 1:0000 (т.е. с начала второй физической страницы памяти) и передает туда управление. M35* работают с IDE с портoм 0F500h, M36* - с портoм 0F600h. Суффикс *RK* обозначает прошивку для клавиатуры RK-86, *MS* - для клавиатуры МС7007 по лениградской схеме.
- Вариант загрузки из ORDOS. ПЗУ F800 при этом может быть любым. ПЗУ F800 грузит ORDOS и передает ей управление. Под ORDOS используйте утилиту HddF600$.ord (ее можно прошить в ROM-DISK - см. IDEF600.ZIP во вложении), которая использует загрузчик, полностью аналогичный Мониторам, но корректирующий в загружаемом с IDE-F600 коде MBR-загрузчика и BOOT-сектора CPM все вызовы адреса 0F834h (это подпрограмма чтения с IDE 512-байтного сектора в Мониторах М3*H.BIN) на вызов своей подпрограммы, которая читает с HDD, но не с порта F500, а с F600.
Дальнейшая загрузка происходит так, как написан MBR (в настоящее время он позволяет грузиться по выбору с любого из 4-х primary разделов master-HDD, где есть загрузочный образ CPM. Выводится меню - список меток_дисков [offset +20h] соотвествующих разделов). MBR (а далее и BOOT-сектор раздела) используют п/п 0F834h (или п\п предоставляемую HddF600$.ord), которая в числе прочих параметров возвращает и базовый адрес ППА IDE. Далее этот адрес передается в CPM как базовый адрес порта IDE (F500/F600/...) и ядро CPM само себя соответствующе корректирует. Т.е. не важно какой адрес порта IDE будет передан из MBR\BOOT (он может даже не быть F500/F600, а быть, к примеру, F567).
В качестве образа диска для загрузки с IDE рекомендую диск с игрушками (на нем более-менее свежая [читай работоспособная] версия ОС с поддержкой IDE, в архиве есть readme), да и лучшего теста для Z80CardII чем игры - не придумать :
http://orion-z.hoter.ru/335/5480_games2.zip
В силу вышеописанного алгоритма работы, корректировать ОС для работы на порту, отличном от F500 не надо, все корректировки адреса ППА IDE надо делать только в Мониторе (ПЗУ F800) или HddF600$.ord. Некоторые CP/M утилиты, к примеру fat.com, fdisk.com, которым необходимо лезть к IDE "напрямую", т.е. мимо CPM, работают с IDE через драйвер IDEBDOS.COM. Этому драйверу при старте можно в командной строке передать параметры, в т.ч. и номер порта IDE. Например:
IDEBDOS port:f600
Залить образ HDD на реальный IDE-диск под Windows можно утилитой HddUtil.exe:
http://orion-z.hoter.ru/file/355/4538_HddUtil.zip
Утилита консольная (т.е. запускать из CMD - оно напишет подсказку). Я ее тестировал на чтении/заливке образов с/на как реальных винтов (подключенных к IDE материнской платы), так и для CompactFlash в обычном китайском USB-адаптере (CardReader). Например, чтобы записать образ GAMES.OHI на hdd, установленный в системе вторым, надо выполнить примерно такое:
hddutil c:\temp\games.ohi 1: /c=131072
На вопрос ответить "Yes". После завершения счетчика записанных секторов hddutil сообщит "Complete", что означает, что все записалось.
После записи образа, команда
hddutil /list
для привода 1: должна показывать наличие двух СРМ партиций
Выкладываю исходники CPM с поддержкой HDD. Основная часть (все что кроме HDD) делалась давно (примерно 1995г), структурно я многое с позиции сегодняшнего опыта сделал бы по-другому. Но переделывать это сейчас - не вижу смысла: нет пользователей, а оно и так нормально работает. Покрайней мере это единственная версия CPM на Орионе, где кроме всего прочего централизованно поддерживается расширенное ОЗУ и прерывания (ну и HDD c MBR схемой партиций).
-
В-общем, в помощь желающем поковыряться в чужом коде (чтобы не заморачиваться с дизассемблером). Указания на ошибки и советы по оптимизации кода (уменьшении размера кода или по быстродействию) приветствуются.
И это, "не стреляйте в пианиста - он играет как умеет". :)
Есть. Только не для Ориона, а для N8VEM:
http://n8vem-sbc.pbworks.com/Juha-SD-Interface
Я там копался, исходники всех нужных процедур есть.
Я решил пока это не переносить в свой текущий проект, т.к. программный SPI будет в несколько раз медленне, чем параллельный программный же IDE и CompactFlash (который и так то не шибко быстр получается - чуть быстрее дисковода). Правда, это на такте 3,5МГц. С ростом тактовой частоты будет пропорционально расти и скорость программного SPI или IDE, а скорость дисковода останется прежней. :)
Мне представляется, что вариант с SD/MMC надо делать уже сейчас. Думаю ewgeny7 закончив решать основные вопросы, сделает в контроллере максимальную тактовую частоту процессора и "стандартную" для совместимости с имеющимся программным наследием Ориона. Интерфейс SPI не следует делать через ВВ55 - это будет медленнее. Надо делать однобитные порты. Я об этом уже говорил.
И еще. Так и не смог скачать Ваш эмулятор. Может Вы его прицепите в ответном посте?
Коллеги, вариант IDE на 8255 получается довольно медленный, т.к. сигналы WR/RD на шине IDE генерятся программно. Где-то я видел вариант, когда один из портов 8255 работает в режиме 1 и тогда сигналы на "дочерней" шине (т.е. IDE) генерятся автоматически при записи/чтении со стороны процессора. Это экономит несколько десятков тактов в цикле считывания блока и следовательно сильно быстрее. Ссылку увы потерял.
P.S. Нагуглил что-то похожее:
http://8bit.yarek.pl/interface/yamod...55/ide8255.txt
Вполне возможно. Надо разобраться. Но можно порты IDE положить на память, без ВВ55. Можно поставить регистры с защелками для данных, и обращаться к IDE системными WR/RD. Может быть хватит и одного регистра для защелкивания, к примеру, старшего байта, а младший напрямую. Но без WAIT не обойтись.
Первые IDE имели 8/16-битный режим данных - было проще.
Я читал этот документ еще до внедрения, то так и не понял, "за чей счет банкет" когда один из портов 8255 "работает в режиме 1" - чем генерируются управляющие сигналы (строб данных для IDE), если в цикле только прочитывается 512 байт? А ведь надо еще 256 раз выдать строб, чтобы IDE поняло прочитали ли мы данные и можно ли выдать из буфера на шину следующее 16-разрядное слово..
Кроме того, у автора этой заметки написано, что при подключении IDE к ВВ55 используется только кабель, а как показывает практика, тут не обойтись без инверторов, т.к. при получении /RESET ВВ55 обнуляет все порты, что приводит в загадочность IDE (у него инвертированные сигналы управления, и ноль - это активный уровень). Такое ощущение, что в железе это никогда не работало. Есть ли где-то инфа про это?
Уважаемый Error404!
Так как все-таки без лишнего гимора получить Ваш эмулятор? Может можно в личку?
Error404, скорее всего в документе ошибка и это не руководство к действию, а просто "мысли на тему". В режиме 1 ВВ55 хорошо согласуется с интерфейсами типа Centronics, которые требуют handshake типа строб/готовность.
Скорее всего имелся в виду режим 2, который и служит для согласования двух шин. Но увы 8-битных Т.е. для 16 бит старшую половину IDE надо сделать двунаправленной защелкой c 3-м состоянием, а при записи-чтении в младший байт ВВ55 автоматически сгенерит сигналы чтения-записи на стороне IDE.
Таким образом, для записи в IDE надо записать сначала старший байт, потом младший (с автоматикой), а для чтения - наоборот: прочитать младший (с автоматикой) а потом старший.
Пошел думать дальше.
Сорри, забыл. :)
В сообщениях в личке, похоже, нельзя делать вложения (или я не разобрался как это сделать). Выложил тут:
http://ifolder.ru/14453727
Исходники нужны?
---------- Post added at 11:23 ---------- Previous post was at 11:08 ----------
Да, я тоже так и понял идею. Но ломает концепцию "только ВВ55 без прочих наворотов" 16-битность интерфейса. Многие самодельные разработки применяли "8-битный IDE" (когда из каждого 512-байтного сектора читается только 256-байтная половинка) - такие схемы действительно получаются простыми и быстрыми, но теряется возможность читать содержимое, записанное, к примеру в FAT-партиции (т.к. надо читать весь сектор, а не половинку).
Я вот тоже подумал, что младшую половинку IDE можно просто сажать на шину машины, безо всяких ВВ55, максимум через буфер 245. По протоколу RD/WR они совместимы. А для старшего байта можно сделать "теневой регистр" на чем-нибудь типа двух встречно-параллельных 273/573, который со стороны машины видится по отдельному адресу, но автоматически заполняется при чтении/записи младшего байта IDE.
AlecV, подобная схема подключения IDE использовалась в Вектор-06ц, есть уже готовая рабочая схема.
b2m, а где можно посмотреть на схему ? Какой есть софт под нее ? IMHO она должна подходить на все 8-битки на ВМ80/Z80.
Спасибо! Скачал. Исходники не нужны, а вот хотя бы какое-то руководство пользователя очень бы даже надо! Хорошо, что описана структура образов и утилит, но какие кнопочки нажимать, чтобы переключить РУС/ЛАТ (потом, правда, вычислил!), как отключить дебагер, если его нечаянно запустил и еще много чего сразу захотелось узнать. Интуитивно разобраться не получилось. Нажимая методом тыка кнопочки, влетал в какой-то режим с зелеными символами и непрерывным звуком. Выбраться из этого удавалось только заменой файла "ini" на оригинальный. Как понял, защиты от "дурака" нет, а автор всегда нажимает кнопки правильно! На Вашем сайте руководство пользователя тоже не нашел, а может плохо искал. Шокирован количеством Мониторов! Вот что получается, когда авторы бросают свое детище.
Далее. Это конечно хорошо, что есть возможность выбрать различную клавиатуру в настройках, но как сделать чтобы русские символы, выводимые на экран, совпадали с тем, что написано на клавишах моей ПС? И еще: замените, пожалуйста, "Sugona(j)ko mode" на "Original mode". Мне, представляется, что это будет более корректно.
Думаю надо бы открыть отдельную тему по эмуляторам. Раз Вы у нас главный программист и эксперт по Ориону, то будем пользоваться Вашим эмулятором. Будем в режиме онлайн учиться пользоваться Вашим детищем. Одновременно и "блохи" выловим! Как Вы считаете?
Я против такого подхода к моей персоне. Потому что во-первых это не так, а во-вторых слишком много накладывает обязательств на мою деятельность "just for fun", от которых она перестает таковой быть.
-
Блох в эмуляторе безусловно есть, некоторые известны, но руки не доходят устранить. Отладчик тоже неважный - главным образом оттого, что я ставил цель "побыстрому что-нить слепить". У b2m в этом плане куда как более перспективный эмулятор:
http://bashkiria-2m.narod.ru/
--
Описание - это самая сложная часть работы, т.к. самая неинтересная. :)
Подумаю на этот счет, когда буду в очередной раз ковырять эмулятор - подумываю заэмулировать SD-карточку (чтобы затем ковырять CPM на предмет SD). Кстати, желательно общими усилиями сформировать видение как оно будет подключаться.
b2m, Да, именно такое и хотелось. Монотонные ограниченные мысли - сходятся :)
Еще бы порядок байтов поменять... , а то много плясок с указателем HL.Цитата:
;запись сектора
SAVE: INR L
MOV A,M
OUT 58H ; при записи в 50 порт записываются 2 байта
DCR L ; 1 находится в 50, 2 в 58.
MOV A,M
OUT 50H
INR L
INR L
JNZ SAVE
P.S. Не получится. Сначала надо обработать старший байт для "теневого" ркгистра, а потом младший, а в памяти они лежат последовательно. Для чтения все нормально.
P.P.S. Такая схема много кому приходит в голову, еще вариант:
http://www.hanssummers.com/computers.../ide/index.htm
Вы, в одном из постов, правильно сказали, говорунов на форуме много, а вот реально никто ничего не делает. У меня тоже много своих дел, и они никаким боком не стыкуются с Орионом. Не в пример Вам, я порядком все по забывал за прошедшее десятилетие. Вы активно находитесь в орионовской теме. Мне показалось, что Вы, я и Евгений, пожертвовав немного своим временем, смогли бы довести проект до логического конца и получить хорошую разработку.
Я безусловно буду заниматься,т.к. пока это вроде бы интересно, но я склонен к "неполучилось-фыркнул-бросил", как это уже к примеру получилось с попыткой портирования UZIX. Поэтому я никакие обязательства, или даже просто планы, не берусь выполнять. Тут ведь как выходит: получится - хорошо, не получается - "ну не смогла".
Попробовал залить образ games.ohi на Compact Flash карточку 256МБ через китайский CardReader. Ничего не получилось, система пишет отказано в доступе. Консоль запускал от имени администратора. С чем это может быть связано, и как можно получить доступ к диску?
ps: в Windows штатными средствами на карту все пишется и стирается с нее.
Дмитрий2012, попробуй через переходник ide-компакт флэш записать.
через китайский картридер может и не получится ни чего записать.
Попробовал, все тоже самое. Единственное заметил, что через переходник ide-компакт флэш,теперь определятся серийный номер флешки и биос. Посмотрел акронисом, что утилита сделала с флешкой. На ней создаются тома на 32МБ и 1.953 Мб. Непонятно, то ли я что не так делаю, то ли что-то с утилитой не так...
Разобрался, похоже флешку перед использованием этой утилитой нельзя не форматировать, не инициализировать. В акронисе я ее очистил (функция очистить диск), и после этого все записалось нормально.
Не очень нормально записалось. MBR на диске есть (hddutil показывает 2 раздела), но партиций правильных - нет, в hddutil /list должны быть разделы "CP/M, CP/M" (элементы списка и их типы - по количеству разделов), а у вас почему-то "FAT, CP/M".
hddutil открывает и пишет устройство как файл (RAW), т.е. в принципе ему все равно что там: винда обслуживает ввод-вывод на устройство. Запускать надо под админом, все верно (т.к. параллельный процесс может этот же файл держать, тот же диспетчер дисковых устройств например). По этой же причине, лучше не деражать несколько таких процессов параллельно работающими (hddutil, акронис, диспетчер дисков и т.п.). Пока у меня на разных платформах-клонах винды-NT (2000, XP, Win7) hddutil работало, но как говорится, гарантий не даю.
Самый хороший эксперимент - записать образ образ под Линуксом командой dd. Акронисы, win32DiskImager и тому подобная Win-туфта, лазящая к дискам через свое API, меня неоднократно подводили при записи образов для моего OrangePC (писали мусор, или не с начала карты, или еще как-то). Теперь пишу образы на карту только линуксом через dd (кстати, и работает быстрее всего если угадать с размером блока на запись).
А самая хорошая проверка - потом прочитать образ с карточки во второй образ-файл и файлово сравнить оба образа на отличия (в ТоталКомандере или под Линуксом тупо по diff).
Оригинал то без ошибок, в эмуляторе с него обе партиции видны и грузятся правильно, с boot-меню и обе партиции?
Вот, вынул из ромдиска последние (вроде) бинарники TST2SD$, MBOOT$ - может пригодятся для тестирования контроллера.
- - - Добавлено - - -
Дмитрий2012, а TST2SD$ с IDE работает? Написано под эмулятором, на реалах проверялась только с SD-картами, режим IDE на реалах еще не проверяли. Интересно. :)
кнопка D (Device) : выбрать устройство (SD или IDE Master или IDE Slave)
- - - Добавлено - - -
Вот еще программулина для тестирования разъема IDE схемы на ВВ55 на порту F600. Может кому пригодится.
В архиве исходник и бинарник для CP/M (PIN-IDE.COM PIN-IDE.PAS), простейший транслятор COM-файлов в ORD (для базовых консольных функций) COM2ORD.COM - с его помощью полученный в CP/M бинарник под CP/M же транслирован в PINIDE.ORD , который можно запустить в ОРДОС.
Загрузчик MBOOT$ работает нормально, а вот TST2SD$ похоже глючит. После подачи команды R, чтение с диска происходит только один раз, потом надо опять несколько раз нажимать на клавишу D, чтобы опять выбрать устройство IDE мастер. Иначе сыпятся какие-то ошибки. Во время теста, при чтении секторов с диска меняется цвет фона и шрифт становится зеленый, интересно на реальном Орионе-128 тоже цвета меняются во время теста или это очередной глюк Орион-ПРО?
Вот видео как запускается тест и работает команда R (Read). Прошу прощение за качество картинки.
https://youtu.be/HGn6-OzmyHg