Оказалось, что в T72
1B 5A - КОИ-8
1B 5C - Альтернативная (CP866)
Вид для печати
Оказалось, что в 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