Просмотр полной версии : ПК8000 - загрузка с внешних носителей
hantarex
17.04.2014, 11:13
схема и печатная плата в diptrace контроллера вичестера для ПК8000 здесь (http://zx-pk.ru/showpost.php?p=746054&postcount=99)
прошивка ПЗУ и утилиты здесь (http://zx-pk.ru/showpost.php?p=748692&postcount=101)
замечания по печатке: не забываем ставить перемычку 20-16 на разъем ПК8000. конденсатор С9 47-1000пФ желателен, у меня без него плата не завелась.
автор всего этого щастья DemonId7, за что ему большое спасибо:)
demetrius2003
17.04.2014, 17:39
Ога! Согласен. Осталось найти её рабочую в железе:)
И да! То, что есть в эмуляторе b2m - варианты disk и kdos это вообще что?
Где можно почитать о cp/m? Может есть доки по программированию под cp/m?
Что такое pk8000_ngmd.bin и ramdos.sys?
Закончу дизассемблировать ПЗУ возьмусь плотнее за cp/m.
http://www.seasip.demon.co.uk/Cpm/
http://www.cs.ucr.edu/~stelo/cpm/
http://www.retroarchive.org/cpm/
http://www.cpm.z80.de/
доступно все мануалы и даже оригинальные исходники
не говоря уж про кучку дизассмов ;)
DemonId7
17.04.2014, 19:13
Попробовал на железе. Определяется без проблем. А вот с процедурой считывания 16-ти битных данных пока проблемы. Явно первый байт считывается нормально, а следующий уже "нагло врет". Видимо в промежутке между считываниями пропадает сигнал /RD на винт, а тот воспринимает это как квитирование и выставляет следующие пару байт на линию. Видимо накосячил в коде :)
hantarex
17.04.2014, 19:51
а в каком режиме ВВ55 работает?
DemonId7
17.04.2014, 20:11
В режиме 0. Других я не знаю.
Кажется понял в чем проблема. У меня чтение 16-ти битного слова оформлено в виде отдельной подпрограммы:
; на входе:
; A - номер порта, откуда читаем
; на выходе:
; HL - принятые данные
hdd_In:
push B
mov B, A
mvi A, 92h
out PORTCMD ; A, B - ввод, C - вывод
mov A, B
ani 00000111b ; оставляем только биты адреса порта
ori 01000000b ; set /RD /CS
out PORTC
in PORTA
mov L, A ; LO(data) = port[A]
in PORTB
mov H, A ; HI(data) = port[B]
mvi A, 11100111b ; отключаем устройство
out PORTC
pop B
ret
Судя по всему проблема возникает при групповом чтении. Наверное установку режима нужно вынести за цикл. Попробую, как только смогу.
hantarex
17.04.2014, 20:33
ну да, установку режима выносим за цикл. и зачем каждый раз винт отключать?
вроде надо только /RD дергать?
1. проверяем готовность винта
2. пишем головки/цилиндры/сектора
3. пишем команду чтения
4. в цикле читаем 256 слов, стробируем /RD
я так делаю.
есть еще прикольная команда ECh - получить параметры диска, также считывается 256 слов, но как расшифровывать эти данные я не в курсе:( видимо, плохо искал
DemonId7
18.04.2014, 09:59
Я и пробую EC. Только вместо ожидаемых параметров винта приходят какие то левые значения.
Попробовал выдрать код из оригинала. Результат тот же самый - левые данные. Да и не понимаю, как он вообще работает на MSX? Там же ошибка на ошибке :confused: Почему при ожидании готовности винта используется:
bit 0,c
jr z,erexpl ;explain error
? Бит 0 (ERR) вроде бы устанавливается в единицу при ошибке, а здесь уход на ошибку при его нулевом значении. Толи я стандарт неправильно помню, толи автор использовал какой то трюк, недоступный моему пониманию. Это не говоря о том, что при старте есть возможность уйти на цикл чтения 512 байт, в то время как HL не инициализирован!
В общем, сдуваю пыль со старой двоечки и отлаживаю на ней подпрограммы чтения/записи и идентификации, тем более нашел свои старые исходники (должны быть рабочими). Затем просто портирую на ПК. Если и так не заработает, значит действительно схема неудачная и придется переходить на проверенную от вектора. Можно еще попробовать вернуться к схеме оригинала, где управление CS по линии A2. Тут переделки то на пару раз ткнуть паяльником :)
Надеюсь вечером все успею сделать и будут уже определенные результаты.
hantarex
18.04.2014, 10:01
насчет контроллера от Вектора я думал, но у меня нет ИР23:( и заказывать м/с буду нескоро. еще у Вектора шина адреса инвертирована, но это небольшая проблема.
кстати, порты 50h+ выбрал именно по аналогии с Вектором:)
DemonId7
18.04.2014, 10:29
Я о том контроллере еще год назад думал, даже схэму начертал. ИР23 у меня штук 6 точно есть, так что, если что, могу поделиться :)
Собственно схема, по которой хотел делать контроллер:
47533
hantarex
18.04.2014, 10:37
а почему не собрали?
Наверное установку режима нужно вынести за цикл.
Хочу напомнить ещё о таком факте: при установке режима ВВ55, все порты, которые конфигурируются на вывод, устанавливаются в ноль. Это касается также и порта С. Таким образом, управляющие биты должны активироваться еденицей, т.е. для инверсных сигналов нужно ставить инверторы. Как минимум - CS. А чтобы после сброса (когда все порты будут на ввод) он случайно не активировался, его надо притянуть к нулю.
DemonId7
19.04.2014, 01:37
hantarex, не всегда наши желания совпадают с возможностями.
b2m, я уже думал про это. Но ведь схема с msx и вроде работает? Или нет?
Попробовал на двоечке свой старый исходник. Работает, винты и CF определяются без проблем. Перенес на ПК и опять не пашет. Была мысль врезать регистр ИР23 между портом C и винтом, чтобы не терять управляющие сигналы. Но так прикинул: схема лишь на одну микросхему экономичнее векторовской, а гемороя с программированием на порядок больше, что отрицательно сказывается на размере кода. Начну-ка я завтра векторную схему собирать. Она хотя бы рабочая и проще будет код отладить, а то не знаю на что и грешить, толи в схеме проблема, толи в коде где-то запутался.
DemonId7
19.04.2014, 09:45
Кстати, схемка, что выложил, малость некорректна. Инверторы на IOR и IOW не нужны. Исправил аттач в том посте. Теперь порты полностью соответствуют вектору.
DemonId7
20.04.2014, 11:19
Собрал векторную схему. Пока просто идентификацию устройств попробовал:
47584
47585
Первый - это CF на 128Мб от фотика. Второй - древний винт IBM, на 171 Мб. А вот винт на 1Гб не откликается.
"Программа" на бейсике, так как у ассемблерной при приеме почему то идут пропуски данных. Возможно из-за сборки "на коленке" идут сильные помехи и шумы, усиливающиеся по мере нарастания скорости обмена. Пока ничего кроме как вставить задержки в голову не приходит.
Поначалу вообще без кондеров собрал. Даже на васике шли пропуски данных при приеме. С кондерами воть запустилось :)
ЗЫ: а схема с ВВ55 оказывается популярна у буржуинов на микроконтроллерах. И таки да, там между ВВ55 и управляющими линиями винта стоят инверторы! b2m, был прав на счет обнуления линий при смене режима ВВ55.
Опрос HDD из бейсика - прикольно. На векторе я разве что головами fdd двигал из под бейсика.
hantarex
20.04.2014, 12:13
DemonId7, а где найти описание полей для ЕСh? ну там, имя винта, колво головок/цилиндров/секторов?
DemonId7
20.04.2014, 13:16
Можно в спецификации посмотреть: ATA-3 (http://www.t10.org/t13/project/d2008r7b-ATA-3.pdf)
Или у Кулакова в "Программирование на аппаратном уровне" и "Программирование дисковых подсистем". Там же есть хорошее описание MBR и различных типов FAT.
---------- Post added at 13:16 ---------- Previous post was at 13:04 ----------
Опрос HDD из бейсика - прикольно. На векторе я разве что головами fdd двигал из под бейсика.Кстати, тот редкий случай, когда васик оказался полезней асма ;)
Уже не знал что думать, почему винт выдает липу. От нечего делать прямо на "суре" накрапал простой опрос портов 50h-57h, да вывод на экран. Гляжу, значения вроде нормальные. Послал команду out &H57, &HEC и считал несколько десятков слов из 50h и 58h. Вроде совпадают с ожидаемыми, только почему то явно не на своих местах, то есть как будто часть данных пропущена. Так и допер, что дело в помехах и что нужно поставить кондеров по питанию микрух. И ведь помогло!
Сейчас вот думаю, может платку развести под это дело? А затем уж к подпрограммам чтения/записи переходить?
hantarex
21.04.2014, 08:58
давайте, разводите!:)
а я еще с ВВ55 поковыряюсь.
DemonId7
22.04.2014, 15:52
Работает четко и очень быстро :)
Читает без проблем. Для примера сфоткал считанные описатели разделов пары винтов:
47618
47619
Запись пока не пробовал, но думаю и с ней проблем не будет. Пора прикидывать дальнейшие шаги. Какие будут предложения? Встраивать ОС в ПЗУ? Ставить недоступную для программ ОЗУ? FAT нужен? Есть желающие ковырять CP/M? Или хотя бы объяснить по русски, где и что нужно изменять, то есть структуру этой ОС в двух словах.
Кстати, среди кодов разделов жеских дисков есть код идентифицирующий CP/M. Выходит она уже была на винтах?
Пора прикидывать дальнейшие шаги. Какие будут предложения? Встраивать ОС в ПЗУ?
Да, наиболее простой вариант - CP/M в ПЗУ. При холодной загрузке найти раздел на винчестере, помеченный как CP/M, а далее просто добавлять смещение к первому сектору раздела при работе с секторами. Нужно только учесть, что размер сектора CP/M 128 байт, а физический сектор 512. Нужно будет сделать пару буферов для считанного и записываемого физического сектора.
Насчёт защищённого ОЗУ: вряд-ли наверное понадобится, если с записью в ОЗУ такие проблемы. CP/M-у нужно обычное ОЗУ, а не через порты.
DemonId7
23.04.2014, 00:37
А что брать за основу? Оригинальные сорсы версии 2.2 нашел, но хотелось бы чего-то более адаптированного под носители большой емкости.
hantarex
23.04.2014, 07:20
где то в сети видел БИОС 3.0 для СР/М 2.2 - он вроде винты поддерживает.
найду - кину ссылку.
DemonId7
23.04.2014, 21:00
Я так понял, что нужно менять только модуль BIOS. В связи с чем вопрос. Среди его функций есть выбор сектора, цилиндра и буфера, но нет функции выбора головок. Почему и что делать? Вводить свою адресацию, преобразуя координаты ОС в свои внутренние?
Для cp/m "диск" всегда односторонний, всегда с сектором размером 128 байт
Остальное на совести биоса ;)
Отправлено с моего Nexus 7 через Tapatalk
---------- Post added at 21:09 ---------- Previous post was at 21:07 ----------
Нужно написать свой биос, который обеспечивает нужные точки входа
Приклеять к нему cp/m
Есть доки как и что писать.
Отправлено с моего Nexus 7 через Tapatalk
DemonId7
23.04.2014, 22:32
Начну потихоньку писать биос. Я так понял он одинаков для всех модификаций CP/M, так что выбор сорсов можно отложить на потом.
Кстати, чем бы форматнуть винт под CP/M?
hantarex
24.04.2014, 09:20
как раз БИОС индивидуален для каждой платформы. это аппаратно-зависимая часть ос.
бдос и командный процессор аппаратно-независимы и одинаковы для всех машин.
Дмитрий (b2m) выкладывал сорцы бивиса для ПК8000, их можно взять за основу.
DemonId7
24.04.2014, 13:09
Под одинаковостью имелась в виду структура и функциональность модуля BIOS. За сорсы спасибо, но я уже почти все выдрал с оригинального МДОС. Это писать приходится со справочником ассемблера на столе, а выдирать легко, действие незнакомых команд даже по мнемонике можно угадать :)
После выложу, как только будут готовы дисковые функции. Последними вечером займусь, там еще некоторые вопросы нужно решить. В частности, разбиение разделов на логические диски, емкостью по 4-8 Мб. Тут с таблицами DPH и DPB непонятки. Где их хранить и кто их будет создавать?
hantarex
24.04.2014, 13:33
может, поможет.
как раз БИОС индивидуален для каждой платформы. это аппаратно-зависимая часть ос.
только БИОС и уникален, остальнойе (сам дос) - переносится с шагом в 1К (может быть 256 байт)
MOVCPM Relocate and execute (max) KByte CP/M system
MOVCPM n Relocate and execute n KByte CP/M system
MOVCPM n * Create relocated image in RAM of n Kbyte
CP/M system, ready for SYSGEN or SAVE
MOVCPM * * Create relocated image in RAM of (max) Kbyte
CP/M system, ready for SYSGEN or SAVE
SYSGEN Initiate SYStem GENerate program
http://altairclone.com/downloads/cpm/CPM%202.2/movcpm/Using%20MOVCPM.pdf
CP/M alteration for another system:
rewrite BIOS for new hardware
rewrite GETSYS/PUTSYS to read or write to boot tracks
rewrite FORMAT to format new disks with correct sectors and tracks
rewrite BOOT to boot system from system tracks
use MOVCPM to create CCP and BDOS image in memory, use SAVE to file it
use DDT to load moved image, plus new BOOT and BIOS, into memory
use SYSGEN to take memory image and write to test disk's boot tracks
reboot from test disk and debug results
глава из родной доки
CP/M Alteration (http://www.gaby.de/cpm/manuals/archive/cpm22htm/ch6.htm)
DemonId7
24.04.2014, 20:52
может, поможет.Еще больше запутался. В упор не вижу трансляции логического адреса в физический и наоборот :confused:
Видимо придется искать вменяемую доку по файловой системе, из исходников ничерта не понятно.
---------- Post added at 20:52 ---------- Previous post was at 20:14 ----------
Кто нибудь знает способ без лишних затрат преобразовывать логический адрес в C/H/S и обратно? Есть идеи?
Кто нибудь знает способ без лишних затрат преобразовывать логический адрес в C/H/S и обратно? Есть идеи?
А что, винт настолько допотопный, что не поддерживает LBA?
DemonId7
25.04.2014, 00:03
У меня разные есть...;) Хотелось универсальности, но в принципе действительно нет такой нужды.
Вроде разобрался. Идея жестко прошить таблицы параметров дисков непосредственно в bios мне не нравится. Будем делать как в досе - таблица параметров хранится непосредственно на носителе, в первом секторе. Один черт загрузчику, после поиска подключенных винтов, считывать информацию о логических дисках, вот заодно и таблицы считает.
У меня разные есть...;) Хотелось универсальности, но в принципе действительно нет такой нужды.
Вроде разобрался. Идея жестко прошить таблицы параметров дисков непосредственно в bios мне не нравится. Будем делать как в досе - таблица параметров хранится непосредственно на носителе, в первом секторе. Один черт загрузчику, после поиска подключенных винтов, считывать информацию о логических дисках, вот заодно и таблицы считает.
Там надо спец буфера в памяти, их размер зависит от размеров диска,
И они после доса в биосе
Т.е или делать лимит сверху и терять память
Или жёстко задать размер "диска"
DemonId7
25.04.2014, 08:29
А какие спецбуфера?
Если под вектора занятости блоков, то там пустяки получаются:
на 16Мб диск, с размером кластера 8Кб таблица займет всего 256 байт. Ну выделим 512 с запасом, хватит за глаза, все равно нет смысла делать слишком большие диски.
Таблица проверки директории не нужна, носитель-то не сменный. Вроде и все таблицы.
с другой стороны такие таблицы нужны на каждый диск
+ буфер чтения/записи
просто для информации
Корветовский диск, 5x1024*80*2
BLS = 2048 (размер блока)
DSM = 394 (блоков на диске)
DRM = 127 (записей в директории)
буфера
CSV=50
ALV=32
в cp/m биосе
буфер чтений 1к
буфер записи 1к
50*32*4(drive A-D) ~2504 байт
эт как помню.
при большом размере блока - потерери огромные ;)
128 байт будут на диске 16к занимать, ведь диск выдается блоками BLS
плюс в CP/M нет директорий (есть USER, но оно странНо, это просто скрытие части файлов из той-де root)
так что всё что на диске есть должно быть в одной директории
имхо разуменее сделать монитруемые разделы и делать их не очень большими.
или мапить раздел на кучу букв.
Извините, что влезаю, но вам точно нужен CP/M? Какие программы для ПК8000 требуют CP/M? Для запуска кассетных игрушек и программ не проще ли организовать чтение файлов с FATовского диска или раздела? И обмен с PC так удобнее.
DemonId7
25.04.2014, 21:08
Я уже думал на тему сделать один ALV, общий для всех дисков. Но, не могу точно сказать насколько это затормозит процесс смены активного диска. Поэтому испытания покажут, что предпочтительнее.
К сожалению уже второй день подряд вхолостую, не написал ни байта кода. Надеюсь на выходные наверстать.
---------- Post added at 20:08 ---------- Previous post was at 20:01 ----------
ivagor, программ довольно много на образах дискет. Практически все кассетные программы и игрушки продублированы в дисковых версиях.
Плюс я пытался запускать некоторые "левые", выуженные со старого сборника. Один из микрософтских бейсиков вполне запускался и работал.
Практически все кассетные программы и игрушки продублированы в дисковых версиях.
В эмуляторе b2ma я смотрел образы сдампленые Mickом и так и запомнил, что там те же кассетные игрушки, но "конверснутые" в .com, чтобы запускать из CP/Mа. Т.е. для работы то им CP/M не нужен, нужно только загрузить и запустить.
Один из микрософтских бейсиков вполне запускался и работал.
Если задача запускать и стандартные CP/Mовские проги - тогда, конечно, другое дело.
hantarex
25.04.2014, 21:20
Я предлагал подобие MSXDOS запилить. А то на сипиэм-диск задолбаешься софт с ББ переносить.
это я к тому, что на реале на асме кодить и компилить вряд-ли кто будет, удобнее в эмуляторе это делать.
по мне - так нужен файловый менеджер с поддержкой FAT и каким-нить куском сипиэм, типа ввод-вывод на консоль.
Я предлагал подобие MSXDOS запилить.
Очень здравая идея
Тем более что прикладному софту нужны только точки входа дома и биоса
А системный не очень то и нужен
А спец софта я так понимаю и не было
---------- Post added at 22:02 ---------- Previous post was at 21:58 ----------
И обмен с PC так удобнее.
На сегодня имхо удобнее не HDD а SD :)
За то у многих уже и pata некуда подключать
hantarex
25.04.2014, 23:10
IDE интерфейс аппаратной проще. И винтов у мну нет:) зато ведро CF-карт:)
вообще имхо, в глубокой теории
надо тогда сделать "интелектуальный" контроллер
который поключается к девайсу и берет на себя общений с "физикой"
пряча в том числе и работу с файловой системой
был бы протокол обшения с ним на компе, и всё
а что к нему уже подключено - уже мелочи
хош - реальный винт, хош - SD или CF, или обычная USB FLASH
из него торчит апи,
дай список "носителей"
смонтируй "образ" на "диск"
"дай списко файлов"
"открой файл"
"прочитай"
etc etc
p.s. и да, цп контроллера будет мощнее компа куда он подключен, но зато если протокол будет снандартный, то
a) можно подключить к куче компов, ибо код то будет общим
b) железку можно будет и через много лет реализовать на том железе и носителе который будет "завтра"
;)
На сегодня имхо удобнее не HDD а SD
HDD я не упоминал. Более того, в качестве "источника вдохновения" у меня перед мысленным взором стояла именно одна из реализаций общения с SD. Программная часть очень компактная и на асме 8080, вот насчет аппаратной в виде отдельного устройства не знаю.
hantarex
26.04.2014, 07:09
ivagor, поделитесь своей концепцией плиз.
Это не совсем концепция и совсем не моя :)
В качестве ориентира я думал про реализацию РК86 b2mа для девборды DE1. То, что для девборды - это не смертельно, там очень простой "контроллер" в ПЛИСине, у которого вроде был прототип на дискретах. У программной части есть ограничения (если не ошибаюсь, то как минимум 2 - файлы д.б. нефрагментированные, что легко получится, если их не стирать, и объем <=2 Гб, что вобще сложно назвать ограничением для работы с 8битками), зато она очень компактная.
Мельком читал про другие аппаратные реализации, не буду уточнять, т.к. не помню деталей. Ведь ПК8000 не первый комп, в который есть желание быстро грузить файлы с SD.
---------- Post added at 11:16 ---------- Previous post was at 11:08 ----------
Признаю, что это на 99% оффтоп. DemonID7 уже сделал работающую железку, кроме того он нацеливается и на запуск CP/Mовских программ, что простая запускалка не может. С другой стороны b2m в реализации Башкирии-2М (да да, опять для DE1) хакнул CP/M (корректнее, наверно, сказать BDOS) и он стал работать с нефрагментированными образами дисков записанными на SD. Деталей насчет полноты функциональности данного решения я не знаю.
hantarex
26.04.2014, 10:07
мона тему переименовать в "ПК8000 - загрузка с внешних носителей":)
а насчет интерфейса SD-карты - концепция из ямахи взята, SPI-интерфейс на сдвиговом регистре. где-то даже схемы есть.
по поводу сипиэм - 10000 программ и все такое - а реально, кроме пары компиляторов, из них что-нить нужно?
лично мне нужно устройство для переноса из-в ББ в-из ПК8000 файлов, быстрее и удобнее плеера и компактнее, чем дисковод. проги пишуться в эмуляторе, реал нужен только для отладки нового железа.
по поводу сипиэм - 10000 программ и все такое - а реально, кроме пары компиляторов, из них что-нить нужно?
лично мне нужно устройство для переноса из-в ББ в-из ПК8000 файлов, быстрее и удобнее плеера и компактнее, чем дисковод. проги пишуться в эмуляторе, реал нужен только для отладки нового железа.
Я собственно про это же
Если делать систему для древностей на современных носителях - это одна задача
Если запускалку софта - то совсем другая :)
А для девелопмента (который сейчас почти навернека будет под bare metal, то совсем третья
DemonId7
27.04.2014, 09:22
Народ, а как в асме для 8080 создаются виртуальные сегменты? Ассемблер не то что virtual и absolute, даже segment отвергает. В доках на m80 кроме про предопределенные ASEG, CSEG и DSEG ничего нет. Или здесь как то по другому компилируют перемещаемый код и данные?
ORG дает слишком много лишнего кода. при компиляции. EQU - тоже не выход для подпрограмм, да и данным явно указывать адреса как то несерьезно.
В доках на m80 кроме про предопределенные ASEG, CSEG и DSEG ничего нет. Или здесь как то по другому компилируют перемещаемый код и данные?
Ну, есть ещё COMMON - общий именованный сегмент. Но он вроде как для данных, типа описание какой-то структуры. Адрес начала этого сегмента для всех модулей будет потом одинаковый. Вроде даже гарантируется, что такие сегменты будут следовать друг за другом в алфавитном порядке.
ORG дает слишком много лишнего кода. при компиляции. EQU - тоже не выход для подпрограмм, да и данным явно указывать адреса как то несерьезно.
Что ты понимаешь под перемещаемым кодом? Конечный бинарный модуль, который можно грузить по любому адресу, или просто библиотеки .lib и модули .rel?
M80 генерирует перемещаемые модули .rel, которые потом собираются в конечный бинарник линковщиком L80.
DemonId7
27.04.2014, 14:39
Уже разобрался, виртуальные адреса обеспечивает PHASE. Правда почему то компилятор проглатывает только одну и матерится на вторую. Странно ограничение :) В общем все готово, подпрограммы протестированы и отлажены. Дело за малым - парсер MBR, сканирующий разделы и монтирующий логические диски. Если бы не устал как черт, то уже вечером запустил бы.
Уже разобрался, виртуальные адреса обеспечивает PHASE. Правда почему то компилятор проглатывает только одну и матерится на вторую. Странно ограничение :)
.phase
.dephase
Вложенные вроде не имеют смысла
Про ограничения в штуках - не помню.
DemonId7
28.04.2014, 07:42
Я не знал про DEPHASE, в найденых сорцах этого не было :)
DemonId7
29.04.2014, 15:01
Ну все, еще винт разметить и можно испытывать. Никто не знает, можно ли в эмуле подключить образ винта?
hantarex
29.04.2014, 15:46
конечно можно. из кофигурации Вектора копируешь строку с адресами портов (50h)
и описание конфигурации винта. образ винта на сайте Дмитрия (b2m) есть.
DemonId7
29.04.2014, 19:09
Забыл про перенос буфера экрана в старшие адреса :( Нужно малость переделать, а то код наезжает на E000. Видимо в ПЗУ переедут остатки дисковых функций.
DemonId7
30.04.2014, 17:16
Что-то не получается образ с диска снять. В начале файла что угодно, только не MBR. Или все эти госты и акрониксы как-то по своему сектора считают, или я чего-то не понимаю. Только уйму времени даром потратил :(
dd if=/dev/sda of=xxx ?
юникс dd
тупо посекторная копия диска/раздела
DemonId7
30.04.2014, 17:37
Предлагаете мне юникс поставить? :)
Я лучше после выходных на рабочем компе сделаю слепок. Там есть нормальный дос, с нормальным diskedit'ом.
Предлагаете мне юникс поставить? :)
.
Зачем ?
Livecd или USB
И писать на usb
hantarex
30.04.2014, 19:56
для Поиска есть образ на 40Мб - не подойдет?
или вы хотите снять, отредактировать и залить?
кстати да, а какой образ нужен ?
может проще его сделать ?
hantarex
30.04.2014, 22:06
Образ с MSDOS и софтом. Гляньте на сайте b2m, или завтра ссылку брошу.
DemonId7
30.04.2014, 23:39
esl, свободного сидюка нет, а с usb не грузится, виснет. Причем именно на текущей материнке, предыдущие худо-бедно работали с флехи.
hantarex, нужен образ чистого винта, разбитого на разделы по 8-32 мегабайта. Можно даже с загрузочным разделом DOS, его мой загрузчик просто пропустит.
А вообще, все к лучшему. Во первых, за эти дни как раз успею капитально проверить код, в котором 100 пудов немало ошибок. А во вторых, как ни крути, но нужна программа "форматирования" разделов под CP/M, раз уж захотелось универсальности. Она не сложна, но требует времени. Ей и займусь завтра.
PS: образы сидюков не катят по той простой причине, что нет свободных болванок. Все таки 21 век на дворе, такой экзотики не держим :)
hantarex
01.05.2014, 08:16
http://bashkiria-2m.narod.ru/files/disk/poisk_hdd.rar
40Mb, один раздел MSDOS.
http://bashkiria-2m.narod.ru/files/disk/vector_hdd.rar
винт для Вектора, 10Mb?, отформатирован под сипиэм, без разделов вообще, и даже без MBR.
винт для Вектора, 10Mb?, отформатирован под сипиэм
Там, как-бы, не совсем сипиэм. Первый образ загрузочной дискеты заливается с нуля один-в-один, а остальные - друг за другом, но без загрузочной области.
DemonId7
04.05.2014, 10:18
b2m, а какие области памяти используют BDOS и CPP из твоего KDOS (с эмуля)? Что-то виснет со словами "Bdos Err On A: Select". Толи диск неправильно форматнул, толи где-то память портится... Главное, инициализация BIOS проходит нормально, управление уходит в BDOS и дальше идут вызовы дисковых функций из BDOS, вплоть до зависания после чтения первого сектора.
b2m, а какие области памяти используют BDOS и CPP из твоего KDOS (с эмуля)?
C400-D9FF BDOS
DA00-DFFF BIOS
E000-E5FF экран
E800-EFFF фонт
Выше F700, как я понимаю, использует бейсик и биос самого ПК8000. По крайней мере ПК8000 обнуляет память выше F000 при сбросе.
---------- Post added at 15:22 ---------- Previous post was at 15:20 ----------
Ты разобрался с буферами под контрольную сумму записей каталога и карту свободных блоков?
DemonId7
04.05.2014, 16:57
У меня практически то-же самое:
DA00-DFFF - BIOS
E000-E5FF - буфер экрана
E600-EDFF - карты свободных блоков
EE00-EFFF - буфер чтения/записи (пока один, потом второй добавлю)
F000-F7FF - знакогенератор
Вроде не пересекается нигде.
А зачем вектора проверки? В доке вроде сказано, что они нужны для контроля смены носителя, вот я и выставил размер (CSK) в ноль, и указатель на буфер (CSV) тоже обнулил. Разве не так?
---------- Post added at 15:57 ---------- Previous post was at 15:20 ----------
Грёбаный watcom! Взял и выровнял поля в структуре DPB, даже не предупредив. Не, ну сволочь ли?
Исправили ручками загрузочный сектор и CP/M загрузилась :cool: На команды вроде реагирует. Правда не пойму почему курсор выключен.
Еще помучаю и если глюков не найду, завтра выложу сорсы. Заодно и утилитки для форматирования винтов в формат CP/M. Под DOS - сразу диски форматирует. Под винду - "форматирует" образы дисков.
DemonId7
04.05.2014, 17:13
Так сказать для истории :)
47783
47784
DemonId7
05.05.2014, 21:44
Не прошло и года :) В общем сорсы пока нет смысла выкладывать, где-то непонятная ошибка, плюс на выходные планирую их доработаь до товарного вида.
Пытаюсь записать файлы по команде SAVE. То пишет, то ошибку выдает. Зависимости от размера блока не заметил. Самое интересное, что ошибка только на диске малого объема, с кластером 1Кб. На диск в 8Мб, с кластером в 4Кб, пишется без проблем. Возможно все-таки блок параметров неверно расчитываю.
В архиве файлы для эмулятора:
47801
В папке FRM утилитка для "форматирования" винта. Натравливается на образ винта, разбитого FDISK'ом на логические диски. Активный загрузочный раздел игнорируется, остальные преобразуются в CP/M. Параметр '-A' задает размер таблицы свободных блоков, пока нужно использовать только 256. Параметр '-D' - это количество отведенных под директорий кластеров. По умолчанию отводится 2 штуки. Сорс под DOS пришлось править, но времени протестировать не было. Завтра.
Большая просьба к тем, кто разбирается. Гляньте сорсы, правильно ли я расчитываю параметры дисков?
Ну и образ винта: http://myfolder.ru/files/40619284
На нем только SV.COM. Поначалу работала. После перезагрузки эмулятора перестала :)
47802
47803
DemonId7
05.05.2014, 22:49
Разобрался. Проблема с переносом файлов. Никак не найду вменяемой инфы по файловой структуре.
DemonId7
11.05.2014, 19:06
Что-то в теме тишина. Интерес еще не пропал? Выкладывать результат? Все работает и недописана лишь утилитка копирования файлов на винт из под доса.
hantarex
11.05.2014, 21:10
Конечно выкладывайте!!!
DemonId7
12.05.2014, 17:21
Все в архиве:
\emul - это для эмулятора, плюс исправленный образ винта: cf.rar (http://myfolder.ru/files/40671550)
\util\f8000w - "формат" файла образа винта, предварительно разбитого на логические диски. Этим редактировался образ в архиве. Разумеется под винду.
\util\f8000d - то же самое, но работает из под DOS с реальным хардом.
Параметр /a задает желаемый размер таблицы занятости блоков и позволяет косвенно управлять размером кластера, чем больше значение параметра, тем меньше размер кластера.
Параметр /d задает количество кластеров, отводимых под директорные записи. Количество записей зависит от размера кластера и составляет (размер_кластера / 32). Слишком большие значения заставляют комп "задуматься" при выборе диска, так как ему приходится считывать большие массивы данных с оглавления, для составления карты занятых блоков.
Параметр /t резервирует заданное количество треков. В утилитах реализовано, а вот в системе не стал, не вижу смысла в этой возможности. Так что не использовать, последствия будут непредсказуемы.
Параметр /h или /? даст дополнительные подробности.
Если винт содержит несколько логических дисков разной длины, то можно "форматировать" его в несколько проходов, задавая оптимальный параметр /a и /d для каждой группы дисков. Загрузчик умеет адаптироваться под разные диски, выделяя каждому памяти ровно столько, сколько необходимо. Поэтому можно подключить как 12 дисков по 1-2 Мб, так и 4 по 32 Мб, насколько хватит памяти. Для облегчения выводится подробная инфа по отформатированному диску, типа такого:
Format for PK8000.
>Select drive:
[0] Prim. master: WDC AC11600L Size: 1586592Kb CHS: 3148/16/63
[1] Prim. slave : none
[2] Sec. master: KTC CF Size: 126504Kb CHS: 251/16/63
[3] Sec. slave : none
-skip primary DOS partion.
-found disk: type 0x1, size: 2992Kb format drive? (Yes/No) y
Sector : 152df
Block size : 2048
BSH : 4
BLM : f
EXM : 0
Max block : 1495
Directory max : 383
AL0 : fc
AL1 : 0
Интерес представляет размер кластера (Block size) и макс. количество записей в оглавлении диска (Directory max). Если не устраивает, то при повторном запуске программа предложит сделать unformat, а затем снова форматнуть с более подходящими параметрами.
\system - здесь система с компилятором. В файле const.i80 в первых трех строках параметры компиляции:
BIOS_SIZE - размер скомпилированного модуля BIOS.M80.
SLAVE_ENABLE - если не равна нулю, то будут искаться все доступные винты (master и slave). При обнулении ищется только master, что ускоряет загрузку системы.
NDISK - максимально возможное количество дисков. Думаю 12-ти хватит.
Если при загрузке держать нажатой ПРФ, то произойдет выход в бейсик. Сделано для удобства, чтобы не тревожить лишний раз разъем с винтом.
Программа переноса файлов на винты CP/M будет готова в ближайшее время. Все равно нужно еще ПЗУшку приделать, для полноценного тестирования на железе. Я использовал эмулятор для записи файлов, а затем образ переносил на винт с помощью diskedit из нортон-утилит. Долго, зато опробовал на реальном железе. На фото. Пока все.
PS: Пора бы подумать и о разводке платы под это дело. Я в этом деле не силен и в лучшем случае смогу родить безобразие на фото (на котором и проводил все испытания) :)
hantarex
12.05.2014, 20:01
Круто - это еще мягко сказано:) как щас говорят - респект и уважуха!:)
DemonId7
13.05.2014, 10:08
Да ладно, это Дмитрию нужно сказать спасибо за прекрасный эмулятор, очень помогший в отладке и авторам МДОС, чьи дизассемблированные наработки легли в основу модуля bios. Если будет время и желание, то можно вообще оригинальный МДОС перенести на винт, все равно пракически весь код bios'а реверсировал :) Судя по малость "нестандартной" реализации функций boot там имеются какие-то отличия от оригинальной CP/M.
микродос эт расширение cp/m
как понял кое-что там от cp/m 3
а что-то своё, там есть действительно полезные функции
но местами там странное
есть например функция, которой передаётся адрес блока
в котором есть номер расширенной функции и его параметры ;)
единственная дока которуя я нашел profi dos ;) http://zxpress.ru/book.php?id=167
у микродоса как я понял есть два так сказать "биоса"
печатной инфы не видел, только копался в корветовских микродосах
есть "стандартная" cp/m табличка биоса
она использует "второй" bios
есть исходники "биосов" от вектора, и можно сказать корвета
RAM:E400 INIT_HW:
RAM:E400 C3 00 E6 jp j_int_hw
RAM:E403 INITBIOS:
RAM:E403 C3 03 E6 jp j_init_bios
RAM:E406 j_GRSTATUS:
RAM:E406 C3 20 E4 jp GRSTATUS
RAM:E409 j_GRINPUT:
RAM:E409 C3 29 E4 jp GRINPUT
RAM:E40C j_GROUTPUT:
RAM:E40C C3 32 E4 jp GROUTPUT
RAM:E40F j_ADRDPH:
RAM:E40F C3 6B E4 jp ADRDPH
RAM:E412 j_RWDISK:
RAM:E412 C3 6E E4 jp RWDISK
RAM:E415 j_getErrMsgTAB:
RAM:E415 C3 A7 E4 jp getErrMsgTAB
RAM:E418 exec09:
RAM:E418 C3 3B E4 jp j_exec09
RAM:E41B jCLEARCDISK:
RAM:E41B C3 30 E6 jp CLEARCDISK
а для функций ввода вывода в биос передаётся в регистре тип устройства куда выводить
консоль или aux там ..
RAM:E420 GRSTATUS:
RAM:E420 CD 3C E4 call CASEfrom3
RAM:E423 56 E4 dw jconST
RAM:E425 62 E4 dw jstatLPT
RAM:E427 43 E4 dw j_ret0
RAM:E429 GRINPUT:
RAM:E429 CD 3C E4 call CASEfrom3
RAM:E42C 59 E4 dw j_conIN
RAM:E42E 43 E4 dw j_ret0
RAM:E430 65 E4 dw j_AuxIn
RAM:E432 GROUTPUT:
RAM:E432 CD 3C E4 call CASEfrom3
RAM:E435 5C E4 dw j_putCHR
RAM:E437 5F E4 dw j_LSTPUT
RAM:E439 68 E4 dw j_AUXPUT
RAM:E43C CASEfrom3:
...
RAM:E449 E9 jp (hl)
exec09: Это реализация "пользовательских" консольных комманд 0 .. 9
эт если надо что-то машин специфик запихать
в корвете например (в одном из микродосов), это переключение кодировки экрана
koi-8, alt
в векторе там куча всего накручено, куча комманд с параметрами
https://code.google.com/p/vector06cc/wiki/MicroDOS_manual
"4.5. Дополнительные команды"
getErrMsgTAB - возвращает адресс тамблицы ошибок ;)
зачем надо я так и не понял.
в общем если у кого есть доки - поделитесь ;)
DemonId7
15.05.2014, 17:59
esl, я так сильно не углублялся, только модуль bios. Сегодня внимательнее глянул. Все отличия:
- инициализация rst 1 - rst 6 на подпрограмму warmboot, а rst 4 - на подпрограмму сравнения двух 16-битных чисел (равно/не равно).
- rst 7 указывает на подпрограмму вызова оригинального обработчика.
В аттаче то, что дизассемблировал. Кто-то хотел заняться досом вплотную, может пригодится, все же не с нуля начинать :)
С копированием файлов покончено. На днях спаяю ПЗУ'шку и опробую на реале всю систему в сборе. Тогда и выложу окончательные варианты утилит.
DemonId7
24.05.2014, 22:23
Подключил ПЗУ. Грузится и выполняются некоторые программы. А некоторые виснут. Проверял все что можно, вплоть до контрольной суммы биоса и файлов :) И только сейчас понял где косяк - на схеме вывод CE подключил к ИД7, а нужно было к SLTSEL. Вот видно и бодалась зараза с процессором за шину данных :) Наверное в понедельник выкрою время на окончательные испытания.
Кстати, заметил еще одну несовместимость реала с эмулятором. В эмуляторе, при подключенном биосе в слоте (fdd или hdd) загрузка по BLOAD виснет. На реале нормально грузит и выполняет.
DemonId7
26.05.2014, 19:29
Все. Протестировано и отлажено. Удалил пару мелких багов. Добавил пару покрупнее :)
Скрины запускаемых программ в архивах:
games_pic - без коментариев.
bas_pic - это запись на диск бейсик программы и ее последующий запуск.
sys_pic - системные утилиты, информация по дискам, копирование файлов.
idectrl.rar - схема адаптера.
util.zip - это утилиты для "формата" и копирования файлов. Изменения существенные, так что выкладываю все заново. Окончания в имени файлов (D или W) - соответственно под дос или винду. Под винду только для работы с образами дисков, делалось исключительно для эмулятора.
Копировать можно по маске:
C:\BC.30\BIN>C8000D.EXE A: C:\BC.30\PROJECT\SURA\UTIL\*.*
Copy files for PK8000.
>Select drive:
[0] Prim. master: ST320014A Size: 8257032Kb CHS: 16383/16/63
[1] Prim. slave : none
[2] Sec. master: KTC CF Size: 126504Kb CHS: 251/16/63
[3] Sec. slave : none
[4] or [ESC] to exit
-skip primary DOS partion.
-found CP/M disk [A] size: 4000 Kb
-found CP/M disk [B] size: 4000 Kb
-found CP/M disk [C] size: 4000 Kb
-found CP/M disk [D] size: 4000 Kb
-found CP/M disk [E] size: 4000 Kb
-found CP/M disk [F] size: 4000 Kb
-found CP/M disk [G] size: 4000 Kb
-found CP/M disk [H] size: 4000 Kb
-found CP/M disk [I] size: 9040 Kb
-found CP/M disk [J] size: 9040 Kb
-found CP/M disk [K] size: 12064 Kb
-found CP/M disk [L] size: 8032 Kb
-found CP/M disk [M] size: 11056 Kb
-copy: C:\BC.30\PROJECT\SURA\UTIL\DSAVE.COM 1664 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\ASM.COM 8192 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\DDT.COM 4864 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\DUMP.COM 512 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\ED.COM 6656 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\FCOPY.COM 2944 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\LIB.COM 7168 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\LINK.COM 15744 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\LOAD.COM 1729 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\MAC.COM 11776 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\PIP.COM 7424 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\STAT.COM 5121 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\SUBMIT.COM 1226 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\XSUB.COM 768 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\FORMAT.COM 1280 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\GRED.COM 4352 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\RED.COM 9728 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\ROI.COM 4992 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\SV.COM 14848 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\TECT.COM 16384 bytes
-copy: C:\BC.30\PROJECT\SURA\UTIL\SURA.COM 5632 bytes
Bye!
Путь можно указывать относительно текущего каталога, как это делается в досе (через точку и две точки).
Вот вроде и все. Если будут баги, сообщайте, исправлю. Может быть по осени сделаем адаптер SD-карт. Там довольно просто, только сейчас времени нет, лето, все дела... :)
hantarex
26.05.2014, 19:43
может, для совсем ленивых пару готовых образов выложите?:)
DemonId7
26.05.2014, 20:52
Ок. Завтра, сегодня нужно соседский комп глянуть, похоже БП навернулся, а может еще что. Только у меня на 130 Мб, меньше просто ничего нет.
DemonId7
27.05.2014, 09:08
В архиве cf.rar пустой образ. Я их "форматнул" с разными параметрами, первые четыре имеют кластер в 4Кб, последующие 2Кб (для дисков размером в 4Мб). Кому не нравится - F8000W в руки :)
Файлы в pk8000.zip - это сборка программ с образов дисков. В каталогах UTIL и GAME - проверенные и рабочие программы. В каталоге GAMES - все остальное, включая много битых файлов. Просто руки еще не дошли отсортировать до конца. C8000W в помощь, заодно опробуете утилитку в деле :)
ЗЫ: В процессе сжатия образа всплыла проблема размера. Поэтому в утилитку F8000D добавился новый ключ -U, заставляющий программу очищать от мусора весь диск целиком, а не только оглавление. Обновил архив в посте выше.
hantarex
25.08.2014, 21:08
решил развести плату под ЛУТ, есть пара вопросов:
зачем на дешифраторе ПЗУ джамперы?
и нафига такой большой чип ПЗУ? судя по схеме там всего 8кб используется?
прошу уважаемого DemonId7 выложить свой вариант печатки под утюг.
DemonId7
26.08.2014, 20:30
Завтра выложу, только скажите в каком формате: DipTrace, P-CAD или PDF?
В моем варианте джампера на дешифраторе нет, он не нужен. У меня джампер на адресной линии А14 самой ПЗУ, позволяющий выбирать одну из двух прошивок микрухи. Просто была задумка, иметь пару разных загрузчиков, без смены микрухи ПЗУ.
ПЗУ конечно избыточна. Зато с подбором микрухи проблем не будет, они до сих пор продаются в любом магазине, в отличии от малоемких, на любой вкус. У меня же их полно из старых материнок. Их и программировать легко - в любой старой материнке.
Только сразу предупреждаю. Эту версию я еще не испробовал, летом как то не до хобби. На днях собирался развести и написать окончательный вариант системы, с поддержкой часов. Так что можете подождать немного, пока я ее не опробую. Сколько это займет по времени - не знаю, я сейчас как раз пробую перейти на фоторезист, а первый блин сами знаете... :)
Так может пора уже платки заказать на всех?
hantarex
27.08.2014, 10:11
лучше в DipTrace. подождем конечно.
DemonId7
27.08.2014, 20:41
Извиняюсь за задержку, пришлось в темпе менять тормозные цилиндры на своем ведре с гайками и теперь не до платы, устал как черт.
Итак, пара пояснений. Размеры платы совпадают с размером винта. Думаю не нужно пояснять почему? Вход разведен вот под такой разъем:
49160
Я их надергал со старых сидюков. Отсюда другая тонкость. Поскольку на 99% таких разъемов отсутствует 20-й пин, то у меня он продублирован на 16-й. Рядом с разъемом под шлейф винта предусмотрено место под разъем питания. Он тоже взят со старого сидюка, поскольку CF запитывается именно от такого. Простой винт туда вряд ли стоит включать.
В остальном вроде ничего интересного, плата как плата.
hantarex
27.08.2014, 21:00
Большое человеческое спасибо!:)
DemonId7
06.09.2014, 12:29
Схема глючная!
Аттач удалил до выяснения причин нестабильной работы. Она даже более нестабильна, чем предыдущая, собранная "на коленке". Все отличие от первой схемы - это применение микрух серии 1533, вместо 555.
Будем разбираться, из-за чего идут частичные пропуски чтения, так как запись судя по всему проходит нормально.
DemonId7
08.09.2014, 23:30
Проверил часть схемы - ид7 и ПЗУ. Тут все в порядке. Заодно дописал в ПЗУ проверку памяти на старте, как в x86.
Осталось проверить часть отвечающую непосредственно за обмен данными с винтом (АП6 и ИР23). При использовании 80-ти жильного шлейфа и программных задержках на операциях ввода/вывода система грузится. Правда все равно немного портятся данные при чтении. В общем, либо я с пайкой накосячил, либо одна из микрух глючит, а разводка в принципе верна.
DemonId7
26.09.2014, 19:07
Все, теперь система поддерживает C/H/S. Грузится без проблем. Проблемы начались дальше - добрая половина программ не работала. Причем не рандомно, а конкретные экземпляры (проверял несколько раз выключая/включая комп). Замена 40-жильного шлейфа на 80-жильный привела к стабильной работе винта. Все программы работают. Копирование, запись и удаление проходит без помарок.
Так что можно сказать, что схема рабочая. Осталось только до конца выяснить, почему в линии строббирования данных возникают ложные сигналы. В выходные буду в городе, прикуплю микрух серии HC (наши 1564). Думаю они исправят положение. А может линию притянуть к плюсу?
PS: Новую прошивку и утилиты выложу позже, как до конца разберусь с адаптером, все равно возможно еще внесу изменения.
DemonId7
14.10.2014, 23:10
Пока решил вернуться к старой схеме, с ВВ55, как наиболее простой для изготовления. Теперь разводил ручками, а автотрассировщик использовал только на заключительном этапе (так глядишь и платы научусь разводить :) ).
Тесты плата прошла успешно. CF работает четко и на глаз не заметно разницы по скорости с векторной схемой на ИР23. Винт же похоже решил уйти на заслуженный отдых. Зато другие два, забракованные мной ранее, с этой платой работают четко.
Загрузку системы пока не испытывал, нужно ее еще в ПЗУ залить. Сегодня уже лень. Если пробы пройдут удачно - выложу схему с разводкой под ЛУТ.
hantarex
15.10.2014, 14:52
так вроде от ВВ55 отказались, типа - глючит?
DemonId7
15.10.2014, 15:17
Я инверторы добавил, как во всех микроконтроллерных схемах.
Сегодня прошить ПЗУ не получится, а завтра уезжаю на сутки. В общем, до выходных.
DemonId7
18.10.2014, 11:32
Работает:v2_yahoo:
Правда придется чуть-чуть подправить схему, так как в ходе тестирования выяснилось, что длительность сигнала CE для ВВ55 не всегда достаточна. Проблему решил кондер на вход CE, осталось добавить его в схему и разводку. Схему с разводкой скину вечером, а прошивку завтра постараюсь привести в божеский вид, а то в таком состоянии стыдно выкладывать.
PS: но на завтра запланировано много дел, так что не факт что успею. Один черт не горит, успею.
DemonId7
18.10.2014, 22:32
Схема с разводкой в аттаче.
По схеме. Резисторы R5, R7 и R8 ставить нет нужды, они скорее на всякий случай. J3 - выбор одной из четырех возможных прошивок, по схеме все понятно. Кондер C9 не ставить, лучше внести изменения в плату (ниже).
Выводы 30 и 31 на разных ПЗУ бывает разным, так что повнимательнее с ними. У меня разведены под флэш.
==================== изменения в плату для стабильной работы ====================
Пришел китайский логический анализатор. Решил глянуть из-за чего были проблемы с чтением. В общем зря я привязал /CE ВВ55 к сигналам /RD и /WR. Если при записи сигнал /WR достаточно длинный, то с чтением я облажался. /CE вырубался вместе с /RD, когда комп только приступал к чтению. Понятно, что читал мусор. Кондер С9 хотя и смещал /CE, но все равно чтение проходило на грани.
В общем, я себе сделал небольшую переделку. Выводы 6 и 9 ЛА3 разъединил и соединил вывод 9 с 10. Теперь /CE включён все время цикла чтения/записи и надобность в С9 отпала. Переделка незначительна и практически не заметна на плате.
==================== еще одна доработка ====================
Нашел таки источник проблем. Проблема стара как мир - несоответствие документации и железа, а именно - в ПК сигнал RESET на разъемы не выведен, хотя во всех книжках он указан как существующий. Как итог, при работе плат в линию постоянно шли наводки. Причем на разных платах по разному. На моей основной импульсы достаточно скоротечные и ВВ55 просто не успевала на них среагировать. На другой в основном тоже, но пару раз удалось засечь более длительные импульсы, из-за которых ВВ55 произвела сброс и, как следствие, загрузчик не подключил часть дисков. Насколько я понял, величина и частота наводок зависят как от шлейфа, которым плата подключается к ПК, так и от самой платы (видимо микрухи фонят по разному). Это не считая того, что при старте в регистрах ВВ55 творится разброд и шатание, каждый порт сам за себя.
В принципе проблему можно решить несколькими путями:
1. Перерезать дорожку /RESET у ВВ55 (35-я ножка) и подпаять на нее проводок к земле. Это можно сделать внутри панельки, получится аккуратно и незаметно. Либо сделать похожую операцию у ЛА3, но там будет видно. Недостаток очевиден - полное отсутствие сброса микросхемы.
2. Похожая, но изменения нужно вносить внутри ПК. Пины 15 разъемов расширения свободны и на них можно завести +5В, благо шина прямо у разъемов. Вариант более предпочтителен, поскольку линия RESET используется не только в данном контроллере, но и к примеру в AY-контроллере. Так хоть гарантия, что не будет непредвиденных сбросов.
3. В самом ПК сигнал RESET присутствует и появляется на короткое время при включении и перезагрузке. Его генерирует ТМ2 (DD5), и обеспечивает сброс процессора и двух ВВ55, отвечающих за порты ввода/вывода. Только он нам не подойдет, поскольку на разъемы, по документации, должен поступать инвертированный сигнал (т.е. активный низкий уровень). Этот сигнал можно снять с ножек 9 и 1, все той же ТМ2. На фото стрелками отмечена сама ТМ2 и ножки RESET на разъемах (они были вообще пустыми):
=================== создание и подготовка жесткого диска (Compact Flash) ===================
Первое, нужно разбить диск на разделы. Я делаю это программой FDISK, из пакета MS-DOS/PC-DOS, но возможно есть аналогичные программы под винду. Итак, первым делом, выбираем нужный нам диск и удаляем с него все разделы. Далее, создаем основной раздел. В CP/M он будет игнорироваться, поэтому на него нет ограничений по размеру. Затем, создаем расширенный раздел на весь оставшийся объем диска. В этом расширенном разделе создаем логические диски, которые и будут отображаться в CP/M. Поэтому, желательно "нарезать" их размерами от 1 до 20 Мб, не более 12 штук (на больше не хватит памяти у ПК8000). По завершении назначаем основной раздел загрузочным (первичным) и выходим. Основной раздел можно отформатировать и записать на него дос и все необходимые утилиты, но это по желанию.
Вот теперь используем F8000D.EXE.
Коротко о параметрах.
В CP/M диск состоит из 128-байтных секторов. То есть, все операции записи/чтения производятся с секторами, а не побайтно. Сектора объединяются в группы, от 2 и выше секторов (всегда кратно степени двойки!). В досе эти группы называют кластерами, в CP/M - блоками. Таким образом, минимальная единица дискового пространства в CP/M - это блок. Даже если файл имеет размер в 1 байт, на диске ему выделится один блок. Понятно, что чем меньше блоки, тем рациональнее используется дисковое пространство. Однако, в системе есть такая таблица - allocation vector (ALV), где помечается статус блоков диска (занят или свободен). Размер этой таблицы естественно ограничен. В данной реализации ее размер 2Кб, то есть на 16384 блоков (1 бит - 1 блок). И если одному диску выделить 8000 блоков, то остальным останется чуть больше половины. Поэтому количество блоков нужно распределить так, чтобы хватило всем дискам. Если имеем 12 дисков одинакового размера, то каждому можно выделить по 16384/12 = 1360 блоков. Это и регулирует параметр:
-a<xxx> - size ALV with 'xxx', [128..512] (default 256)
Размер задается в байтах и чтобы получить количество блоков нужно умножить на 8. Размер я ограничил от 1024 до 4096 блоков. Нужно понимать, что реальный размер блока может отличаться от заданного. Он вычисляется по формуле: size = DiskSize / ((ALV - 1) * 8) и округляется до большего значения кратного степени двойки. К примеру, имеем диск 2Мб и задаем ALV равным 300, то есть 2400 блоков. Размер блока будет равен 2Мб/(299 * 8) = 876. Округляем до ближайшего кратного и получаем 1024. Количество блоков соответственно будет 2048 (вместо запланированных 2400), а размер ALV = 256.
Под оглавление диска тоже выделяется некоторое количество блоков. Чем больше, тем больше файлов можно на нем хранить. Максимально можно выделить 16 блоков. За это отвечает параметр:
-d<x> - size directory in clusters [2..16] (default 2)
Только не нужно забывать, что чем больший размер директории, тем больше времени тратит система на поиск и загрузку файлов. Ну и на размер свободного пространства тоже влияет, не без этого. Тут трудно что-то посоветовать, поскольку один файл может занимать от 1 до нескольких записей (одна запись - 32 байта) и расчитать заранее невозможно. Мне хватает 4 блоков и лишь один раз столкнулся с нехваткой места в директории, когда пытался уместить на диск несколько десятков файлов. В общем, нужно экспериментировать.
Итак, запускаем. Выбираем диск. Далее начинается сканирование и поиск логических дисков. При нахождении логического диска будет выведен запрос на конвертирование его под CP/M. При нахождении диска CP/M будет выведен запрос на его преобразование в диск DOS. Это было сделано после того, как я столкнулся с тем, что FDISK отказывается удалять разделы с дисками НЕ-DOS. Такая вот политкорректность от мелкософта
--------------------------------
Теперь можно приступить к переносу софта. Это делается либо в досе, утилитой C8000D, либо в винде, посредством плагина к Total Commander, я его здесь выкладывал. Утилита C8000D требует задания имени диска, на который копируются файлы. Имя - это имя диска в CP/M, начиная от 'A' и тд. по возрастанию. Копируемые файлы можно задать по маске, как это допускает ДОС. Все, подключаем к ПК и работаем.
PS: Собственно диск в основном разделе я форматирую под FAT16 и делаю его загрузочным. На него записываю вышеперечисленные утилиты и все файлы для ПК8000. Удобно тем, что загрузившись с него можно форматнуть любой CP/M диск и записать нужные файлы. Сам диск прекрасно виден в винде. Как-то так.
======================= плата ======================
67474
67473
DemonId7
21.10.2014, 15:36
Нашел таки ошибку, точнее невнимательность. Работает как часы. Вот теперь схему можно смело утюжить, или развести под заказ (можно съэкономить на размере). Мне же хватит и ЛУТа.
DemonId7
27.10.2014, 18:03
Прошивка ПЗУ прежняя, версии 1.5.
Немного увеличил скорость работы с диском. Утилиты пока старые.
Замечания и пожелания приветствуются.
69685
67471
67472
hantarex
28.10.2014, 10:50
сделаю обязательно. но чуть позже.
DemonId7
26.11.2014, 20:17
Дело было вечером, делать было нечего... Анонс следующей серии :)
50099
50100
Работает как с образами дисков, так и с дисками. Осталось самое сложное - приделать панель настройки плагина, чтобы пути к образам дисков не прописывать в ini-файл ручками.
А там может руки дойдут плеер закончить.
DemonId7
13.12.2014, 20:49
Не прошло и года :)
Плагин подключается как "Плагин файловой системы". После этого выбрать в панели файлов "Сеть/FS-плагины". Должен отобразиться "CP/M HDD". При первом запуске нужно настроить, так как по умолчанию все отключено. Щелкаем на плагин правой кнопкой и выбираем свойства. Кнопками "Insert" и "Delete" формируем список подключаемых файлов-образов дисков. Пункт "Enable find in hard disk" разрешает при старте производить поиск на всех винтах. Лучше отключить, если используются только файлы-образы. Пункт "Enable log" - думаю итак понятно. Может быть поможет отловить какой-либо баг. Тоже без нужды не включать, так как файлик немного, но увеличивается при каждом запуске плагина.
Пока все. Чуть позже доведу до ума утилитку "форматирования" и будет полный комплект HDD для ПК.
В отдаленной перспективе можно будет и о SD подумать. Но это в отдаленной, сначала хочу программатор для УФ-ПЗУ собрать (след. версия контроллера уже почти готова, как раз будет под УФ) и адаптер SD для PC сделать, а то для старичков напряженка с винтами (за две недели три крякнуло), а CF в лучшем случае глючат.
hantarex
19.03.2015, 21:33
пришли платки, 20 штук, но совершенно нет времени собрать-проверить:(
как только сборку закончу - отпишусь.
и автору DemonId7, вышлю пару платок, если они ему нужны:)
DemonId7
20.03.2015, 09:17
А почем? Я с апреля в отпуск ухожу, вот и опробовал бы.
hantarex
20.03.2015, 09:41
халява, сэр:)
вы же разработчик:)
адрес в личку скиньте, отправлю на след неделе:)
з.ы. для заинтересованных - продавать их не планирую, лучше поменяю на что-нить
аналогичное, старые платы, или новодел.
з.з.ы. если кому ОЧЕНЬ-ОЧЕНЬ надо - пишите, отправлю просто так:)
hantarex
24.03.2015, 08:48
у нас есть порт принтера на ВВ55, ПЗУ мона повесить на слот расширения. но юзать два разъема не комильфо:(
у нас есть контроллер винта на ВВ55, это гораздо интересней:)
кто-нить думал прикрутить контроллер SD-карты от Vinxru к нашему контроллеру винта?:)
demetrius2003
24.03.2015, 09:45
Где можно подробнее почитать о контроллере винта и о контроллере SD-карты?
hantarex
24.03.2015, 09:51
контроллер винта - в этой теме выше.
контроллер SD-карты от Vinxru - http://zx-pk.ru/showthread.php?t=24092
http://www.nedopc.org/forum/viewtopic.php?t=10452
блог в ливжурнале удален.
контроллер SD-карты вешается на ВВ55. адаптирован к РадиоРК86, Специалист, возможно - Орион128, Вектор06Ц.
з.ы. коптроллер винта - это, по сути, дополнительная ВВ55, можно делать с ней что угодно. хоть программатор:) инверторы только убрать с порта А.
DemonId7
24.03.2015, 16:00
А зачем SD прикручивать к винту? Я так думал это будет отдельный контроллер, как раз для замены винта.
Уже прикидывал. Но только недавно достал 74HC4050, для согласования уровней. Делать буду на PIC, под мегу нет программатора.
hantarex
24.03.2015, 17:20
под мегу программатор - пять проводов на лпт-порт.
просто готовый проект. эмуляция ПЗУ не нужна. и софт переделывать надо только на компе.
опять таки работа с FAT, а не со всякой экзотикой. я потому и интересовался - как запускать проги, загруженные в память не с магнитофона.
DemonId7
24.03.2015, 19:25
Как без ПЗУ грузиться то с SD? И с каких пор CP/M стала экзотикой? :) Смысл в FAT?
hantarex
24.03.2015, 20:23
мега сначала эмулирует ПЗУ, этот код можно выбросить и грузиться из настоящего ПЗУ.
с FAT на ББ по-любому работать удобней.
на крайняк мона код меги переработать, ей то пофигу, что читать:FAT, раздел CP/M или еще что. например, мона работать с образами флоппи-дисков, будет сразу эмулятор и контроллера флопа и самого флопа:)
:)
Посмотрите на наш проект extrom для корвета
Там реализована именно такая схема
Сначала имитация внешнего пзу
Потом уже в режиме api
Доступ к образам дисков с sd карты
для cpm там все очень красиво
DemonId7
25.03.2015, 04:44
мега сначала эмулирует ПЗУКак? По схеме она контролирует лишь 8 адресных линий. Для эмуляции ПЗУ необходимо 16.
В нашем случае получаем:
16 линий - шина адреса
8 линий - шина данных
линия Чт/вв
линия Зп/вв
линия Reset
2 линии для программатора
2 линии под кварц
4 линии для SD-карт
2 линии питания
------
37 линий. 35 если без кварца. То есть ATMEGA328P по определению никак не катит. Если же отказаться от 8 линий адреса, то загрузка с SD будет в принципе невозможна.
с FAT на ББ по-любому работать удобней.
на крайняк мона код меги переработать, ей то пофигу, что читать:FAT, раздел CP/M или еще что.Общепринятый у разработчиков подход - контроллер предоставляет доступ низкого уровня, а файловая система - это уровень ОС. Поэтому я представлял контроллер как простой конвертер [шина данных] <--> [SD], аппаратно независимый от типа файловой системы и тем более ОС. Так и требования к МК значительно понижаются, можно выбрать самую дешовую модель.
например, мона работать с образами флоппи-дисков, будет сразу эмулятор и контроллера флопа и самого флопа:)Вроде SD хотелось подключить из-за удобства портации файлов. В чем удобство работать с образами дискет?
Вообще же у ПК8000 есть предусмотренные разрабами средства для загрузки с внешних носителей, независимо от их типа. В чем смысл отказываться от этой фичи и строить велосипед?
---------- Post added at 04:44 ---------- Previous post was at 04:41 ----------
:)
Посмотрите на наш проект extrom для корвета
Там реализована именно такая схема
Сначала имитация внешнего пзу
Потом уже в режиме api
Доступ к образам дисков с sd карты
для cpm там все очень красивоЧто-то схему не увидел, можно ссылку? Или хоть на какой примерно странице?
hantarex
25.03.2015, 08:43
ПЗУ эмулируется всего на 256 байт, только загрузчик. в подробности особо не вникал.
нечто похожее я пытался замутить на Atmega16, на 20Mhz. 8 данных, 8 адресов, три прерывания - два на чт\зп. портов вв, одно - на чт. памяти.внешний дешифратор адреса(старшие 8 бит) и схема формирования CS. теоретически на 20Мгц цикл шины меги составит 50нс, цикл шины ВМ80 - что-то около 130-150нс, скорости должно хватить. только дальще прикидок и полуспаяной макетки дело не продвинулось:) надо реанимировать свой проект. а ежели Мегой дешифровать только мпадшие 4 бита адреса и использовать внешнее ПЗУ - все будет еще проще:)
---------- Post added at 08:43 ---------- Previous post was at 08:41 ----------
Вроде SD хотелось подключить из-за удобства портации файлов. В чем удобство работать с образами дискет?
образы срм, хранятся на фат:) мона даже образы винтов на фат держать:) не нужен будет софт для переноса образов на SD:)
а ежели повыпедриваться и взять какой-нить ARM с USB-хостом - так ваще сказка будет:)
хотя есть коньроллеры на ядре MCS51, с USB-хостом, используются в атомобильных плеерах-трансмиттерах, там и USB и SD и внешняя память - все удовольствия:)
DemonId7
25.03.2015, 10:35
ПЗУ эмулируется всего на 256 байт, только загрузчик. в подробности особо не вникал.В ПК8000 загрузчик стартует только с адреса 0x4000, так что 8 или 4 битами не отделаться, придется заводить все 16 линий. Или часть линий заводить на отдельный дешифратор.
образы срм, хранятся на фат:) мона даже образы винтов на фат держать:) не нужен будет софт для переноса образов на SD:)Вопрос спорный. Для переноса образов на SD сторонний софт конечно не понадобится, но вот для создания и изменения самих образов - полюбому. И в чем принципиальная разница - пользоваться софтом для переноса файлов, или пользоваться софтом для работы с образами?
hantarex
25.03.2015, 11:09
внешний дешифратор адреса(старшие 8 бит) и схема формирования CS
я про это уже писал. CS устанавливается при обращении по адресу 4000Н, дальше мега сама дешифрует младшие адреса.
Для переноса образов на SD сторонний софт конечно не понадобится, но вот для создания и изменения самих образов - полюбому. И в чем принципиальная разница - пользоваться софтом для переноса файлов, или пользоваться софтом для работы с образами?
пустых образов море, а переносить в них файло мона из эмулятора уважаемого b2m.
для начинающего юзера нет риска затереть винт, например:)
вот весь проект.
https://bitbucket.org/esl/korvet-extrom-forth32
но там несколько другое, ПЗУ подключено к ВВ55.
моя идея оптимизации:
мы ТОЧНО знаем порядок чтения байт из пзу
и по этому с помощью детекта изменения A0 (чтение всегда увеличивает байт адреса на 1)
соответственно для детекта адреса нужно не 16 линия а достаточно 1й
+ нужен четкий детект начала последовательности чтения.
а дальше используя MODE2 ВВ55 уже идёт обмен в режиме API
итого мы обходимся всего 14 проводами (8дата, +1 A0, + 1 детект режима, +4 mode2 control)
это похоже применимо частично в случае РК8000, хотя ;)
у вас там есть WAIT, можно тормозить процессор на и не гнаться за скоростью
и 16 бит адресса сравнивать не нужно, у вас же есть CS для нужного слота ?
т.е. идея - загрузить из "ПЗУ" минимальный объем кода нужный для второй фазы
а дальше например обмен с ячейками памяти в "ПЗУ"
в качестве детекта CSROM+An+IOPORT(R/W)+WAIT ?
по поводу CPM, для упрощения
т.к. ЦПМ обменивается ТОЛЬКО 128 байтными блоками то достаточно ей это обеспечить и всё.
т.е. это элементарно мапится на образ на SD карте.
на ПЦ уже работать с образами не напрягает.
DemonId7
26.03.2015, 03:18
я про это уже писал. CS устанавливается при обращении по адресу 4000Н, дальше мега сама дешифрует младшие адреса.Хорошо, есть дешифратор, выставляющий некий CS, по которому микроконтроллер выставляет на шину некие данные. А тогда в чем принципиальная разница, если то же самое будет делать ПЗУ? Зачем МК эмулировать работу ПЗУ? Чтобы покупать самую дорогую модель МК?
пустых образов море, а переносить в них файло мона из эмулятора уважаемого b2m.
для начинающего юзера нет риска затереть винт, например:)Как средство отладки - эмуль хорош. Но пользоваться им для записи образов довольно неудобно.
---------- Post added at 04:18 ---------- Previous post was at 04:14 ----------
моя идея оптимизации:
мы ТОЧНО знаем порядок чтения байт из пзуНе понял, порядок чтения чего? И откуда мы его точно можем знать?
БИОС ПК, после старта, мэппирует поочередно разъемы расширения на адрес 4000h, выискивая на них сигнатуру наличия ПЗУ. Если нашел, то читает оттуда же адрес, на который и передает управление.
и по этому с помощью детекта изменения A0 (чтение всегда увеличивает байт адреса на 1)
соответственно для детекта адреса нужно не 16 линия а достаточно 1й
+ нужен четкий детект начала последовательности чтения.
а дальше используя MODE2 ВВ55 уже идёт обмен в режиме API
итого мы обходимся всего 14 проводами (8дата, +1 A0, + 1 детект режима, +4 mode2 control)У нас совсем по другому. Контроллер подключается непосредственно к шинам адреса и данных ПК. Поэтому и нужен нормальный дешифратор адреса. Это как шина ISA, только чуток попроще.
это похоже применимо частично в случае РК8000, хотя ;)
у вас там есть WAIT, можно тормозить процессор на и не гнаться за скоростьюЧто за WAIT?
и 16 бит адресса сравнивать не нужно, у вас же есть CS для нужного слота ? Есть Slot select. Но, на слоте может сидеть несколько устройств, так что дешифратор адреса необходим.
по поводу CPM, для упрощения
т.к. ЦПМ обменивается ТОЛЬКО 128 байтными блоками то достаточно ей это обеспечить и всё.
т.е. это элементарно мапится на образ на SD карте.
на ПЦ уже работать с образами не напрягает.? CP/M как бы уже успешно адаптирована под жесткие диски больших объемов. Поэтому я не понимаю, зачем обратно переходить на флоппи, пусть даже в виде образов?
Вообще же вы меня ребята запутали. Я уже и не знаю что требуется :)
hantarex
26.03.2015, 10:24
Хорошо, есть дешифратор, выставляющий некий CS, по которому микроконтроллер выставляет на шину некие данные. А тогда в чем принципиальная разница, если то же самое будет делать ПЗУ? Зачем МК эмулировать работу ПЗУ? Чтобы покупать самую дорогую модель МК?
некий CS вызывает прерывание при обращении к ВВ, ПЗУ эмулировать НЕ НУЖНО:)
(вообще - можно, в целях минимизации схемы:))
например: по И складываем сигнал дешифратора старшей тетрады и сигнал ЧТ.ВВ. и заводим на INT0 меги. сигнал дешифратора старшей тетрады и сигнал ЗП.ВВ. заводим на INT1 меги. получается 16 адресов(устройств) мега дешифрует только младшие четыре бита адреса и выставляет-читает данные. эдакий байт-порт. мона использовать периферю меги: СОМ-порт, SPI, I2C. на SPI вешаем SD и какие-нит далассовские часы реального времени. СОМ-порт - и так понятно:)
это применительно к Atmega16. если использовать 128ю, или 256ю, у них вроде 5 внешних прерываний - мона весь дешифратор сделать внешней схемой:)
Вообще же вы меня ребята запутали. Я уже и не знаю что требуется
ничего не требуется, только предлагается:)
---------- Post added at 10:24 ---------- Previous post was at 08:38 ----------
а еще мона поюзать вот это http://zx-pk.ru/showpost.php?p=208744&postcount=144 :)
ежели в СР\М настроить DMA, то процик мона ваще не юзать, все мега сделает:)
хотя, конешно, у пиков есть PBC(или PCB?), но я с ними не работал и помочь не смогу.
DemonId7
26.03.2015, 11:53
Все эти детали реализации в железе конечно интересны, но пока несущественны и лишь запутывают меня. Давай сначала проясним саму концепцию устройства, в твоем понимании. Что и для нужно, что за что отвечает, где хранится код и какой. И как все это взаимосвязано.
Моя идея предельно проста и по максимуму совместима с HDD. Есть два дешифратора - один для ПЗУ, другой для МК (если выводов хватит, то сам МК будет дешифратором).
С ПЗУ все по старому - она отображается на адреса 4000h-8000h, и является хранилищем как самой ОС, так и загрузчика этой ОС в память ПК. То есть ПЗУ используется стандартно, как на контроллерах FDD и HDD.
МК же используется исключительно как конвертер интерфейсов SPI в шину данных и обратно. Для этого он предоставляет несколько портов - порт адреса, порт данных, порт операции и порт статуса операции. Для этого потребны лишь линии Чт.ВВ, Зп.ВВ, и 8 адресных линий. Плюс линии для SD. И все.
При старте ПК управление получает загрузчик в ПЗУ, который грузит из ПЗУ ОС куда треба и передает ей управление. Сама ОС обращается к SD через порты, то есть посредством МК.
Как то так. В принципе ОС не обязательно хранить в ПЗУ, можно прямо на диске. Но память не безгранична и ПЗУ помогает более эффективно ее использовать. Да и наиболее критически важные подпрограммы не затрутся в случаях ошибок ПО.
Как то так :)
Хорошо, есть дешифратор, выставляющий некий CS, по которому микроконтроллер выставляет на шину некие данные. А тогда в чем принципиальная разница, если то же самое будет делать ПЗУ? Зачем МК эмулировать работу ПЗУ? Чтобы покупать самую дорогую модель МК?
как не смешно, для удешевления конструкции
самую дорогую модель и не нужно,
да и запрграммировать МК сегодня проще чем олдфаг УФ ПЗУ.
Не понял, порядок чтения чего? И откуда мы его точно можем знать?
БИОС ПК, после старта, мэппирует поочередно разъемы расширения на адрес 4000h, выискивая на них сигнатуру наличия ПЗУ. Если нашел, то читает оттуда же адрес, на который и передает управление.
давайте исходить из реальности
есть живая ПК8000, и в реале к ней не будет подключено ничего кроме эмулятора, это раз.
вы всё знаете, только пока не догадываетесь об этом.
давайте по шагам распишем что происходит
опишу HAPPY PATH (т.е. если всё удаётся)
биос доходит до проверки ПЗУ
ROM:24C6 checkROM: ; CODE XREF: do_Start+6Dp
ROM:24C6 ; do_Start+74p ...
ROM:24C6 lxi d, 4000h
ROM:24C9 ldax d
ROM:24CA cpi 'A' ; if [4000h] != 'A' then exit
ROM:24CC rnz
ROM:24CD inx d
ROM:24CE ldax d
ROM:24CF cpi 'B' ; if [4001h] != 'B' then exit
ROM:24D1 rnz
ROM:24D2 inx d
ROM:24D3 ldax d
ROM:24D4 mov l, a
ROM:24D5 inx d
ROM:24D6 ldax d
ROM:24D7 mov h, a
ROM:24D8 pchl ; jmp [4002h]
он выставляет CS нужному слоту
читает байт 4000 A
читает байт 4001 B
читает байт 4002 LO
читает байт 4003 HI (для простоты пусть там будет 4004)
читает байт 4004 .....
т.е. ЗНАЯ точно порядок чтения, можно обойтись 1 битом для адресса
(детект изменения A0)
собственно моя идея в том, что в таком режиме грузится только
загрузчик первого этапа, минимального размера.
который уже в другом удобном и быстром режиме грузит остальное.
Что за WAIT?
ошибся, я имел в виду HLDA
на схеме это 40 вывод разъема
(блин, ну как всегда, документация тех компов - теплых слов не выдерживает, в табличке там прочерк)
т.е. внешнее устройство может затормозить проц, сделать своё грязное дело, и отпустить проц, т.е. нет нужны в жестком тайминге со стороны однокристалки.
я не электронщик, по этому это может быть ересью.
CP/M как бы уже успешно адаптирована под жесткие диски больших объемов. Поэтому я не понимаю, зачем обратно переходить на флоппи, пусть даже в виде образов?
можно пример ?
как я понимаю просто ставится размер диска в параметрах нужный ?
и кто вам запрещает использовать "образ" размером 8 мб ? ;)
только без диреторий удобство работы с многомегабайтными "дисками" стремиться к 0.
вас же не заставляют использовать образы по 320к
сделайте по 1 мб, для цпм это огромный размер.
так образы выполняют роль "директорий"
а на пц для цпм есть куча тулзов для работы с образами
куча плагинов для far/total
если они пока не понимают дисков для ПК8000 - вопрос решаемый.
и еще раз, для ЦПМ все диски имею сектор 128 байт ......
задача биоса с конвертировать физический размер сектора в логические которыми оперирует цпм ...
и макс размер "диска" 128*256*256/1024/1024 ~8 мб
DemonId7
26.03.2015, 12:41
как не смешно, для удешевления конструкции
самую дорогую модель и не нужно,
да и запрграммировать МК сегодня проще чем олдфаг УФ ПЗУ.Есть флэши, программируются даже с самого ПК. Так что как раз это не проблема. При желании можно в схеме это предусмотреть и обновлять ПЗУ прямо с ПК8000 :)
давайте исходить из реальности
есть живая ПК8000, и в реале к ней не будет подключено ничего кроме эмулятора, это раз.Ээээ... Я вроде как к ней винт подключил и Compact Flash. SD - это просто более удобное средство переноса файлов между ПК и PC, так как допускает динамическое подключение.
т.е. ЗНАЯ точно порядок чтения, можно обойтись 1 битом для адресса
(детект изменения A0)
собственно моя идея в том, что в таком режиме грузится только
загрузчик первого этапа, минимального размера.
который уже в другом удобном и быстром режиме грузит остальное.Кто же его грузить то будет? БИОС ПК этого не делает, он тупо передает управление на считанный адрес с ПЗУ, справедливо полагая, что туда отображается ПЗУ с разъема расширения.
Поэтому я и не врублюсь, что даст лишь одна линия адреса?
ошибся, я имел в виду HLDA
на схеме это 40 вывод разъемаЕе нет. Это были хотелки проектировщиков на следующую модель, которая так и не увидела свет.
т.е. внешнее устройство может затормозить проц, сделать своё грязное дело, и отпустить проц, т.е. нет нужны в жестком тайминге со стороны однокристалки.Тайминг - это радиолюбительский трюк. По хорошему создается порт статуса, по которому программа отслеживает готовность данных от/к МК.
можно пример ?
как я понимаю просто ставится размер диска в параметрах нужный ?Нет. Параметры диска хранятся на самом диске, как это сделано в MS-DOS. Поэтому система может работать с дисками любых размеров, хватило бы памяти.
и кто вам запрещает использовать "образ" размером 8 мб ? ;)Никто. А зачем, если система может работать непосредственно с диском?
только без диреторий удобство работы с многомегабайтными "дисками" стремиться к 0.Это было бы справедливо, будь количество файлов хотя бы под 200 и выше.
Тем более:
так образы выполняют роль "директорий"Система может работать с несколькими дисками сразу - на одном храним утилиты, на другом - игрушки, на третьем музон и тд. Это не считая областей USER.
а на пц для цпм есть куча тулзов для работы с образами
куча плагинов для far/total
если они пока не понимают дисков для ПК8000 - вопрос решаемый.Вы бы тему на несколько страниц отмотали :)
и еще раз, для ЦПМ все диски имею сектор 128 байт ......
задача биоса с конвертировать физический размер сектора в логические которыми оперирует цпм ...
и макс размер "диска" 128*256*256/1024/1024 ~8 мбВ моей реализации и 32Мб подключаются, по несколько сразу ;) Программисты мы, или хрен собачий? :)
ЦПМ как я понимаю и не получится в ПЗУ хранить
все реализации что я видел - читают ее в ОЗУ
и еще забыл озвучить
в однокристалку мы поместили не просто интерфейс к SD
а высокоуровневое апи
типа "смонтроуй диск DISK1.KDI" как диск A
"прочитай сектор с образа A:track:sector"
etc
т.е работа с фат и прочие радости жизни сидит в однокристалке
драйвер в CPM BIOS - минимален, т.к. нет буферов и прочего
к сожалению ПК8000 кривая копия MSX Ж(
в MSX дос сидит в ПЗУ
и по этой причине позволяет творить чудеса,
вон гляньте на nextor dos
там вон давече реализовали прозрачное монтирование образа диска с винта
при этом работает весь софт
и из бейсика все дисковые функции
т.к. биос куча хуков на все функции, и только стандартны точки входа.
DemonId7
26.03.2015, 12:59
ЦПМ как я понимаю и не получится в ПЗУ хранить
все реализации что я видел - читают ее в ОЗУМожно и в ПЗУ. Никто не запрещает. В моей реализации практически весь BIOS CP/M хранится именно в ПЗУ.
и еще забыл озвучить
в однокристалку мы поместили не просто интерфейс к SD
а высокоуровневое апи
типа "смонтроуй диск DISK1.KDI" как диск A
"прочитай сектор с образа A:track:sector"
etcВот как раз этого я и не хочу. Я сторонник жесткого разделения софта и железа. ОС отвечает за файловую систему, МК - за железки. А мешая все в кучу, мы только наживаем лишние проблемы.
к сожалению ПК8000 кривая копия MSX Ж(
в MSX дос сидит в ПЗУ
и по этой причине позволяет творить чудеса,То же самое и на ПК8000. Единственно из-за чего не захотел портировать DOS-MSX - это геморой с разными процессорами и избыточность FAT для ПК.
вон гляньте на nextor dosГляну вечерком.
Есть флэши, программируются даже с самого ПК. Так что как раз это не проблема. При желании можно в схеме это предусмотреть и обновлять ПЗУ прямо с ПК8000 :)
а смысл ? ;)
у нас STAGE2 LOADER читается с SD, а его заменить много проще чем флеш перешить.
Ээээ... Я вроде как к ней винт подключил и Compact Flash. SD - это просто более удобное средство переноса файлов между ПК и PC, так как допускает динамическое подключение.
я приблизительно про это и говорил
что в реальной жизни там будет одно устройство.
Кто же его грузить то будет? БИОС ПК этого не делает, он тупо передает управление на считанный адрес с ПЗУ, справедливо полагая, что туда отображается ПЗУ с разъема расширения.
Поэтому я и не врублюсь, что даст лишь одна линия адреса?
биос и будет, однокристалка эмулирует минипзу
биос то тупо передаёт, но проц память читать то не перестает ?
Ее нет. Это были хотелки проектировщиков на следующую модель, которая так и не увидела свет.
я посмотрел по схеме, там есть.
если нет - вариант с пзу будет проще.
Тайминг - это радиолюбительский трюк. По хорошему создается порт статуса, по которому программа отслеживает готовность данных от/к МК.
если мне не изменяет память то скорости ПК8000 не хватало даже для чтения вг93
и там был трюк с 4мя ячейками рама и хитрым циклом чтения ?
а тормозить проц для таких вещей имхо нормально.
Нет. Параметры диска хранятся на самом диске, как это сделано в MS-DOS. Поэтому система может работать с дисками любых размеров, хватило бы памяти.
и как это сделано у Корвета
в первых 128 байтах диска живет DPB и биос читая диск первый раз настраивается на него.
Никто. А зачем, если система может работать непосредственно с диском?
а зачем работать непосредственно с диском если можно это отдать в мозги контроллера ?
Это было бы справедливо, будь количество файлов хотя бы под 200 и выше.
не понял.
а сколько будет файлов в директории на диске размером 8 метров ?
Тем более:
Система может работать с несколькими дисками сразу - на одном храним утилиты, на другом - игрушки, на третьем музон и тд. Это не считая областей USER.
с коими в cpm работать жутко неудобно
в микродос - чуть удобнее.
да и ограничении на колв-во файлов в директории не отменяется.
В моей реализации и 32Мб подключаются, по несколько сразу ;) Программисты мы, или хрен собачий? :)
это да ;)
---------- Post added at 12:03 ---------- Previous post was at 12:00 ----------
Вот как раз этого я и не хочу. Я сторонник жесткого разделения софта и железа. ОС отвечает за файловую систему, МК - за железки. А мешая все в кучу, мы только наживаем лишние проблемы.
в этом месте наше мнение радикально расходится ;)
в нашей реализации ос всё еще отвечает за файловую систему
просто для однокристалка от нее прячет тот уровень о которой цпм знать не стоит.
ибо таки да, работать на 8080 с FAT - это долго и дорого.
---------- Post added at 13:03 ---------- Previous post was at 12:03 ----------
Можно и в ПЗУ. Никто не запрещает. В моей реализации практически весь BIOS CP/M хранится именно в ПЗУ.
и ТПА пользователя увеличивается ??
Перечитал тему
как в том анекдоте "много думал"
Половину тем мы уже выше обсуждали
DemonId7
26.03.2015, 19:12
а смысл ? ;)
у нас STAGE2 LOADER читается с SD, а его заменить много проще чем флеш перешить. Смысл в том, чтобы использовать предусмотренные производителем средства. Я бы вообще сделал все на рассыпухе, но что-то слишком сложно получается. Для меня сложно.
я приблизительно про это и говорил
что в реальной жизни там будет одно устройство.Нет, не одно. У меня три подключаются - HDD, RTC и AY.
биос и будет, однокристалка эмулирует минипзу
биос то тупо передаёт, но проц память читать то не перестает ?В принципе да. Но как то это на трюкачество смахивает :)
я посмотрел по схеме, там есть.
если нет - вариант с пзу будет проще.По схеме HOLD действительно есть. А вот в руководстве по эксплуатации этот пин заявлен неподключенным. Вот и думай кому верить :)
если мне не изменяет память то скорости ПК8000 не хватало даже для чтения вг93
и там был трюк с 4мя ячейками рама и хитрым циклом чтения ?Да, был. И, отдавая должное смекалке конструкторов, я бы за такие вещи бил по рукам. Если написать сколько проклятий сыпалось от программистов на инженеров, например за стандарт VGA нашпигованный такими радиолюбительскими трюками, то получился бы многотомник побольше всех собраний сочинений Ленина.
и как это сделано у Корвета
в первых 128 байтах диска живет DPB и биос читая диск первый раз настраивается на него.Не в курсе. Я сразу ориентировался на разбиение диска на логические разделы, утилитой fdisk из DOS'а, а значит каждый диск должен был иметь свой блок параметров.
а зачем работать непосредственно с диском если можно это отдать в мозги контроллера ?В любой ОС предусмотрены модули/драйвера как раз для работы с железом на низком уровне. И если ОС работает с принтером и видео напрямую, то почему не должна работать с носителями?
не понял.
а сколько будет файлов в директории на диске размером 8 метров ?Сколько зарезервируешь места при форматировании диска. Там ключами выбирается размер кластера и директории.
и ТПА пользователя увеличивается ??Что?
---------- Post added at 20:12 ---------- Previous post was at 20:11 ----------
Перечитал тему
как в том анекдоте "много думал"
Половину тем мы уже выше обсуждалиОдно дело обсуждать перспективы, а другое решать законченный вид девайса.
Неплохо бы услышать мнение всех заинтересованных сторон, чтобы уж окончательно определиться :)
hantarex
26.03.2015, 19:38
ну тогда мона накидать SPI-интерфейс на рассыпухе, как у MSX:) брутальненько так получится:)
В принципе да. Но как то это на трюкачество смахивает :)
а все эти компы сплошное трюкачество, в этом кайф ;)
---------- Post added at 00:49 ---------- Previous post was at 00:45 ----------
По схеме HOLD действительно есть. А вот в руководстве по эксплуатации этот пин заявлен неподключенным. Вот и думай кому верить :)
надо ВСЁ перепроверять.
писать правильную документацию в те времена похоже не утруждались :(
я уже на это столько раз нарывался что перестал горько вздыхать и ругаться матом.
все книжки что у меня есть по Корвету - феерический ужас если понимаешь о чём речь и что там написано.
не говоря уже про качество печати.
---------- Post added at 00:52 ---------- Previous post was at 00:49 ----------
Да, был. И, отдавая должное смекалке конструкторов, я бы за такие вещи бил по рукам.
а какие были варианты ?
или тормозить проц по HLDA или трюкачить
Корвет/Вектор - успевают впритык, у ПК8000 не хватает скорости
---------- Post added at 00:55 ---------- Previous post was at 00:52 ----------
В любой ОС предусмотрены модули/драйвера как раз для работы с железом на низком уровне. И если ОС работает с принтером и видео напрямую, то почему не должна работать с носителями?
вопрос в сложности драйвера в общем то.
это вопрос философский
как SCSI vs IDE
SCSI - очень умный контроллер, IDE - bare metal.
когда стремились за дешевизной - сделали IDE
а теперь когда электроника дешева сделали SATA который уже умный
---------- Post added at 00:56 ---------- Previous post was at 00:55 ----------
Нет, не одно. У меня три подключаются - HDD, RTC и AY.
и все три на одном порту в один момент времени ???
как я понял портов 2 ?
hantarex
27.03.2015, 09:54
http://msx.hansotten.com/index.php?page=sd-mmc-drive
вместо верхней части схемы собирается дешифратор на нужные адреса.
ссылка на архив:http://msx.hansotten.com/uploads/msxarchives/MMC_Drive.zip
ну тогда мона накидать SPI-интерфейс на рассыпухе, как у MSX:) брутальненько так получится:)
Тогда мона будет отлаживаться в моём эмуляторе :)
hantarex
27.03.2015, 15:26
Тогда мона будет отлаживаться в моём эмуляторе
а мона с этого места поподробнее?:)
DemonId7
27.03.2015, 17:58
ну тогда мона накидать SPI-интерфейс на рассыпухе, как у MSX:) брутальненько так получится:)Уже приглядывался :) Одна беда - запись не оптимизирована и будет ну оооооочень тормозной.
Но как вариант мне нравится именно за брутальность, так сказать "дух времени" :)
---------- Post added at 18:38 ---------- Previous post was at 18:35 ----------
а мона с этого места поподробнее?:)Наверное этот контроллер уже присутствует в эмуляторе, в MSX :) И софт под него можно тестировать не заливая на реальное железо, а прямо в эмуле. Нет слов, чтобы выразить насколько это облегчает написание ПО :v2_thumb:
---------- Post added at 18:39 ---------- Previous post was at 18:38 ----------
а все эти компы сплошное трюкачество, в этом кайфТак то оно конечно да :)
а какие были варианты ?
или тормозить проц по HLDA или трюкачить
Корвет/Вектор - успевают впритык, у ПК8000 не хватает скоростиВариант был один - DMA.
вопрос в сложности драйвера в общем то.
это вопрос философский
как SCSI vs IDE
SCSI - очень умный контроллер, IDE - bare metal.
когда стремились за дешевизной - сделали IDE
а теперь когда электроника дешева сделали SATA который уже умныйЧто умного в скази? Да ничего, обычный контроллер, со своим биосом. И скази и сата обеспечивают лишь низкоуровневый доступ, на уровне секторов.
и все три на одном порту в один момент времени ???
как я понял портов 2 ?Пока по 2 на разъем. Вот сделаю корпус как планировал, можно будет хоть десяток вешать на один слот.
---------- Post added at 18:58 ---------- Previous post was at 18:39 ----------
================================================== ===============
/////////////////////////////////////////////////////////////////////////////////////////////////
================================================== ===============
Родилась еще идея реализации. Что если сделать просто адаптер IDE<->SD, по типу как IDE<->CF? Тогда бы его можно было бы просто цеплять к уже готовому контроллеру IDE и не заморачиваться софтом. Как идейка?
PS: Правда линий многовато, можно и не уложиться под корпус DIP28. А я расчитывал на PIC16F72, он всего 90 рэ стоит (или PIC16F876A за 120). Из DIP40 самый дешевый 180 рэ, дороговато как-то. У Megi выбор получше, ATmega88-20AU на 32 вывода стоит всего 80 рэ, но корпус TQFP, прямо скажем не самый удобный под утюг. Прям как у классика - по три рубля, но маленькие, а сегодня по пять, но большие :)
Если вдруг коллективный разум склонится к простому msxному контроллеру sd, под реализацию которого в плис для Б2М и рк86 (а потом и вектора, специалиста и львова) b2m написал софт, то знайте, что у вас есть еще один сторонник :)
Это пригодилось бы и для реализации пк8000 на плис. Самое главное - может b2m сподвигнется на доработку софта
Вариант был один - DMA.
не, не вариант, на сколько бы схема и стоимость усложнилась ?
---------- Post added at 17:25 ---------- Previous post was at 17:21 ----------
Что умного в скази? Да ничего, обычный контроллер, со своим биосом. И скази и сата обеспечивают лишь низкоуровневый доступ, на уровне секторов.
SCSI is an intelligent, peripheral, buffered, peer to peer interface. It hides the complexity of physical format. Every device attaches to the SCSI bus in a similar manner. Up to 8 or 16 devices can be attached to a single bus. There can be any number of hosts and peripheral devices but there should be at least one host. SCSI uses handshake signals between devices, SCSI-1, SCSI-2 have the option of parity error checking. Starting with SCSI-U160 (part of SCSI-3) all commands and data are error checked by a CRC32 checksum. The SCSI protocol defines communication from host to host, host to a peripheral device, peripheral device to a peripheral device.
ну такой простенький интерфейс ...
DemonId7
27.03.2015, 20:17
It hides the complexity of physical format
ну такой простенький интерфейс ...Контроллеры IDE со времен царя Гороха скрывают от нас физический формат носителя, выдавая нам некий универсальный логический :) Информация о физическом формате хранится на программно недоступным дорожках (у некоторых во флэш) и доступна исключительно контроллеру винта.
Единственное существенное отличие между IDE и скази - это интерфейс взаимодействия между самими устройствами. У скази сами винты настраиваются, программным способом, а у IDE это сделано более примитивно, на уровне джамперов - дешево и сердито.
Контроллеры IDE со времен царя Гороха скрывают от нас физический формат носителя, выдавая нам некий универсальный логический :)
ага, и C/H/S это именно прятание унутренностей
эт беспредметный разговор.
эт как сравнивать USB vs FireWire
ide родились как "большая дискета" для "маленьких" компьютеров.
потом уже втянув в себя много вкусного
а потом на его месте родился SATA, который еще кучу всего из SCSI утянул
одно реордеринг порядка выполнения чего стоит ;)
DemonId7
27.03.2015, 21:40
ага, и C/H/S это именно прятание унутренностейИменно так. Это MFM, RLL и ESDI не имели встроенного контроллера и работали с физическими параметрами, задав стандарт C/H/S.
У IDE в саму основу работы винтов положен метод Zone Bit Recording, для эффективного использования пространства "блинов". Винт работающий таким образом никак не вписывается в модель C/H/S, так как количество секторов на дорожках разное. Поэтому IDE-винты работают в так называемом Translation режиме, т.е. в режиме логической адресации. В Native режиме у них работает только контроллер.
Собственно чего спорить? Во многих биосах материнок можно было выбрать одну из нескольких доступных конфигураций винта, отличающихся количеством головок, цилиндров и доступной емкостью :)
эт беспредметный разговор.Зато познавательно и интересно :)
hantarex
27.03.2015, 22:27
переходник SD>IDE у мну есть:) купил по случаю в Китае. дособираю контроллер - проверю.
DemonId7
27.03.2015, 22:57
Фигасе. А нафига тогда что-то делать? Если заработает, то проще будет на алиэкспресе выписать и не мучаться.
hantarex
28.03.2015, 07:18
дадык - не думал, что их существование для кого-то новость:)
DemonId7
28.03.2015, 12:28
Для меня новость :) Только терзают сомнения. На контроллере винты емкостью от нескольких Гб не завелись. Я просто не знаю правильной процедуры их инициализации. Возможно дело в несоответствии таймингов, а не в ПО.
Так что жду, что практика покажет.
Это одна из причин за умный контроллер
В нем можно много чего накручивать и менять типы носителей
а софт на девайсе этого и не заметит
ибо для него только апи есть
а мона с этого места поподробнее?:)
Аналогичный контроллер реализован в эмуляторе, использовался, чтобы прицепить SD карту к Башкирии-2м и Радио-86РК. Конечная цель была - доступ к SD карте в проектах для FPGA, в частности для DE1, которые я делал.
Самое главное - может b2m сподвигнется на доработку софта
Это ты про поддержку SDHC и карт большого размера?
Это ты про поддержку SDHC и карт большого размера?
Да. Уточню, что самое имхо неприятное ограничение текущего варианта - неработа с файлами за границей 32 Мб, как установил zebest (хотя там возможно еще зависит от размера кластера).
неработа с файлами за границей 32 Мб
По моим прикидкам, должно было быть не меньше 256Мб. Но тут, как ты правильно заметил, зависит от размера кластера. Я вроде рассчитывал, что он 4Кб.
hantarex
28.03.2015, 22:49
так как его прицепить к ПК8000?
hantarex
29.03.2015, 09:32
собрал, не работает, на дешифраторах нет сигналов. кабель из поста о звуковом процессоре?
DemonId7
29.03.2015, 11:28
Не поступает сигнал с 20-го пина - А3. У меня он продублирован на 16-й (http://zx-pk.ru/showpost.php?p=734495&postcount=90).
Видимо забыл его на 16-й закинуть при разводке :v2_conf2:
hantarex
29.03.2015, 21:18
перемычку поставил, толку нет. наверное, накосячил с распайкой кабеля. буду разбираться. без винта хотя бы биос рисует на реале?
DemonId7
29.03.2015, 21:59
Конечно. А ПЗУ какое?
hantarex
30.03.2015, 08:29
at49f001, джамперы на землю, прошиты первые 16к. говорю - на выходах дешифраторов сигналов нет, ПЗУ ни при чем.
DemonId7
30.03.2015, 09:06
Могу только посоветовать:
51669
Медленно, но верно. Питание брал с БП компа (у меня на переднюю панель выведен "конец"). Сразу станет ясно, где засада :)
hantarex
30.03.2015, 21:24
бивис загрузился:) косяк в кабеле был. завтра флешку размечу и проведу окончательные испытания.
hantarex
31.03.2015, 09:36
кстати, нафига активный раздел игнорируется? у меня есть пара CF на 32мб, хотел одним разделом заюзать.
---------- Post added at 09:36 ---------- Previous post was at 08:36 ----------
толи лыжи не едут, толи я что-то не так делаю...
машины с DOSом нет. разбиваю флешку BOOTICEм на разделы, сохраняю имидж.
F8000W пропускает активный раздел и прощается. есть мысли?
DemonId7
31.03.2015, 10:03
кстати, нафига активный раздел игнорируется? у меня есть пара CF на 32мб, хотел одним разделом заюзать.Активный оставлял под загрузку дос, чтобы прямо с него утилитками пользоваться. Не думал, что будут с ним какие то сложности. На крайняк можно в diskedit из нортон-утилит подправить байт в самом первом секторе по смещению 0x1BE с 0x80 на 0x00.
толи лыжи не едут, толи я что-то не так делаю...
машины с DOSом нет. разбиваю флешку BOOTICEм на разделы, сохраняю имидж.
F8000W пропускает активный раздел и прощается. есть мысли?Мысль одна - взять нормальную утилиту разбивки диска. Но здесь я не помошник, сам пользуюсь досом, из под hiren cd.
Система то что говорит про эти разделы?
hantarex
31.03.2015, 10:26
в винде тоже виден только активный раздел
DemonId7
31.03.2015, 10:40
Значит что то bootice накосячил.
Попробуй создать один раздел, а затем в любом дисковом редакторе подправить байт активности раздела, как я писал в прошлом посте.
hantarex
31.03.2015, 11:17
болты
DemonId7
31.03.2015, 11:28
Форматировал с какими ключами?
hantarex
31.03.2015, 11:44
вообще без ключей, ибо нифига не понял что за что отвечает:)
неверно емкость диска определена, хотя данные скопировал с реальной карты.
неверно емкость диска определена
Ёмкость винта (не раздела) не зависит от форматирования, это физические величины. Задаётся в конфиге, по-умолчанию geometry="1024C63H255S", максимальные параметры для CHS, но это не 23Мб, а примерно 8Гб.
hantarex
31.03.2015, 13:01
прога показыает 3/255/63 C/H/S, если вбить в конфиг - матюкается, что неверные параметры диска. если вбить 255C3H63S - получается 23мб.
хотя, м.б. прога врет. буду дома вечером разбираться.
надо делать гуевую прогу, для чайников, вроде меня:)
если вбить 255C3H63S - получается 23мб
255C3H63S это 255 cyl, 3 heads, 63 sectors и это действительно 23мб. Так что всё правильно.
прога показыает 3/255/63 C/H/S
А тут 3 cyl, 255 heads, 63 sectors, ёмкость та-же, но параметры другие.
Ты определись с параметрами винчестера.
255 heads не бывает.
hantarex
31.03.2015, 13:31
это не винт, а CF карта.
значит, прога врет.
это не винт, а CF карта.
Без разницы. Вообще, адресация через CHS это анахронизм, но он пока поддерживается. Поэтому винты и карты выдают мнимые значения параметров, обычно максимальные значения. Но учитывая эти параметры можно адресовать нужный сектор даже через CHS.
Размер в секторах в блоке параметров (выдаваемом винтом/картой) тоже есть, он у меня считается на основании геометрии, заданной в CHS. Получится не больше 8Гб, но этого для эмулятора вполне достаточно. При адресации через LBA параметры CHS роли не играют.
hantarex
31.03.2015, 14:27
кстати, эта карта на MSX прекрасно работала:) надо инструкцию накидать по созданию диска для ПК8000, но это когда сам разберусь:)
DemonId7
31.03.2015, 15:03
Я что-то не понял, кто и где показывает неправильный размер и неправильную геометрию? Под эмулятором что ли?
hantarex
31.03.2015, 15:08
пока да:) так если в эмуле не пашет - на реале точно не заведется.
блин, стоит такая здоровенная ПЗУ, мож в нее засунуть программу для форматирования винтов?
DemonId7
31.03.2015, 15:12
Почему бы не загрузиться с CD/флешки и не подготовить CF нормальными дос-утилитами? Они и правильную геометрию CF покажут.
Кстати, помнится мучился со снятием образа. Пара утилит под винду снимали его крайне криво, почему то путая сектора, и пришлось на работе воспользоваться старым-добрым DiskEdit из нортоновских утилит.
Ну или до завтра подожди, вечерком сделаю нормальные утилитки под винду, аналогичные досовским. Давно собирался, да руки не доходили :)
hantarex
31.03.2015, 15:14
говорю - у нас четверть емкости ПЗУ используется. может в нее напихать сервисных программ? ну там, разметка, проверка, форматирование.
дома вечером буду с флешки грузиться.
DemonId7
31.03.2015, 15:16
пока да:) так если в эмуле не пашет - на реале точно не заведется.
блин, стоит такая здоровенная ПЗУ, мож в нее засунуть программу для форматирования винтов?
Не факт. Дело в том, что в эмуляторе нужно самому правильно прописать геометрию винта в конфиге. Если ошибешься с ней, то работать не будет. На реале же геометрию программе сообщает сам винт, так что все заработает.
А попробуй подключить CF к компу и посмотри через плагин в Total Commander, что там получилось. Все равно файлы нужно на диск копировать?
---------- Post added at 16:16 ---------- Previous post was at 16:15 ----------
Идею с ПЗУ в принципе можно реализовать. Только геморойно это все на ассемблере делать.
hantarex
31.03.2015, 15:16
все вечером, а то босс как-то подозрительно на меня смотрит:)
кстати, ДОС-раздел имеет смысл оставить.
и порекомендуйте программы под ДОС для работы с винтом и образами.
DemonId7
31.03.2015, 19:14
Если не секрет, а зачем тебе образ нужен?
hantarex
31.03.2015, 20:12
для эмуля, редактирования и заливки обратно на флеш.
---------- Post added at 20:12 ---------- Previous post was at 20:05 ----------
если винт без разделов СР/М - он все равно определяется?
DemonId7
31.03.2015, 20:38
для эмуля, редактирования и заливки обратно на флеш.Для переноса файлов есть более удобные способы, чем через эмуль.
если винт без разделов СР/М - он все равно определяется?Да, на экране должна отобразиться модель найденного винта, а уж затем ищутся разделы CP/M.
hantarex
31.03.2015, 21:18
ВВ55 поменял, попробовал два переходника, три карты - на 32, 128 и 256кб, два винта по 40гб - не видится винт:( завтра буду копать дальше. питания от ПК8000 контроллеру хватает?
переходник SD->IDE после переезда найти не могу:(
кондер на CS ВВ55 вешать какой емкости? J4 светодиод?
DemonId7
31.03.2015, 22:27
Резисторы R7 и R8 надеюсь не распаивал? Если да, то выкинь их нафиг, они пока не нужны. Питания для CF за глаза хватит. J4 светодиод, неплохо бы посмотреть как он себя ведет.
Кондер от 47пкФ до 1000 пкФ. Но дело не в нем. Даже без него винт будет определяться, пусть даже через раз-два.
Тестер есть? Можно на ВВ55 выставлять уровни на пинах и посмотреть как она реагирует (только винт нужно отключить, чтобы не мешал):
Выходишь в бейсик - при загрузке жмакаешь ПРФ.
Далее инициализируешь ВВ55: OUT &H53, &H80.
Заносишь в порты A, B и C (&H50, &H51 и &H52) какие либо значения и сверяешь их с напругой на ножках микрухи. Например:
OUT &H50, &H0F - выставить в порту A младшие биты в единицу, а старшие в ноль. Затем обнуляешь другие биты и выставляешь бывшие нулевыми.
Я так проверял при отладке. Оказалось, что глючила ВВ55 - некоторые ножки просто дублировали напругу соседних, вне зависимости от записи в порт. А ведь новая была зараза :)
hantarex
01.04.2015, 08:50
резисторы просто убрать?
попробовал две новых ВВ55. есть еще десяток, буду ковыряться.
DemonId7
01.04.2015, 11:14
Да, именно убрать. Менять десяток ВВ55 имхо смысла нет. Они конечно не отличаются надежностью, но не настолько.
В эмуляторе при работе в режиме LBA выдает неверный размер диска. Это не ошибка, просто эмуль немного забивает на некоторые поля блока идентификации устройства и там содержатся пробелы, а не размер диска в секторах (слова 60-61).
Потестировал твою прошивку, действительно пробелы. Стал смотреть код - всё вроде предусмотрено, а вот размер данных указан 64 байта :) Должно быть 128 байт (16-битные слова же)! После исправления этого досадного недоразумения твоя прошивка и в эмуляторе выдаёт правильный размер. Кому надо, качайте новую версию (дату ещё не успел исправить).
hantarex
01.04.2015, 21:27
фигня какая-то. все сигналы на ВВ55 приходят, даже RESET. на всех выводах ноль, кроме подключенных к инверторам - 1, 37, 38, 39, 40. на них 1,4В. уровни на выходах вообще не меняются. С9 снял, стоял 0,1мкФ. резисторы отключил, но дело явно не в них.
ВВ55 попробовал три штуки, из разных партий. ЛА3 менял на 155, потом опять на 555, но уже другую. кабель прозвонил от разъема весты до ножек мс\х. мысли на сегодня кончились.
---------- Post added at 21:27 ---------- Previous post was at 21:01 ----------
я так понимаю - косяк в CS. он должен приходить последним?
DemonId7
01.04.2015, 21:32
Нули на всех пинах похожи на состояние ВВ55 после сброса. Дешифратор U1 точно рабочий?
hantarex
01.04.2015, 21:33
менял их местами, бивис грузится, ВВ55 - нет. у меня плата на панельках.
кстати, RESET у меня похож на иголку. мож порт надежно сброситься не успевает?
DemonId7
01.04.2015, 21:43
я так понимаю - косяк в CS. он должен приходить последним?С небольшой задержкой, чтобы остальные сигналы установились. Для этого и ставился C9.
---------- Post added at 22:43 ---------- Previous post was at 22:38 ----------
Жаль нечем диаграммы снять.
hantarex
01.04.2015, 21:44
разве что осцил сфотографировать:) но у меня рук не хватит:)
DemonId7
01.04.2015, 21:48
Осцил ничего не даст. Тут нужно сразу все сигналы сымать.
А можешь ИД7 и ЛА3 на 1533 серию заменить?
hantarex
01.04.2015, 21:51
неа, в наличии нету. может в субботу куплю.
DemonId7
01.04.2015, 22:01
Ладно, надо подумать.
hantarex
01.04.2015, 22:18
а что тут думать? или ресет, или кс. дешифратор менять смысла не вижу, ведь память работает, а она побыстрее портов будет.
как ресет растянуть?
---------- Post added at 22:18 ---------- Previous post was at 22:05 ----------
надо перед инвертором RC-цепочку повесить! как в микроконтроллерах. а инвертор фронт выровняет, вроде так.
DemonId7
02.04.2015, 00:24
Сомнительно. Она и без ресета по идее должна работать. Разве нет?
hantarex
02.04.2015, 08:32
не уверен
Мне тоже кажется, что должна и без ресета работать. Аппаратный сброс нужен, чтобы не было конфликтов на шинах, после него все порты на ввод работают.
hantarex
02.04.2015, 10:15
тогда может 155ЛА3 назад запилить? у нее вроде задержка на элемент больше, чем у 555 серии?
Уточню, что самое имхо неприятное ограничение текущего варианта - неработа с файлами за границей 32 Мб, как установил zebest
Надо же было так просмотреть! Как обычно - copy/paste проблема :)
Ошибка тут:
SHL_D: MOV A,E
ADD A
MOV E,A
MOV A,D
ADC A
MOV D,A
MOV A,C
ADC A <- тут было ADD A из второй строки
MOV C,A
MOV A,B
ADC A
MOV B,A
RET
Теперь граница в 256 раз дальше :)
Мегареспект! :v2_thumb:
В 256 раз больше я пока не проверял, но за 32 Мб заработало
Надо бы ещё FAT32 допилить, там несложно, только поиск следующего кластера дописать...
Вроде формально (если не ограничиваться fat16 и sd) граница стала аж в 65536 раз дальше?
hantarex
02.04.2015, 14:51
это вы тут SD-карту обсуждаете? скиньте конфиг для ПК8000.
Вроде формально (если не ограничиваться fat16 и sd) граница стала аж в 65536 раз дальше?
Есть там ещё одно место: номер сектора на 512 умножается (у нас же не SDHC). Вот если на блочную адресацию переделать, тогда да.
это вы тут SD-карту обсуждаете? скиньте конфиг для ПК8000.
Пока его не существует. Может ivagor адаптирует :) Он для Спеца уже сделал.
Может кто из владельцев ПК8000 адаптирует?
Там 3 момента:
1. Две процедуры вывода на экран (PUTC и PRINT) и одна процедура ввода с клавиатуры (GETC). Изначально b2m заточил под рк86, но при переносе на специалист и львов (и даже, в общем-то, вектор) это не стало проблемой. Можно или сделать свою обертку этих процедур или выцепить из монитора РК86 для ПК8000 (хотя в нем вроде избыточно для данной задачи)
2. Переделать разбор заголовка rk на cas. Будет примерно аналогично львову-пк01 c lvt. Возможно корректная загрузка бейсиковских программ потребует пары дополнительных движений руками
3. Нужно где-то разместить служебные данные. В простейшем варианте просто занять какое-нибудь "свободное" место. Но для большей совместимости (мало ли куда захочет загрузиться произвольная программа) придется организовать некую дополнительную область озу. Для львова без огладки на реал сделал нечто своеобразное. Для пк8000 возможно удастся обойтись штатным диспетчером, хотя он не очень удобный для данного применения
hantarex
02.04.2015, 16:23
я про "железную" конфигурацию. SPI-порт и возможность подключать образ SD-карты.
вроде это есть в Орионе-128? или я что-то путаю?
В выложенном b2mом архиве есть пример конфига для рк86. По аналогии можно подключить практически к любому компу в его эмуляторе
hantarex
02.04.2015, 16:39
так у РК86 порты на память отображаются. а мне подавай IN-OUT:)
Ну уж и отличие :)
Для примера конфиг вектора
hantarex
02.04.2015, 16:54
port[70]=sdcard.ss - это клок? что сюда писать?
port[71]=sdcard.data - это команды/данные?
В sd_proc.inc
Вот вариант для вектора
hantarex
02.04.2015, 17:14
не скажу, что много понял, но буду разбираться:)
port[70]=sdcard.ss - это клок? что сюда писать?
Это управляющие сигналы, пока используется только нулевой бит - вывод CS.
port[71]=sdcard.data - это команды/данные?
Тут хитрее, запись в этот порт даёт клок на карту, при этом выводится старший бит данных. Одновременно идёт запись в сдвиговый регистр бита данных, который выдаётся картой. Если считать этот порт, то получишь содержимое сдвигового регистра.
Т.е. чтобы передать байт из регистра A карте, нужно выдать 8 раз OUT 71 / RLC, а чтобы считать, нужно загрузить в регистр A число FF, выдать 8 раз OUT 71 и в конце считать байт IN 71.
hantarex
02.04.2015, 17:23
во:) теперь по-русски:)
похоже на MSX, там вроде тоже карта тактируется записью в порт?
hantarex
02.04.2015, 17:37
что-то типа такого? DemonId7 должно понравиться:)
похоже на MSX
Дык оно и бралось за основу! :)
hantarex
02.04.2015, 19:07
ларчик просто открывался!:)
всего-то надо было С9 поставить:) запилил 1000пФ и все завелось с первого раза!
косяк в том, что у меня дофига мс\х разных, новых, а из конденсаторов - только блокировочные, на 0.1мкФ. и нет хлама под разбор:( надо затариться:)
в общем - схема работает, на плате всего две перемычки: разъем ПК8000 - 20 соединить с 16 выводом, разъем винта - 20 соединить с +5В. вторая перемычка - отсебятина, для питания CF-карт непосредственно от Весты.
DemonId7 еще раз большой респект, плата проверена, в субботу постараюсь отправить авторский экземпляр:)
DemonId7
02.04.2015, 21:26
Искренние поздравления!
В принципе утилитка под винду готова, уже испытал на своей CF. Работает как с образами, так и с винтами/CF. Остался один вопрос - разрешить перезапись активного раздела. Так что вечером залью.
Можешь не мучиться с образами, завтра форматнеш как белый человек :)
---------- Post added at 20:33 ---------- Previous post was at 20:26 ----------
что-то типа такого? DemonId7 должно понравиться:)
Я уже собирал вот такую штуку: MicroSD card breakout board (http://www.adafruit.com/products/254?gclid=CLH7l4iEkrwCFQPNOgod7BkAQA)
И должен заметить, что скорость просто удручающая. Думаю и здесь будет не лучше, а скорее всего хуже. Так что против. Мне больше по душе от MSX, вторая версия, где они реализовали таки нормальную запись. Микрух конечно много, но оно того стоит :)
---------- Post added at 22:26 ---------- Previous post was at 20:33 ----------
Обновил утилитку f8000w здесь (http://zx-pk.ru/showpost.php?p=748692&postcount=101).
Для справки запустить с параметром -h или -?. Все-таки решил пока не трогать активный раздел. Пришлось бы еще и загрузчик ПЗУ немного подправлять, а сегодня что-то влом.
hantarex
03.04.2015, 09:03
теперь всю инфу по контроллеру надо вынести в первый пост. это мне делать? или модераторам?
теперь всю инфу по контроллеру надо вынести в первый пост. это мне делать? или модераторам?
Первый пост твой, вот тебе и делать :)
hantarex
03.04.2015, 09:30
хорошо, займусь:) еще вопрос - щас будем изобретать интерфейс SD-карты. пусть все здесь и остается? или отдельную тему создадим?
хорошо, займусь:) еще вопрос - щас будем изобретать интерфейс SD-карты. пусть все здесь и остается? или отдельную тему создадим?
Ну как бы название темы не конкретизирует с чего вы именно собираетесь грузится. Главное чтобы сами потом не запутались
hantarex
03.04.2015, 09:47
ладно, будем результаты в первый пост выносить.
что-то типа такого?
Нет, тут не сдвиговый регистр. Быстрее будет, если при чтении собирать биты в байт аппаратно. Скорость записи менее критична, да и команда RLC между командами OUT работает быстро. А вот собрать байт из битов программно - на ВМ80 достаточно муторно.
Error404
03.04.2015, 15:42
И должен заметить, что скорость просто удручающая. Думаю и здесь будет не лучше, а скорее всего хуже. Так что против. Мне больше по душе от MSX, вторая версия, где они реализовали таки нормальную запись. Микрух конечно много, но оно того стоит :)
Скорость схемы SD с одним регистром (N8VEM) примерно в два раза ниже скорости DS/DD дисковода. Скорость IDE8255 и первого варианта SD MSX (где такт сдвигового регистра делается автоматом при записи в порт) чуть выше чем скорость DS/DD дисковода (менее чем в 2 раза). Еще чуть выше (до примерно в 2,5-3 раза чем DS/DD дисковод) схема условно "NEMO IDE". Схема SD от HardwareMan-а (где независимый такт сдвигового регистра) самая быстрая, но на рассыпухе ее никто не проверял (делали на ПЛИС) и думаю там есть зависимости от скорости (такта) хоста (Ориона/ПК8000/etc) - может и не завестись на максимальных частотах хоста из-за отсутствия обратной синхронизации.
И. Все эти схемы медленные. :) Для нас, разбалованных PC.
Все зависит от того что планирается в работу на этих схемах. В 90-е всем хватало и скорости дисковода, а куда больше то - игры грузить? А если брать к примеру многозадачный Юзикс на том же Орионе и выгрузку станиц в свап на внешнем носителе с частотой несколько раз в секунду, то не хватит никакого носителя "от Z80", даже с ДМА, реально использовать только ОЗУ и расширять надо его, а не ускорять носитель.
Я к тому что не всегда стоит упираться, городя особенно сложные схемы чтобы убыстрить носитель на полтора десятка процентов.
это вы тут SD-карту обсуждаете? скиньте конфиг для ПК8000.
Сделал конфиг для ПК8000 и SD-карты: http://bashkiria-2m.narod.ru/files/pk8000_sd.rar
В архиве есть образ карты с двумя образами дискет для ПК8000.
Выглядит так:
hantarex
06.04.2015, 15:03
b2m, исходниками pk8000_sd.bin не поделитесь?
http://bashkiria-2m.narod.ru/files/pk8000_sd_src.rar
DemonId7
12.07.2015, 17:37
Перенес в пост, указанный по ссылке в первом посту.
DemonId7
28.07.2015, 11:38
Пришел китайский логический анализатор. Решил глянуть из-за чего были проблемы с чтением. В общем зря я привязал /CE ВВ55 к сигналам /RD и /WR. Если при записи сигнал /WR достаточно длинный, то с чтением я облажался. /CE вырубался вместе с /RD, когда комп только приступал к чтению. Понятно, что читал мусор. Кондер С9 хотя и смещал /CE, но все равно чтение проходило на грани.
В общем, я себе сделал небольшую переделку. Выводы 6 и 9 ЛА3 разъединил и соединил вывод 9 с 10. Теперь /CE включён все время цикла чтения/записи и надобность в С9 отпала. Переделка незначительна и практически не заметна на плате.
DemonId7
20.02.2016, 20:07
Выложил BIOSIDE версии 1.2. Исправил пару багов и довел до ума загрузчик. Скачать можно по ссылке в первом посте.
Коллеги, приветствую! Собрал данный девайс, не работает - даже не пытается грузиться с ПЗУ, как будто ничего не вставлено валится в бейсик((( ПЗУ прошивал файлом pk8000_hdd.bin из архива в топике. 16й пин закорочен на 20й и на кабеле, и на шлейфе (А3 доходит куда надо). Внес доработку из предпоследнего сообщения - "Выводы 6 и 9 ЛА3 разъединил и соединил вывод 9 с 10". Прикрепляю фото девайса, шлейфа, распиновки из документации - может кто поймет, что не так сделано. Куда рыть дальше?
59653596525965159650
PS почему то при загрузке картинки переворачивает, не разобрался как их в нормальное положение поставить...
DemonId7
05.02.2017, 15:06
Микросхема ПЗУ 49F002? Если да, то проблема очевидна. 30-й вывод у нее - это адресная линия А17. На плате этот вывод заведен на плюс, то есть на него поступает логическая "1". Поэтому, нужно прошить образ в старшие адреса микросхемы, то есть с адреса 131072. А еще лучше, прошить по всем адресам, кратным 16 Кб.
И еще. Нужно внимательнее быть к джамперам. Они отвечают за адресные линии А15 и А16. И если установлены на питание, то и положение образа в ПЗУ нужно корректировать.
Спасибо)))) Записал по всем адресам, кратным 16Кб, стал загружаться с ПЗУ (заодно разрезал перемычку 32-30 на плате на всякий случай, чтобы несповадно было)))). "IDE BIOS ПК8000 1.2 Test ROM ... ok. Reset..." в этот момент на ПРФ не реагирует (хотя написано, что нужно нажать "ту брейк"). Дальше "Devices not found!", пресс эникей работает - выводит в бейсик. В слот IDE вставлен DOM - disk on module 512Mb - работает прекрасно как IDE во всех остальных девайсах типа - УКНЦ и Поиск. Куда рыть дальше?
Странно ведет себя светодиод, при первичном включении он загорается и гаснет, при последующих ресетах, включениях такого не происходит. Если комп постоит около получаса выключенным, то при включении светодиод опять загорается и гаснет. Поменял несколько ВВ55х (у меня их штук 5), менял местами дешифраторы. Кондер С9 заменил на 130 пФ (1000 пФ не нашел), но С9 с последней доработкой не должен же влиять? Что еще могу попробовать... заменить ЛА3, может она косая... откатить доработку - разомкнуть 9 и 10 ногу ЛА3 и замкнуть 9 с 6й? При этом поставить кондей на 1000 пик?
DemonId7
06.02.2017, 14:36
А нет возможности проверить на Compact Flash или стареньком винте?
Дело в том, что я сам толком не знаю как правильно инициализировать устройство при включении. В результате есть проблемы с винтами объемом от нескольких Гб, они просто не видятся. Может и с DOM похожая проблема?
Вечером постараюсь программу все таки доработать до надлежащего вида, заодно посмотрю как это сделано у других. Гаснущий светодиод наводит на мысль, что возможно программа слишко мало удерживает линию RESET.
Просто схема проста как две копейки и должна завестись без настроек. Конденсатор C9, после описанной выше доработки, лучше вообще выкинуть, чтобы не вносил смещений сигнала. Ноги ЛА3 лучше не трогать, иначе точно возможна ситуация с проблемой смещения сигнала CS и подборкой конденсатора C9.
Ок. Доберусь до дома, выкорчую С9 вообще. DOM - 512Mb, должен читаться... также попробовал CF 512Mb через переходник - тоже не определяется. И DOM размером 1Gb - тоже. Осталось только реальный хард подключить))) 170Mb где-то валяется...
- - - Добавлено - - -
Итого. Убрал С9, ситуация не поменялась. Одновременно заменил ЛА3 и подключил реальный хард - он определился!!! светодиод при этом правильно показывает активность. подключил обратно DOM 512 - слаааабо слабо редко мигает светодиод, но не определяется. Подключил DOM 1024 - вообще нет реакции. Подключил переходник на CF с питанием от 20го пина - судя по всему 5 вольт на него дается только в момент опроса HDD, потому что он мигает питанием также, как светодиод при определении харда. В общем определение устройства работает пока только на реальном харде, и то, через раз он определяется не как квантум, а как ЪпЪпЪпЪпЪпЪпЪпЪпЪпЪпЪпЪп, размер и ЛБА определяет корректно))) продолжаю изыскания)))
- - - Добавлено - - -
Другой квантум также детектится нестабильно. То 810Мб как и должен, то 260Гб)))) и кракозябры в названии)))
DemonId7
06.02.2017, 21:49
Увеличил время импульса сброса. Два винта по 20Гб заработали исправно. Есть еще пара идей, проверю чуть позже.
Подключил переходник на CF с питанием от 20го пинаЭто как? На плате 20-й пин вообще никуда не подключен! Под питание рядом с разъемом IDE есть место под клемники, откуда и можно взять питание (только для CF, винты жрут слишком много, есть вероятность, что спалят БП компа).
В общем определение устройства работает пока только на реальном харде, и то, через раз он определяется не как квантум, а как ЪпЪпЪпЪпЪпЪпЪпЪпЪпЪпЪпЪп, размер и ЛБА определяет корректно))) продолжаю изыскания)))От чего питание запитывается?
Я свои винты подключаю к внешнему БП и проблем с работой нет. Испробовал на трех адаптерах, включая самодельный.
Увеличил время импульса сброса. Два винта по 20Гб заработали исправно. Есть еще пара идей, проверю чуть позже.
Жду новую прошивку))
Это как? На плате 20-й пин вообще никуда не подключен!
Да, протупил)) 20й пин никуда не ведет, но переходник на CF начинает моргать диодами "Питание" и "Карта определена" вместо светодиода на контроллере - видимо специфика переходника)) Когда подрубаешь его к внешнему питанию, то не определяется.
От чего питание запитывается?
От ATX блока питания, на 12в есть нагрузка. А вот БП Суры постоянно почему-то при включении выбивает, т.е. нажимаешь на кнопку, а она обратно отскакивает (не знаю, есть ли в этом БП защита от КЗ). Вольтаж на плате контроллера (он же через разъем дается) нормальный. Кстати не факт, что винты живые, они и в PC глючили. Хотелось бы конечно чтобы ДОМы заработали.
Сейчас пытаюсь разобраться с утилитами форматирования винта - пока что не очень выходит:
c:\F8000W>f8000w f: -f sd.img
Format for PK8000.
>Select drive:
[1]: Image - 2Mb
[any other key] to exit
*здесь жму 1
Select: Image
Bye!
И ничего не происходит. Все это на винде 10ке (в параллели на Маке), IDE подключен через USB-переходник.
Не могу понять как ему дать понять что куда копировать, хелп тоже сильно не помогает))))
А вот БП Суры постоянно почему-то при включении выбивает, т.е. нажимаешь на кнопку, а она обратно отскакивает (не знаю, есть ли в этом БП защита от КЗ).
Там стоит ПКН 41-1-2 (http://images.ua.prom.st/368503601_w640_h640_cid935013_pid91236837-ea8f9bfa.jpg), за которыми может наблюдаться такой грешок: защёлка плохо работает, поэтому кнопка отскакивает обратно. На советских телевизорах это явление встречалось сплошь и рядом.
DemonId7
07.02.2017, 18:40
Забавно, но у меня оказывается проблемы были из-за шлейфа. Заменил на другой и все винты заработали без каких либо изменений в софте. Для удобства подпрограммы детектирования вынес в отдельную утилиту:
59675
Единственная прблема с квантумом (который на 10 Гб). Эта сволочь как-то нестандартно инициализируется. Если сначала подать питание на винт, то впоследствии винт не виден и через минуту отключается (останавливает блины). Если сначала включить комп, то при подаче питания на винт у него сразу проходит сброс и в дальнейшем он прекрасно работает. Но, все это в том случае, если вынуть из панельки микросхему ПЗУ. С ней винт не пашет ни при каких обстоятельствах. В общем, похоже ему нужно делать программный сброс, но я понятия не имею как это провернуть (точнее сколько ждать и чего ждать после сброса).
Детектились так же две SATA-барракуды, но параметры не принимались, что не удивительно, учитывая их болезнь.
В общем, проблема не в софте. Нужно шлейфы проверять, а так же внимательно рассмотреть пайку. Вот что это:
59676
Может конечно отсвет, но похоже на корочение 9 и 10 ног с 11 (с ресетом ВВ55).
Во вторых, резисторы R7 и R8 не нужны. Они добавлялись в схему на всякий случай. Практика же показала, что и без них все прекрасно работает, так что лучше убрать.
На всякий случай выкладываю версию прошивки с увеличенными таймингами, хотя у меня все прошивки сейчас работают без нареканий.
- - - Добавлено - - -
По утилитам чуть позже выложу инструкцию, для начала нужно плату завести.
597005969959698
Спасибо!!!! С новой прошивкой все девайсы стали определяться правильно и стабильно!!!))) Фото: 1 - CF 512Mb через переходник, 2 - гиговый ДОМ, 3 - 512Мб ДОМ. Винты естественно определяются на ура как и раньше, только стабильно. жду инструкцию к утилитам)))
DemonId7
09.02.2017, 06:31
Первое, нужно разбить диск на разделы. Я делаю это программой FDISK, из пакета MS-DOS/PC-DOS, но возможно есть аналогичные программы под винду. Итак, первым делом, выбираем нужный нам диск и удаляем с него все разделы. Далее, создаем основной раздел. В CP/M он будет игнорироваться, поэтому на него нет ограничений по размеру. Затем, создаем расширенный раздел на весь оставшийся объем диска. В этом расширенном разделе создаем логические диски, которые и будут отображаться в CP/M. Поэтому, желательно "нарезать" их размерами от 1 до 20 Мб, не более 12 штук (на больше не хватит памяти у ПК8000). По завершении назначаем основной раздел загрузочным (первичным) и выходим. Основной раздел можно отформатировать и записать на него дос и все необходимые утилиты, но это по желанию.
Вот теперь используем F8000D.EXE.
Коротко о параметрах.
В CP/M диск состоит из 128-байтных секторов. То есть, все операции записи/чтения производятся с секторами, а не побайтно. Сектора объединяются в группы, от 2 и выше секторов (всегда кратно степени двойки!). В досе эти группы называют кластерами, в CP/M - блоками. Таким образом, минимальная единица дискового пространства в CP/M - это блок. Даже если файл имеет размер в 1 байт, на диске ему выделится один блок. Понятно, что чем меньше блоки, тем рациональнее используется дисковое пространство. Однако, в системе есть такая таблица - allocation vector (ALV), где помечается статус блоков диска (занят или свободен). Размер этой таблицы естественно ограничен. В данной реализации ее размер 2Кб, то есть на 16384 блоков (1 бит - 1 блок). И если одному диску выделить 8000 блоков, то остальным останется чуть больше половины. Поэтому количество блоков нужно распределить так, чтобы хватило всем дискам. Если имеем 12 дисков одинакового размера, то каждому можно выделить по 16384/12 = 1360 блоков. Это и регулирует параметр:
-a<xxx> - size ALV with 'xxx', [128..512] (default 256)
Размер задается в байтах и чтобы получить количество блоков нужно умножить на 8. Размер я ограничил от 1024 до 4096 блоков. Нужно понимать, что реальный размер блока может отличаться от заданного. Он вычисляется по формуле: size = DiskSize / ((ALV - 1) * 8) и округляется до большего значения кратного степени двойки. К примеру, имеем диск 2Мб и задаем ALV равным 300, то есть 2400 блоков. Размер блока будет равен 2Мб/(299 * 8) = 876. Округляем до ближайшего кратного и получаем 1024. Количество блоков соответственно будет 2048 (вместо запланированных 2400), а размер ALV = 256.
Под оглавление диска тоже выделяется некоторое количество блоков. Чем больше, тем больше файлов можно на нем хранить. Максимально можно выделить 16 блоков. За это отвечает параметр:
-d<x> - size directory in clusters [2..16] (default 2)
Только не нужно забывать, что чем больший размер директории, тем больше времени тратит система на поиск и загрузку файлов. Ну и на размер свободного пространства тоже влияет, не без этого. Тут трудно что-то посоветовать, поскольку один файл может занимать от 1 до нескольких записей (одна запись - 32 байта) и расчитать заранее невозможно. Мне хватает 4 блоков и лишь один раз столкнулся с нехваткой места в директории, когда пытался уместить на диск несколько десятков файлов. В общем, нужно экспериментировать.
Итак, запускаем. Выбираем диск. Далее начинается сканирование и поиск логических дисков. При нахождении логического диска будет выведен запрос на конвертирование его под CP/M. При нахождении диска CP/M будет выведен запрос на его преобразование в диск DOS. Это было сделано после того, как я столкнулся с тем, что FDISK отказывается удалять разделы с дисками НЕ-DOS. Такая вот политкорректность от мелкософта :)
--------------------------------
Теперь можно приступить к переносу софта. Это делается либо в досе, утилитой C8000D, либо в винде, посредством плагина к Total Commander, я его здесь выкладывал. Утилита C8000D требует задания имени диска, на который копируются файлы. Имя - это имя диска в CP/M, начиная от 'A' и тд. по возрастанию. Копируемые файлы можно задать по маске, как это допускает ДОС. Все, подключаем к ПК и работаем.
PS: Собственно диск в основном разделе я форматирую под FAT16 и делаю его загрузочным. На него записываю вышеперечисленные утилиты и все файлы для ПК8000. Удобно тем, что загрузившись с него можно форматнуть любой CP/M диск и записать нужные файлы. Сам диск прекрасно виден в винде. Как-то так.
PPS: Можно дать на тестирование еще одну прошивку? Хочется уточнить в чем была проблема.
Спасибо)) сегодня попробую разметить хард))
PPS: Можно дать на тестирование еще одну прошивку? Хочется уточнить в чем была проблема.
Конечно можно. Перепрошью, сообщу результаты.
DemonId7
09.02.2017, 20:09
В архиве две версии, условно помеченные 1.2b и 1.2c. Интересует стабильность определения как самого устройства, так и логических дисков на нем (разумеется после их форматирования утилитой F8000D). Желательно раз 10-15 выполнить перезагрузку и посмотреть результат.
Можно сразу обе прошить, допустим по адресам 8000h и C000h, оставив на 0000h старую прошивку, и выбирать джамперами нужную (они для этого и делались). Впрочем, это кому как удобно.
По результатам тестов думаю окончательно подкорректировать прошивку. Ее выложу как и предыдущую, по ссылке в первом посте.
Вопрос: как повыдергивать из образов FDD файлы? или где взять подборку программ в виде файлов?
- - - Добавлено - - -
Или как вариант - может кто выложит готовый образ HDD c хорошей нарезкой программ?
DemonId7
10.02.2017, 20:21
В аттаче плагин к Total Commander, позволяющий работать с FDD как с архивами. Прописываешь его как архиваторный (WCX). ЕМНИП настраивать не нужно, работает сразу.
Также прикладываю архив с дисковыми утилитами, там же краткое описание. Еще можно файлы CAS перевести в COM, утилитой CAS2COM, я ее выкладывал ранее.
PS: Собственно из плагина нужно всего 2 файла: odi.wcx и odi.ini.
По всем симптомам в версиях b и с - все гораздо хуже, даже по сравнению с просто 1.2... на моем контроллере вообще все перестало определяться. ДОМы вообще не видны, живой ХДД определяется гораздо реже, чем на прошивке 1.2 (без букв). Попутно обнаружил, что из трех пришедших из китая ПЗУ, живая только та, которую я изначально использовал - две других нерабочие((( одна шьется, проходит проверку, но с нее контроллер в упор не стартует (чуть позже стала давать ошибку ID), другая просто кидает ошибку ID и даже не шьется... Прошил изначальную двумя прошивками.
На версии 1.2a - разделы CP/M видит на ХДД стабильно, на ДОМах - в упор нет, из 30 перезагрузок один раз увидел на ДОМе разделы с CP/M. Во всех случаях дальше Ошибка БДОС на диске А: - и все.
По статистике:
Прошивка Б - ХДД определяется через раз, диски СП/М не видит вообще. Прошивка Ц - ХДД определяется раз в 5-6 перезагрузок. ДОМы не видят обе прошивки вообще. При чем 512 - опрашивает интенсивно, 1024 - пару раз тускло моргает и все.
DemonId7
12.02.2017, 09:45
Вот новая прошивка, с учетом предыдущих. Попробуй. Но, все же я больше склоняюсь к тому, что где-то контакт плохой, либо подкорачивает, а может помехи прут. Ну не может DOM быть настолько тормозным.
Ну вот я тоже на это грешу... хотя уже вызванивал раз 5...
Сегодня проверю. Пока что дальше всего удается пройти этот квест на сочетании прошивки 1.2а и живого винта на 2Гб: определяется, иногда находит разделы, когда находит "Ошибка БДОС". "Помогает" еще неуверенность в этом винте, потому что я его из пня снял из-за нестабильности его работы...
- - - Добавлено - - -
С этой прошивкой 1.2d - работает отлично! Определяет ДОМ, определяет СП/М диски, потом Вдос Ерр Он А: Бэд Сектор - результат стабильный после многократных ресетов. Пробовал разные параметры при форматировании, последний вариант - 4 логических диска по 3Мб, утилиту запускал со всеми параметрами по умолчанию с ключом /ю - чтобы форматировал весь раздел. Скажи, что делаю не так? Нет возможности выложить образ рабочего размеченного винта?
- - - Добавлено - - -
Ан нет! Не совсем стабильная работа! Перегружал на холодную несколько раз. Прямо сейчас перегрузил - определяет только раздел А: При чем разница в поведении "на холодную" и после прогрева замечена уже неоднократно...
На скрине вывод команды dir, когда система наконец выводит промт.
59740
DemonId7
13.02.2017, 08:54
У меня где-то на работе лежит одна из первых изготовленных плат, с похожими симптомами: на холодную каверкала принимаемые данные, в частности имя носителя и его размер, а как малость "разогреется" - начинала работать стабильно. Причем с винтами сразу работала нормально (он разгоняется долго, видимо успевала "разогреться").
Лень было разбираться в причинах и я ее забросил в какой-то ящик. Завтра поищу и сниму осцилограммы, может они объяснят как и почему теряются принимаемые данные.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot