Из старых ОС в Базисе почему-то полностью отсутствует РДС, хотя он имеет несколько версий, да и в "Вектор User" ему были посвящены целые статьи... Хорошо бы собрать и упорядочить по нему инфу, да добавить в каталог.
Вид для печати
В T34 и T72 судя по описанию еще и драйверы fdd переработаны (сам не сравнивал). Насчет версии микродоса - кроме 3.1 есть еще 3.0. Кое-где поддержка разных принтеров.
b2m, открой тайну, откуда mdos3.com?
- - - Добавлено - - -
РДС в базисе есть в неявном виде, но вроде не все версии и не все доки (сейчас не проверял).
Доброго времени дорогие товарищи ! ))
Великое дело делаете, спасибо огромное !
Потестировал последнюю версию, как пользователь обязан сказать, что пока в плане бытовом от совершенства далеко, тем не менее, я понимаю, что это пока что только экспериментальный код, и в целом, самое главное в этом коде - работат с диском. И она на высоте реально. На эмуляторе я не тестил эту систему, не очень интересно, а вот реал показал полную работоспособность на 256 мб CF карте. Читал и писал на 50 и 100 дискеты, до полного заполнения, все читается, пишется, скорость возрасла в разы, это заметно даже по миганию светодиода HDD контроллера, он почти не тухнет. В общем, очень круто, вы просто гениальные, господа !!! Благодарен !
Опять же скажу, что понимаю, что код экспериментальный, но тем не менее, хочу поделиться тем, что вызвало у меня трудности в новой системе,. Понимаю, что это не так важно, но думаю, в будущем, когда система станет работать максимально хорошо по части HDD - то и эти небольшие баги будут устраняться. Я попытался тестить копирование под ASC.COM, и - при выходе из ASC.COM палитра остается от нее, и в консоли разные части букв разных цветов. Еще, как тут и писалось, не работает FDIR и DELETE - после запуска DELETE система переходит на указанный диск, но ничего не происходит, в консоли рисуется галочка ">" без буквы диска и за ней мигает курсор. Выходит из этого по нажатию "СБР+БЛК". То же после запуска FDIR - разница только в том, что диск не меняется. В целом, с ASC работает немного по другому, в версии ASC которую я использовал, в mdos31h - команда 9 A:X меняла диск и снова в ASC все возвращалось, под этой осью такого нет, команда 9 - выкидывает из ASC. Есть очень положительный момент, работает DESIGNER - редактор графики, причем, с любого диска. Это предел мечтаний, использую программу для правки и создания кусочков графики, спрайтов, для программ. Приходилось ее с дискеты использовать, максимум с квазидиска но при отсутствии HDD. Теперь все изменится !!!
В общем, я прошу меня простить, если я чего то ненужное пишу, или не в тему вообще, если вы не против, я буду тестить новый код, и изредка выкладывать подобные отчеты, но если этого не нужно делать, скажите пожалуйста об этом.
В целом, спасибо Вам огромное что вы этим занимаетесь !!!
И еще кое что забыл. Не работает INITIAL.SUB. В плане использования оси - очень на мой взгляд важная штука. Может она работает от куда нибудь из другого места, у меня она на первой дискете HDD лежит, и она уже сразу пишет дос на сист. дорожки квазидиска, задает цвет, копирует все нужное на квазидиск и запускает ASC.COM... А в этой оси эффекта не было.
Я продолжу тестирование, если что от еще найду интересного, допишу...
У меня давно есть маленький вопрос (багрепорт?) по t72. Все версии, в т.ч. оригинальная, странно реагируют на ввод B (только одна буква, как диск, но без двоеточия).
Эта странная реакция есть почти во всех МДОСах, это т.н. недокументированная команда "B", слышал, что она предназначена для вывода каких-то спрайтов на экран, но реально не знаю, где она используется. И эта программа имеет глюк при запуске без параметров, я хотел как-то разобраться и исправить, или вообще её удалить, но пока до неё руки не дошли.
Запускается "В" в МДОС вот от сюда:
Код:P_C2DE: LDA M_E117 ; вызов из PCHL (2) -- команда "B"
CPI 001h
RNZ
LXI H, L_DF94
CALL L_C134
LDA L_DF95
CPI 020h
JNZ L_C2F8 ; переход, если есть параметры
CALL L_CB01 ; вот оттуда сыпется мусор...
JMP L_DAAA ; а до этой команды вообще не доходит.
Ну не помню я, откуда у меня архив soft_viknik.rar 13.07.2011
Внутри 24 образа дисков с именами VECnn.fdd, все файлы имеют одну и ту-же дату 04.07.2011 23:46
Смутно припоминаю, что вроде бы сконвертил их из .td0
mdos3.com я нашёл на VEC2.fdd
- - - Добавлено - - -
Изучай.
Спасибо, у меня такого нет. В архиве Фиронова mdos3.com не нашел. Насчет микродоса 3.0 я ошибся, все 3.1 (или 3.1М).
Попробовал корветовский микродос 2.6 - он команду B не знает. Возможно есть более поздний микродос, но из более поздних корветовских я видел только cp/m.
Команда B не во всех досах гонит пургу на экран, в поздней версии "только кваз" dos31k.rom (из архива Фиронова) виснет.
Код:²²²²²²²²²²²²²²²²²²²²²² НОВОСТИ МикроДОС ²²²²²²²²²²²²²²²²²²²²²²²²
Наверное каждому пользователю МикроДОС приходилось наблюдать
странную реакцию системы на команду B<ВК>. При этом компьютер
пытается напечатать сообщение находящееся где-то между
4000h-5000h; естественно, никакого сообщения там нет, а есть
только всяческий "мусор" от предидущей программы или, в лучшем
случае, нули. В результате система печатает (или, в случае
нулей, "висит") какой-то психогенный летучий бред, пока не
встретит ограничитель последовательности '$', т.е. достаточно
долго. При этом имеют место такие неприятные явления как
переключение драйвера вывода на славянский алфавит, что в
конечном итоге заставляет нетерпеливого user'а нажимать
волшебные кнопки в верхнем правом углу клавиатуры...
Отчего же всё это происходит? задают себе вопрос user'ы,- и
тутже сами себе и отвечают: "видимо авторы МикроДОСа мало-мало
напортачили!" И действительно напортачили. И не так уж и мало.
Насколько удалось выяснить, копаясь в ДОСе, команда B это не что
иное как "замаскированная" команда S. В куцем руководстве по
ОС, каким пользуется большинство пользователей, сказано, что она
назначает системное дисковое устройство. Действительно, в более
поздних версиях МикроДОС (например в Корветовской) эта команда
работает именно так, но в версии 3.1 83-го года команда S
предназначена для загрузки файлов с расширением .SPR (видимо от
System PRogramm). Формат этой команды: S <имя файла>.
Расширение .SPR указывать не надо. В нашей же "неправильной"
ДОС вместо S необходимо ставить B, т.е. так: B <имя файла>.
Если же имя файла не указано, то теоретически ДОС должна
выдавать сообщение "NO FILES", но "CALL в никуда", к сожалению
не даёт ей такой возможности, отчего и происходят штуки
описанные в самом начале.
Естественно, после обнаружения всех этих фактов, у автора этой
статьи зачесались руки и он устранил все обнаруженные ошибки.
Попутно ему удалось разобраться в структуре .SPR-файла, который,
как известно загружается не в начало, а в конец Области
Транзитных Программ. Структура эта оказалась довольно сложной.
Пользователи могут получить представление о работе с .SPR
файлами если переименуют SID.COM в SID.SPR и попробуют загрузить
его.
А что касается исправленной версии МикроДОС, то автор рискнул
изменить её версию с 3.1 на 3.11 и планирует выпустить в
ближайшее время с несколькими программами, написанными
специально для неё. Кстати BIOS3.11.F.11 Е.В. Филиппова делает
исправленную версию ОС самой лучшей из всех существующих.
29.08.93.Усков И.М. (Волгоград)
Прикольно, действительно Филипповские досы не виснут по команде B и SID.SPR загрузился. А я не докопался, что надо грузить SPR и не знал, что за SPR (не картинки же) и где взять. Пробовал делать B имя_файла и дос (по крайней мере t72) выдавал "имя_файла?" как и в ответ на другие неправильные для команды аргументы. Что там за "структура файлов SPR" у меня нет желания разбираться и вряд ли команда B нужна. В t72 есть еще команды неизвестного (мне) назначения, хорошо бы прояснить их назначение и способ использования или убрать.
- - - Добавлено - - -
Стало интересно, может в FH51 (модифицированный автором контроллера hdd Фроловым ДОС Филиппова) и заворота нет? Все же заворот и в этом "классическом" досе есть.
- - - Добавлено - - -
Оффтоп, но тоже интересно, о каких более поздних корветовских версиях МикроДОС речь, если 2.6 (что на первый взгляд меньше 3.1) датирована 85 и 87.
- - - Добавлено - - -
Нашел корветовский Big Dos (юмор такой) ver 3.9 (16.04.96), но вряд ли о нем писал Усков в 93.
- - - Добавлено - - -
И есть модифицированный корветовский микродос 2.6 1990 года, совместимый с ОПТС 2.0. Заканчиваю оффтоп про корветовские микродосы.
Может быть "System PRogramm"-файлы это что-то типа подгружаемых драйверов в формате, позволяющем грузить их в любой адрес памяти...
Попробовал классику mdos31, оригинальный t72 и упомянутый Усковым mdos311 (BIOS 3.11.F.11) - все они по B SID грузят SID.SPR и все реагируют на B без аргумента печатью ерунды. Пара попробованных досов Филиппова (F51 и F14.3) на B без аргумента реагируют просто возвратом в командную строку, в варианте с аргументом успешно грузят.
А вот os-t72kd2.rom похоже при B c аргументом (когда на диске реально есть такой файл с расширением SPR) портит диск. В таком случае определенно лучше убрать эту команду.
Надо будет сравнить МДОСы Филипова и Т72, что там было пропатчено, и обновить МДОС в Т-72. :)
А какие именно? Там в МДОСе есть команды: <A>, <B>, <D>, <E>, <K>, <O>, <U>, кроме того, есть цифровые команды пользователя в БДОСе:
- команда "0" устанавливает параметры ввода/вывода
- команда "1" запись файла из оперативной памяти на диск
- команда "5" переименовывает файлы
- команда "8" проверка/форматирование электронного диска
- команда "9" (доб.) назначение дискет НЖМД на диски А: и Б:
Или есть ещё секретные хитроспрятанные команды?
- - - Добавлено - - -
Это моё безобразие... Для отвязки Т-72 от обязательной необходимости наличия дискеты при старте, Т-72 теперь ищет INITIALC.SUB на квазидиске. В принципе, это можно вернуть назад, если надо. Или пока можно после старта руками вводить команду "<A:INITIAL.SUB".
Я не вникал, просто увидел список в исходнике
Скрытый текст
Код:.db 05Ah ; <Z> (offset 0340h) 00
.db 05Ch ; <\> (offset 0341h) 01
.db 04Eh ; <N> (offset 0342h) 02
.db 04Fh ; <O> (offset 0343h) 03
.db 045h ; <E> (offset 0344h) 04
.db 061h ; <a> (offset 0345h) 05
.db 037h ; <7> (offset 0346h) 06
.db 062h ; <b> (offset 0347h) 07
.db 036h ; <6> (offset 0348h) 08
.db 044h ; <D> (offset 0349h) 09
.db 043h ; <C> (offset 034Ah) 0A
.db 041h ; <A> (offset 034Bh) 0B
.db 042h ; <B> (offset 034Ch) 0C
.db 04Bh ; <K> (offset 034Dh) 0D
.db 048h ; <H> (offset 034Eh) 0E
L_F84F: .db 04Ah ; <J> (offset 034Fh) 0F ^^^
[свернуть]
Может тут не все буквы соответсвуют командам.
Эти команды в БСВВ, тоже их назначение глубоко не раскапывал, но, скорее всего, это даже не команды, а ключи к команде "0", нечто для управления параметрами вывода на экран и прочего...
- - - Добавлено - - -
Вот назначение этих ключей:
Скрытый текст
Код:.db 05Ah ; 00 Установить латинский набор
.db 05Ch ; 01 Установить русско-латинский набор (КОИ-7)
.db 04Eh ; 02 Включение неэффективного опроса клавиатуры с установкой цветовой палитры прикаждом прерывании (предусмотрена для некорректно написанных программ, где установка цвета осуществляется не управляющей последовательностью)
.db 04Fh ; 03 Включение опроса клавиатуры с отключением записи таблицы цветов при прерываниях. Экономится до 5% времени ЦП. Режим установлен в ДОС по умолчанию.
.db 045h ; 04 Очистить экран и установить латинский набор символов знакогенератора
.db 061h ; 05 Установить режим вывода символов в позитиве
.db 037h ; 06 Установить режим вывода символов в позитиве
.db 062h ; 07 Установить режим вывода символов в негативе
.db 036h ; 08 Установить режим вывода символов в негативе
.db 044h ; 09 Курсор смещается на позицию влево
.db 043h ; 0A Курсор смещается на позицию вправо
.db 041h ; 0B Курсор смещается на позицию вверх
.db 042h ; 0C Курсор смещается на позицию вниз
.db 04Bh ; 0D Удалить часть строки, начиная с позции курсора и до конца
.db 048h ; 0E Курсор помещается в левый верхний угол
L_F84F: .db 04Ah ; 0F Очистить экран ^^^
[свернуть]
Improver, желательно изменить переключение регистров по аналогии с тем, как патчили T34 - чтобы одиночное нажатие РУС/ЛАТ и СС переключало соответственно русский/латинский и большие/маленькие. А то нажимать три клавиши одновременно неудобно, а в emu, например, нажатие shift+ctrl+s вызовет диалог сохранения скриншота вместо ввода маленькой русской буквы "c".
Там, кстати, есть косяк: список должен заканчиваться нулевым байтом. Вот п/п поиска буквы:
На данный момент других букв от A до Z до ближайшего нуля нет, но младший байт адреса в какой-нибудь ссылке может таковым оказаться, если код будет смещаться.Код:L_C3FF: MVI B, 000h
L_C401: MOV A, M
ORA A
RZ
CMP C
JZ L_C40D
INX H
INR B
JMP L_C401
L_C40D: MOV A, B
STC
RET
- - - Добавлено - - -
Насколько я понял, вызов "в никуда" должен был выводить сообщение об ошибке. В пропатченной версии вызывается код обработчика команды E, он и выводит сообщение.
В F51 выполнение команды B начинается с адреса BBDE. Он там забил нулями CALL (кроме одного байта, который трактуется как команда ORA A) перед последним JMP.
Список букв команд (BA65-BA6B) в F51 тоже без нуля.
- - - Добавлено - - -
В F14.3 все аналогично и по тем же адресам.
Я смотрел файл рядом с докой от Ускова md311f11.com, там проблемный участок выглядит так:
0BB3Bh имеется в таблице для переходов команд, соответствует команде Е.Код:CALL 0D3AAh; L_DAAA
JMP 0BB3Bh
Это и есть правка Ускова.
Получается mdos311 с BIOS 3.11.F.11 - это (старая, раньше F14.3 и F51) версия Филиппова. Команда B там работает примерно как в других досах, без аргументов печатает пургу, с правильным аргментом грузит .SPR
А MD311F11 - это версия Филиппова доработанная Усковым. Но она работает не совсем так как я ожидал. Команда B и без аргументов и с правильным аргументом при наличии соответствующего файла на диске печатает "B?".
- - - Добавлено - - -
Увидел, Усков сменил букву команды B на S и эта команда работает правильно.
- - - Добавлено - - -
Если сравнивать патчи этой команды Филиппова и Ускова, то вариант Ускова чуть лучше, т.к. при запуске без аргумента печатает NO FILES. Но теперь, когда жажда знаний более-менее утолена и с командой почти разобрались (кроме формата SPR, хотя думаю при желании тут изучение SIDа поможет), может пора выпилить B/S?
Я тоже там немного поигрался с ДОСами, вариант Ускова как-то информативнее получается... По этому методу можно заменить в тексте "CALL L_CB01" на "JMP L_C24C" и убрать следующий "JMP L_DAAA", но это решает только половину проблемы. Надо восстанавливать работу команды "В", полезная, по сути, штука.
В картотеке есть исходники Филлипова, и там есть его дизассемблированный вариант микродоса (в файле bdos.zip). Причём там метки имеют смысл, и это даёт ответы практически на все вопросы.
Ещё заметил, что собственно микродос при загрузке перемещается (т.е. корректируются старшие байты адресов, там есть битовая карта), а драйвер диска и биос пересылаются как есть. У тебя-же всё пересылается как есть. Хорошо это или плохо - не знаю. А в оригинале микродоса никакой проблемы с командой "В" нет.
Отказ от коррекции адресов на этапе инициализации - одно из отличий T34 (и T72, как наследника)
"ОС хранится в неперемещаемом, неупакованном формате, в область рабочих адресов она пересылается без дополнительных преобразований, чем достигается сокращение времени инициализации при холодном старте."
Посмотрел дизассемблированный вариант, метка THISADRESSISERROR наводит на мысли. В оригинале тоже ошибка. Возможно там должен быть адрес начала процедуры, куда эта метка попадает, но тогда перед вызовом нехватает задания номера ошибки в регистре А (там оказывается 20h и адрес текстовой строки читается чёрте-какой). Я пробовал в отладчике число 9, выдаётся более-менее осмысленный текст.
А чем T34 и T72 различаются?
Из отличий T34 и T72 точно знаю только одно - в T72 немного оптимизирован вывод символов и по этому критерию T72 уступает только РДСу (по крайней мере по моим замерам).
Еще в стартовом сообщении T72 появилось упоминание альтернативной кодировки ГОСТа наряду с КОИ8, но как они переключаются - я не знаю.
- - - Добавлено - - -
Ну и еще пропала совместимость с CO.COM
Там тоже есть ньюанс: вывод только латиницы Т-72 быстрее, чем вывод кирилицы...
Ещё отличия Т-72 от Т-34:
- все сообщения выводятся на русском
- имеется возможность настраивать какой-то параметр драйвера флоповода через команду "0 <число> W", но из-за совпадения с командой настройки скорости записи на магнитную ленту, это не работало.
- ну и ещё куча мелких патчей системы. :)
Про ГОСТ упоминаний не нашёл, а вот это упоминание в доках на Т-34, не оно?Код:1В, 5В Ё Установить набор КОИ-8 (основной)
0F или 1В, 5А Ё Установить латинский набор
0Е Ё Установить русский набор
1В, 5С Ё Установить русско-латинский набор
Ё (КОИ-7)
Оказалось, что в T72
1B 5A - КОИ-8
1B 5C - Альтернативная (CP866)
Почитал про SPR и немного потрассировал (проще начать с D452) загрузку SID.SPR в DOSF143. На описание внимание можно не сильно обращать, реально дос берет два адреса по смещениям 0001 и 0004, использует их для определения адреса загрузки и смещения таблицы индикаторов коррекции адресов. Загружает, корректирует и запускает.
Не про spr. В описании F143 упомянуто "включение клавиатуры для редактора QWERTY/JCUKEN". Сходу я не понял, что именно там переключается.
Получается, микродос в оригинале (как и SID) компилировался как .SPR, чтобы получить код и таблицу. А потом PRL заголовок заменялся на код перемещения.
Процедура коррекции адресов в инициализаторе классических досов и загрузчике spr практически идентичная. Ну и теперь понятно, что за PRL, RSP и SPR упоминаются в линковщике.
- - - Добавлено - - -
Кстати, считаю оценку Ускова "... удалось разобраться в структуре .SPR-файла ... Структура эта оказалась довольно сложной." сильно преувеличенной.
- - - Добавлено - - -
Думаю авторы Draw не знали про классические spr и поэтому так назвали свой формат картинок.
Дорогие друзья !
Прошу помощи.. Вашим опытным взглядам мои глупые ошибки сразу будут заметны, уверен...
Хотел пропатчить mdos31h вдохновившись тем, что ошибка собственно известна, и подробно описана, более того - есть исходники T-72 c патчем (еще не LBA)... вобщем, вытащил из бинарника BDOS, который в бинарнике сидит по адресам 3400H - 468EH, после перетаскивается по адресам В800H - FF8D и от туда работает. Дизассемблировал его (если это можно так назвать), получил файл orgD800H_3400H-468EH_BDOS_original.asm который компилится в точно такую же область, и в нем нашел куски, которые описываются в сообщении b2m и все что с ним связано, и заменил по аналогии на код из исходников первой версии T-72 без "заворота" из сообщения от ivagor .... код конечно в целом отличается, тем не менее, логически, вроде все должно ратотать.. но что то пошло не так.. Из за того, что я в целом, очень поверхностно знаком с работой HDD, мои попытки понять это при помощи трассировки кода в отладчике особо не дали результатов. Получал два варианта - первый (не сохранился) - когда система говорит о ошибке, просит продолжить или игнорировать, а второй, когда загружается, и выдает на команду D - no files... Наверняка, вам, как специалистам в этом, тем более знающим этот код, будет не трудно понять, что я там сделал не так. В целом, если вы этого делать не будете, ничего страшного, я продолжу его ковырять... Я не стремлюсь к каким то серьезным результатам, целью этого патча не является создать что то совершенное и быстрое, достаточно просто заставить ось видеть хотя бы 2 гб CF, то есть чисто практический интерес, и встроить эту ось в ПЗУ своего вектора. Да и в целом, наверняка не только я обрадуюсь наличию такой оси для вектора...
В папке на яндекс диске находятся:
1. mdos31hp_32BFH_80_2D.rom файл оси, которая встроена в ПЗУ, с патчем на "СБР+БЛК" и желто-сиий колор.
2. mdos31hp_32BFH_80_2D_HDD2GB.rom файл оси, которую я пропатчил измененным кодом, говорит NO FILES
3. orgD800H_3400H-468EH_BDOS_original.asm файл дизассемблированный BDOS ОС mdos31h
4. orgD800H_3400H-468EH_BDOS_second_ver.asm файл дизассемблированный BDOS ОС mdos31h с моими попытками его пропатчить (вот)
5. orgD800H_3400H-468EH_BDOS.rom файл BDOS оригинальный, вырезанный из операционной системы mdos31hp_32BFH_80_2D.rom (1.)
Скрытый текст
Код:LD85F:
cpi 0A5H
jnc LD853
xthl
inx h
mov e,m
inx h
mov d,m
inx h
mov a,m
pop h
LD86C:
dad d ; (h, l) + (BC) -> (h, l)
aci 000H ; A + data8 + C -> A
; mov e,l
; mov l,h
; mov h,a ; (HL,E) = (A,HL)
mov e,a ; (E,HL)
call LD9D9 ; проверка готовности НЖМД, получение кода ошибки и RET
jz LD9F8 ; обработка ошибки ?
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
sectors:
mvi b,16
mov a,e
call div
inr a
out 53h ;sector
xra a
heads:
mvi b,4
call div
out 56h ;head
mov a,h
out 055h ;cyl (High)
mov a,l
out 054h ;cyl (Low)
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
jmp Lnext_00
.db $00, $00, $00, $00, $00, $00, $00, $00
;----------------------------------------------------------------------------------------
; push d
; call LD8F3
; out 055H
; pop d
; mov h,l
; mov l,e
; call LD8F3
; out 054H
;----------------------------------------------------------------------------------------
;----------------------------------------------------------------------------------------
; lxi d,0FF00H
; call LD904
; lxi d,0010H
; call LD8FC
; out 056H
; mov a,l
; inr a
; out 053H
;----------------------------------------------------------------------------------------
Lnext_00:
mvi a,002H
out 052H
pop d
lxi h,0EB00H
mvi a,020H
inr e
dcr e
jz LD8A9
mvi a,030H
LD8A9:
out 057H
mvi c,002H
LD8AD:
call LD9D9 ; проверка готовности НЖМД, получение кода ошибки и RET
jz LD9F9 ; обработка ошибки ?
in 057H
ani 008H
jz LD9F9 ; обработка ошибки ?
mvi b,002H
LD8BC:
inr e
dcr e
jnz LD8CF
LD8C1:
in 050H
mov m,a
inr l
in 058H
mov m,a
inr l
jnz LD8C1
jmp LD8DC
;
LD8CF:
inr l
mov a,m
out 058H
dcr l
mov a,m
out 050H
inr l
inr l
jnz LD8CF
LD8DC:
inr h
dcr b
jnz LD8BC
dcr c
jnz LD8AD
call LD9D9 ; проверка готовности НЖМД, получение кода ошибки и RET
jz LD9F9 ; обработка ошибки ?
ani 0DDH
cpi 050H
rz
jmp LD9F9 ; обработка ошибки ?
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
div:
MVI C,16 ; HL=AHL/B, A=AHL%B
L1: DAD H
ADC A
JC L2
CMP B
JC L3
L2: SUB B
INR L
L3: DCR C
JNZ L1
RET
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.db $00, $00, $00, $00, $00, $00, $00, $00
;----------------------------------------------------------------------------------------
;LD8F3:
; lxi d,0FC00H
; call LD904
; lxi d,00040H
;LD8FC:
; mvi b,0FFH
;LD8FE:
; add b
; dad d
; jnc LD8FE
; ret
;----------------------------------------------------------------------------------------
;----------------------------------------------------------------------------------------
;LD904:
; xra a
; mvi b,010H
;LD907:
; add b
; dad d
; jc LD907
; ret
;----------------------------------------------------------------------------------------
;
call LE474
lda 0080H
ana a
jz LD980
lxi d,005DH
call LE0BB
mov b,h
mov c,l
lxi d,0FFCFH
dad d
jc LE0B5
lda 005CH
ana a
jnz LD931
lda 0004H
inr a
LD931:
dcr a
cpi 002H
jz LE0B5
cmc
sbi 000H
cpi 004H
jnc LE0B5
mov e,a
mvi d,000H
LD942:
mov a,d
call LD9B2
mov a,m
cmp c
jnz LD954
inx h
mov a,m
sub b
jnz LD954
mov m,a
dcx h
mov m,a
LD954:
inr d
mov a,d
cpi 004H
jnz LD942
mov a,e
call LD9B2
mov m,c
inx h
mov m,b
inx h
push h
lxi h,0F3BEH
mvi a,0FFH
inx b
LD96A:
lxi d,00622H
dad d
aci 000H
dcx b
mov d,a
mov a,b
ora c
mov a,d
jnz LD96A
xchg
pop h
mov m,e
inx h
mov m,d
inx h
mov m,a
ret
*
*
*
LD9F8:
pop psw
LD9F9:
in 057H
rrc
in 051H
jc LDA02
xra a
LDA02:
mov b,a
in 057H
ani 020H
ora b
mov b,a
in 057H
ani 0C0H
cpi 040H
mov a,b
jz LDA15
ori 010H
LDA15:
out 05FH
jmp LE6AB
*
*
*
LE6AB:
sta XE873
lda XE867
cpi 006H
jz LE6C2
xra a
sta XE874
sta XE87A
mvi a,001H
sta XE872
LE6C2:
lda XE873
ana a
ret
[свернуть]
В целом, старался очень аккуратно патчить, оригинальный код остался на своих местах по своим адресам, адреса ссылок соответствуют их названиям.
Моего понимания таки еще не хватает для такого рода операций, тем не менее, если кто то поможет, буду очень благодарен !!! Если нет, в целом, я и так вам очень благодарен за то что вы делаете, за то, чем вы меня вдохновляете !!!
Спасибо!
И кстати, еще вопрос, посоветуйте какой нибудь хороший дизассемблер. Я пользуюсь DASMX130, уверен, есть что то более совершенное, посоветуйте пожалуйста что нибудь ?!?
Я мельком посмотрел Ваши исходники, в принципе DASMX даёт неплохой результат, можно пользоваться. Просто в качестве альтернативы могу поделиться тем, чем пользуюсь сам -- DASM580 (Вложение 72187), который я написал когда-то давно-давно...
И по поводу патча МДОС, вопрос: если взять полученные Вами исходники без патча (orgD800H_3400H-468EH_BDOS_original.asm), то откомпилированный с них бинарник полностью совпадает с бинарником из MДОС (orgD800H_3400H-468EH_BDOS.rom)? Я бы начал копать отсюда...
Второе, что следует сделать, это разобраться с командами PCHL (их там 5 штук), и дизассемблиролвать подпрограммы, на которые они ссылаются. Вполне возможно, что Ваш патч затрагивает их работу, но из-за того, что в исходнике они показаны, как наборы данных, в них ссылки не исправляются при перекомпиляции и вылезает ошибка.
По образцу Improvera патчнул FH51 в режим LBA, заворота больше нет.
- - - Добавлено - - -
Добавил патч рестарта.
Спасибо за ссылочку, посмотрю обязательно !
Да, я добился идентичности, оригинальный текст компилится, я сравниваю его с вырезанным куском, HEX редактор заявляет об идентичности файлов.
На счет этого я не подумал, поищу, спасибо за направление!
- - - Добавлено - - -
Вот наверное я на это вчера и наткнулся, это похоже оно и есть, нашел участок кода, как раз там, где были адреса "LXI B, XXX" в LD8F3. там у меня оказался кусок кода, и он постоянно "портился" при анализе в дебагере, ... в итоге, я понял, что по этим адресам что то пишется. Похоже это и есть адреса, осталось только найти от куда они пишутся, или по крайней мере, засунуть в эти места переменные, из которых потом брать эти значения. Сейчас я там просто массив нулей расположил, и обозначил две переменных в этом массиве, код расположил так, чтобы его по этим адресам не было, ну и как раз нулей там столько, чтобы восстановить оригинальные адреса всего оставшегося кода.
Подскажите пожалуйста, sectors+1 и heads+1 - это:
в этом коде... Наверняка я что то не так понимаю... в этом коде вроде не куда патчить адреса... пока не понятно, можете чуть пояснить? И "в коде инициализации" это за пределами BDOS? это тот код, который распределяет по памяти куски системы после загрузки бинарника, он патчит код на предмет адресов ?Код:
sectors:
mvi b, 16
mov a,e
call LD879
inr a
out 53h
xra a
heads:
mvi b,4
call LD879
out 56h
mov a,h
out 055h
mov a,l
out 054h