-
Вложений: 3
Не прошло и года :) В общем сорсы пока нет смысла выкладывать, где-то непонятная ошибка, плюс на выходные планирую их доработаь до товарного вида.
Пытаюсь записать файлы по команде SAVE. То пишет, то ошибку выдает. Зависимости от размера блока не заметил. Самое интересное, что ошибка только на диске малого объема, с кластером 1Кб. На диск в 8Мб, с кластером в 4Кб, пишется без проблем. Возможно все-таки блок параметров неверно расчитываю.
В архиве файлы для эмулятора:
Вложение 47801
В папке FRM утилитка для "форматирования" винта. Натравливается на образ винта, разбитого FDISK'ом на логические диски. Активный загрузочный раздел игнорируется, остальные преобразуются в CP/M. Параметр '-A' задает размер таблицы свободных блоков, пока нужно использовать только 256. Параметр '-D' - это количество отведенных под директорий кластеров. По умолчанию отводится 2 штуки. Сорс под DOS пришлось править, но времени протестировать не было. Завтра.
Большая просьба к тем, кто разбирается. Гляньте сорсы, правильно ли я расчитываю параметры дисков?
Ну и образ винта: http://myfolder.ru/files/40619284
На нем только SV.COM. Поначалу работала. После перезагрузки эмулятора перестала :)
Вложение 47802
Вложение 47803
-
Разобрался. Проблема с переносом файлов. Никак не найду вменяемой инфы по файловой структуре.
-
Что-то в теме тишина. Интерес еще не пропал? Выкладывать результат? Все работает и недописана лишь утилитка копирования файлов на винт из под доса.
-
-
Вложений: 4
Все в архиве:
\emul - это для эмулятора, плюс исправленный образ винта: cf.rar
\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: Пора бы подумать и о разводке платы под это дело. Я в этом деле не силен и в лучшем случае смогу родить безобразие на фото (на котором и проводил все испытания) :)
-
-
Круто - это еще мягко сказано:) как щас говорят - респект и уважуха!:)
-
Да ладно, это Дмитрию нужно сказать спасибо за прекрасный эмулятор, очень помогший в отладке и авторам МДОС, чьи дизассемблированные наработки легли в основу модуля 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...icroDOS_manual
"4.5. Дополнительные команды"
getErrMsgTAB - возвращает адресс тамблицы ошибок ;)
зачем надо я так и не понял.
в общем если у кого есть доки - поделитесь ;)
-
Вложений: 1
esl, я так сильно не углублялся, только модуль bios. Сегодня внимательнее глянул. Все отличия:
- инициализация rst 1 - rst 6 на подпрограмму warmboot, а rst 4 - на подпрограмму сравнения двух 16-битных чисел (равно/не равно).
- rst 7 указывает на подпрограмму вызова оригинального обработчика.
В аттаче то, что дизассемблировал. Кто-то хотел заняться досом вплотную, может пригодится, все же не с нуля начинать :)
С копированием файлов покончено. На днях спаяю ПЗУ'шку и опробую на реале всю систему в сборе. Тогда и выложу окончательные варианты утилит.