Оказалось, что в T72
1B 5A - КОИ-8
1B 5C - Альтернативная (CP866)
Оказалось, что в T72
1B 5A - КОИ-8
1B 5C - Альтернативная (CP866)
Improver(10.04.2020)
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Почитал про SPR и немного потрассировал (проще начать с D452) загрузку SID.SPR в DOSF143. На описание внимание можно не сильно обращать, реально дос берет два адреса по смещениям 0001 и 0004, использует их для определения адреса загрузки и смещения таблицы индикаторов коррекции адресов. Загружает, корректирует и запускает.
Не про spr. В описании F143 упомянуто "включение клавиатуры для редактора QWERTY/JCUKEN". Сходу я не понял, что именно там переключается.
Improver(13.04.2020)
Получается, микродос в оригинале (как и 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, уверен, есть что то более совершенное, посоветуйте пожалуйста что нибудь ?!?
Последний раз редактировалось electroscat; 13.04.2020 в 19:48.
Я мельком посмотрел Ваши исходники, в принципе DASMX даёт неплохой результат, можно пользоваться. Просто в качестве альтернативы могу поделиться тем, чем пользуюсь сам -- DASM580 (DASM580_106.7z), который я написал когда-то давно-давно...
И по поводу патча МДОС, вопрос: если взять полученные Вами исходники без патча (orgD800H_3400H-468EH_BDOS_original.asm), то откомпилированный с них бинарник полностью совпадает с бинарником из MДОС (orgD800H_3400H-468EH_BDOS.rom)? Я бы начал копать отсюда...
Второе, что следует сделать, это разобраться с командами PCHL (их там 5 штук), и дизассемблиролвать подпрограммы, на которые они ссылаются. Вполне возможно, что Ваш патч затрагивает их работу, но из-за того, что в исходнике они показаны, как наборы данных, в них ссылки не исправляются при перекомпиляции и вылезает ошибка.
Последний раз редактировалось Improver; 14.04.2020 в 08:42.
electroscat(14.04.2020)
По образцу Improvera патчнул FH51 в режим LBA, заворота больше нет.
- - - Добавлено - - -
Добавил патч рестарта.
electroscat(14.04.2020), Improver(14.04.2020)
electroscat(14.04.2020)
Спасибо за ссылочку, посмотрю обязательно !
Да, я добился идентичности, оригинальный текст компилится, я сравниваю его с вырезанным куском, 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
Последний раз редактировалось electroscat; 14.04.2020 в 12:14.
electroscat(14.04.2020)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)