PDA

Просмотр полной версии : Сюрприз в заводском загрузчике



KTSerg
12.03.2018, 06:21
С помощью ROM плеера/картриджа скачал штатный загрузчик Вектора 06Ц.02 1992г. выпуска.
При использовании была замечена фишка, при перезапуске с нажатой клавишей F5 начиналась загрузка из внешнего ПЗУ, которое не читалось.
Дизасмил загрузчик и начал изучать.
Вот код который выполняется при перезагрузке с нажатой клавишей F5:

...
CPI 07FH ; 0079 клавиша F5
LXI D,08000H ; 007B
JZ 000D3H ; 007E
...
LXI H,007DEH ; 00D3
MVI A,087H ; 00D6
PUSH D ; 00D8
CALL 006B1H ; 00D9 Вывод на экран значка микросхемы
POP D ; 00DC
LXI B,00000H ; 00DD
LXI H,08000H ; 00E0
;
MOV A,L ; 00E3
OUT 007H ; 00E4
OUT 0F3H ; 00E6
MOV A,H ; 00E8
OUT 005H ; 00E9
OUT 0F1H ; 00EB
MOV A,E ; 00ED
ORA A ; 00EE
IN 006H ; 00EF
JNZ 000F6H ; 00F1
IN 0F2H ; 00F4
STAX B ; 00F6
INX H ; 00F7
INX B ; 00F8
MOV A,B ; 00F9
CMP D ; 00FA
JNZ 000E3H ; 00FB
...
Далее заполнение загрузочной сетки

Видно, что процедура универсальная, и для штатного "внешнего ПЗУ" и для какой-то шняги, висящей на адресах F1, F2, F3.
Наводит на мысль встроенного ПЗУ или ПЗУ модуля висящего на шине "ВУ".
Какие ещё предложения?

Прицепляю загрузчик, который считал со своего Вектора06Ц.02
Не выдержал, поменял два байта адреса, переход на работу с ЛВС (при его наличии) вариант kish02r.

svofski
12.03.2018, 13:08
Младшие два бита совпадают, может быть это какой-то отладочный экземпляр был со вторым ПУ для отладки обычного ПУ?

Вроде ничто не мешает воткнуть такое в ВУ.

KTSerg
12.03.2018, 14:07
Младшие два бита совпадают, может быть это какой-то отладочный экземпляр был со вторым ПУ для отладки обычного ПУ?

Вроде ничто не мешает воткнуть такое в ВУ.
Интересно, что я не заметил настроек этих портов F1, F2, F3, видимо схемно было сразу решено, какие для адреса какой на данные. И без поиска, определения, есть ли там инфа. Просто грузит 32 кило.

Дизассемблер у меня РС-шный - паршивенький, полученный код смотреть одна морока. Вроде для Вектора более-менее нормальный был, надо поискать.

ivagor
12.03.2018, 14:13
не заметил настроек этих портов F1, F2, F3
Если это ВВ55, подключаемая к ВУ, то возможно в процедуре детекта внешнего ПЗУ есть что-то вроде

MVI A,82h
OUT 04
OUT 0F0h

KTSerg
12.03.2018, 14:35
Если это ВВ55, подключаемая к ВУ, то возможно в процедуре детекта внешнего ПЗУ есть что-то вроде

MVI A,82h
OUT 04
OUT 0F0h
Логично. Дизассемблирую снова, буду посмтреть.

svofski
12.03.2018, 14:36
KTSerg, я бы подключил полученный bin загрузчиком в эмуляторы VV или b2m и смотрел в дебаггере.

N.B. когда-нибудь, когда он точно уже никому не будет нужен, сделаю прекрасный дизассемблер =)

ivagor
12.03.2018, 14:53
Чтобы просто узнать (еще до дизассемблирования), ВВ55 ли это, можно в конфиге emu изменить адреса "внешнего ВВ55" на
port~[F0-F3]=ext.data
подключить считанный загрузчик и попробовать загрузить что-нибудь из "внешнего ПЗУ".

Improver
12.03.2018, 15:36
[N.B. когда-нибудь, когда он точно уже никому не будет нужен, сделаю прекрасный дизассемблер =)Когда-то очень давно, в году эдак 2002, я делал дизассемблер, и он у меня сохранился. Могу поделиться...

KTSerg
12.03.2018, 16:05
Когда-то очень давно, в году эдак 2002, я делал дизассемблер, и он у меня сохранился. Могу поделиться...
Для какого проца? Запускается на РС или на Векторе?

Improver
12.03.2018, 16:18
Для какого проца? Запускается на РС или на Векторе?Для КР580ВМ80А, родимого... Запускается на ПК, но оболочки к нему нет -- всё в командной строке. Нужен такой?

KTSerg
12.03.2018, 16:25
Для КР580ВМ80А, родимого... Запускается на ПК, но оболочки к нему нет -- всё в командной строке. Нужен такой?
Нужен. Описание опций есть?

Я вот собирался прогу сварганить которая бы отображала файл в том виде, как он отображается, если его в экранную область Вектора залить. Для того, что-бы было видно где и какие картинки расположены.

Improver
12.03.2018, 16:35
Нужен. Описание опций есть?
Вот он: 64586
Описание есть, приложено в архиве...
Делал его, кстати, я в пару к ассемблеру KRASS (не мой), так, чтобы любую программу для Вектора можно было дизассемблировать, а потом этим KRASS-ом скомпилить со 100% бинарным совпадением, но вот только этот ассемблер я что-то найти не смог.

KTSerg
12.03.2018, 19:53
Вот он: 64586
Описание есть, приложено в архиве...
...
Спасибо, очень не плохой результат.
Особенно интересна битовая структура данных.

- - - Добавлено - - -


Если это ВВ55, подключаемая к ВУ, то возможно в процедуре детекта внешнего ПЗУ есть что-то вроде

MVI A,82h
OUT 04
OUT 0F0h
Посмотрел внимательно, так и есть:
MVI A,9Bh
OUT 04
MVI A,82h
OUT 0F0h
Причем в самом начале программы.
Так что стало понятно, что влипили дополнительную ВВ55.

- - - Добавлено - - -


Вот он: 64586
Описание есть, приложено в архиве...
...
Дело привычки, но мне кажется, что легче воспринимать код, когда команды и параметры в разных столбцах вертикально выровнены.
Вот в таком представлении первый параметр теряется:
LXI H, L_07EC
MVI A, 08Ah
CALL L_06B1
LXI H, L_024A
SHLD 0DCF2h

И было-бы удобно наличие разделения кода на куски, например после строк с RET или JMP, вставлять строку с комментарием ";" (пустую строку).

А так, ещё раз спасибо.

- - - Добавлено - - -

Ну, стало понятно, почему на моём Векторе считывание байта из ПЗУ происходит с задержкой в 21мкс после выставления адреса, а в других загрузчиках через 9 мкс.
Разница в коде налицо.
В моём:
OUT 007h
OUT 0F3h
MOV A, H
OUT 005h
OUT 0F1h
MOV A, E
ORA A
IN 006h

В загрузчиках BOOTS и kish2:
OUT 007H
MOV A,H
OUT 005H
IN 006H

- - - Добавлено - - -

Жаль, что не устранили "ляп" с проверкой наличия ЛВС и переходом к загрузке с магнитофона при наличии ЛВС.
Но это проявляется только при перезагрузке с нажатой F2.
Если КвазиДиска нет, то следующим за ним проверяется наличие ЛВС и это работает корректно.
При наличии КвазиДиска удержание F1 и F2, так-же позволяет не проверяя наличие КвазиДиска перейти к загрузке с ЛВС.

Improver
13.03.2018, 10:02
Дело привычки, но мне кажется, что легче воспринимать код, когда команды и параметры в разных столбцах вертикально выровнены.
Вот в таком представлении первый параметр теряется:
LXI H, L_07EC
MVI A, 08Ah
CALL L_06B1
LXI H, L_024A
SHLD 0DCF2h

Не, там всё выровнено, просто надо смотреть с моноширинным шрифтом:

ORG 00000h
L_0000: MVI A, 09Bh
L_0002: OUT 004h
MVI A, 088h
OUT 000h
MVI A, 0A8h
LXI B, L_0040
L_000D: OUT 008h
SUB C
L_0010: JNC L_000D
IN 001h
ANA C
MOV C, B
MOV A, B
OUT 010h
JZ L_0029


И было-бы удобно наличие разделения кода на куски, например после строк с RET или JMP, вставлять строку с комментарием ";" (пустую строку).Это можно сделать. Я вчера тоже попробовал дизассемблировать всякие загрузчики, нашёл ещё пару моментов, поправлю сразу всё...

Improver
13.03.2018, 12:31
Дизассемблер поправил, не откладывая надолго: 64600
Пользуйтесь... :-)

KTSerg
13.03.2018, 14:08
Не, там всё выровнено, просто надо смотреть с моноширинным шрифтом:
Я такие вещи смотрю и редактирую редактором из FAR-а, попробую ещё раз...

Вчера нашел Векторовский дизассемблер, закинул его в образ Квазидиска, в эмуляторе запустил, для сравнения результатов.
Задаёт кучу наводящих вопросов, но некоторые "фишки" бывают очень удобны.
Например по запросу может включить в тест для каждой строки, её адрес и HEX последовательность команды.

- - - Добавлено - - -

Если кому будет интересно, считанный загрузчик прикрепил к первому письму этой темы.
И исправленный вариант (при перезагрузке с нажатой F2), прицепом.

KTSerg
13.03.2018, 18:59
Не, там всё выровнено, просто надо смотреть с моноширинным шрифтом:
Понял в чем фокус. Я привёл пример где в соседних строках есть команды с мнемоникой из 3-ёх и 4-ёх символов, а в Вашем, есть только из 3-ёх символов, и они выглядят ровно.
Нужно к мнемонике команд состоящих из 2-ух и 3-ёх символов добавить один пробел, что-бы все команды были длиной 4 символа, а далее пробелы разделители и параметры, и тогда будет выглядеть ровно.

В новой версии дизассемблера пропали метки в участках данных. В предыдущей было видно где начинается каждая картинка (это я про код загрузчика), теперь в данных вообще не понятно, есть ли на них ссылки из программы...

Improver
13.03.2018, 19:35
Понял в чем фокус. Я привёл пример где в соседних строках есть команды с мнемоникой из 3-ёх и 4-ёх символов, а в Вашем, есть только из 3-ёх символов, и они выглядят ровно.
Нужно к мнемонике команд состоящих из 2-ух и 3-ёх символов добавить один пробел, что-бы все команды были длиной 4 символа, а далее пробелы разделители и параметры, и тогда будет выглядеть ровно.Немного не понял... Вот тот же участок кода, как есть сейчас:

L_0173: LXI H, 007ECh
MVI A, 08Ah
CALL L_06B1
LXI H, 0024Ah
SHLD 0DCF2h

Вроде, всё красиво... Надо выровнять по первому аргументу в командах типа так?

L_0173: LXI H, 007ECh
MVI A, 08Ah
CALL L_06B1
LXI H, 0024Ah
SHLD 0DCF2h

Или так?

L_0173: LXI H, 007ECh
MVI A, 08Ah
CALL L_06B1
LXI H, 0024Ah
SHLD 0DCF2h


В новой версии дизассемблера пропали метки в участках данных. В предыдущей было видно где начинается каждая картинка (это я про код загрузчика), теперь в данных вообще не понятно, есть ли на них ссылки из программы...Упс... Поправим. :-)

ivagor
13.03.2018, 20:32
KTSerg, спасибо за загрузчик!
По F5 всегда грузит 32 Кб, без детекта размера, в отличие от F2.

KTSerg
13.03.2018, 21:16
...
Или так?

L_0173: LXI H, 007ECh
MVI A, 08Ah
CALL L_06B1
LXI H, 0024Ah
SHLD 0DCF2h

Такой вариант вроде интереснее выглядит. Только нужно, предусмотреть, что параметр бывает например "SP" или "PSW", и это не должно пересекаться с соседней колонкой. Т.е. расстояние между колонками команд и параметров сделать с не большим запасом.


ivagor, вроде по F5 грузит исключительно из дополнительной ВВ55 (адреса F0-F3), из обычного ПЗУ (на ПУ) в этом случае грузиться не должно...

ivagor
13.03.2018, 21:46
по F5 грузит исключительно из дополнительной ВВ55 (адреса F0-F3), из обычного ПЗУ (на ПУ) в этом случае грузиться не должно
Да, F5 - только из дополнительной, F2 - только с ПУ. Фишка в фиксированном размере для F5.

ivagor
14.03.2018, 09:03
По поводу фиксированного размера по F5. Вчера не прочитал приложенный kish02.txt (п.6) и стал ломиться в открытую дверь. Ну ничего, зато дизассемблировал, может пригодится.

Improver
14.03.2018, 12:01
KTSerg, новая версия дизассемблера: 64615
Вроде, всё, как надо...

KTSerg
14.03.2018, 13:17
Во, этот код воспринимается значительно легче. По крайней мере мне так кажется.
Вроде-бы раньше в файле lbl было указано, сколько раз каждая метка вызывается, интересная была инфа. И указание команда или данные, так-же полезно. Хотя в дизасмах вроде первую букву метки меняют в зависимости от того, что эту метку создало, условный/безусловный переход или присвоение регистровой паре.

Improver
14.03.2018, 14:10
Вроде-бы раньше в файле lbl было указано, сколько раз каждая метка вызывается, интересная была инфа.Не, как раз таки там указывалось не количество, а тип цифрой, я сделал расшифровку этого типа... :-)


Хотя в дизасмах вроде первую букву метки меняют в зависимости от того, что эту метку создало, условный/безусловный переход или присвоение регистровой паре.Про такое не слышал... Хотя, мои познания ассемблера практически не выходят за рамки Вектора и его штатного ПО.

KTSerg
14.03.2018, 16:07
Не, как раз таки там указывалось не количество, а тип цифрой, я сделал расшифровку этого типа... :-)

Ясно, значит я не так интерпретировал циферки... :)

Про такое не слышал... Хотя, мои познания ассемблера практически не выходят за рамки Вектора и его штатного ПО.
Это таки в штатном Дизасме Вектора хорошо видно.

Improver
14.03.2018, 17:33
Это таки в штатном Дизасме Вектора хорошо видно.А разве был такой? Что-то я даже в каталоге его не нашёл... В комплекте с Вектором был монитор-отладчик и редактор-ассемблер, первый справлялся с дизасемблированием, но там метки были исключительно в виде адресов команд, никакого анализа по меткам там нет.

Кстати, про ассемблер -- какой можно использовать на ПК для программ Вектора из тех, что ещё возможно найти в инете? "Прекрасный ассемблер" это, конечно, хорошо, но хотелось бы чего-то оффлайнового...

b2m
14.03.2018, 18:26
Кстати, про ассемблер -- какой можно использовать на ПК для программ Вектора из тех, что ещё возможно найти в инете?
Есть, например, такой ассемблер: tasm32.zip (http://www.ticalc.org/pub/dos/asm/tasm32.zip), поддерживает несколько процессоров (для ВМ80 нужно указывать -85).

Improver
14.03.2018, 19:14
Есть, например, такой ассемблер: tasm32.zip (http://www.ticalc.org/pub/dos/asm/tasm32.zip), поддерживает несколько процессоров (для ВМ80 нужно указывать -85).Попробовал дизассемблированый загрузчик kish02.bin им прогнать -- работает, на выходе файл полностью совпадает с исходником... Вот только перед ORG, END и DB ему нужны точки, но это уже мелочи. В общем, можно использовать.

KTSerg
14.03.2018, 19:54
Есть, например, такой ассемблер: tasm32.zip (http://www.ticalc.org/pub/dos/asm/tasm32.zip), поддерживает несколько процессоров (для ВМ80 нужно указывать -85).
Во-во, я именно таким и пользуюсь.

А разве был такой? Что-то я даже в каталоге его не нашёл...
Я то-же в картотеке не нашел (наверное плохо искал), но он есть, я им ещё в 90-ых пользовался, не помню, шел ли он на заводских кассетах, или как-то ещё распространялся. Название файла "disasm.com" (хотя вполне возможно я мог переименовать для удобства использования) внутрях есть вот такой текст:
"(C)COPYRIGHT 1978 MICRO COM, INC." и ещё "CPM Z80-8080 ДИСАССЕМБЛЕР ВЕР 4.01"
Нашел в "Вектор Юзер №7", о нём упомянуто на 2-ой странице.

tnt23
14.03.2018, 22:51
KTSerg, гуглевание по копирайту приводит сюда: http://www.vintagecomputer.net/fjkraan/comp/mirror/z80cpu.eu/archive/rlee/L/LOOSECPM/244/

SUPER CPM Z80-8080 DIS-ASSEMBLER VER 4.00 / (C)COPYRIGHT 1978 MICRO COM, INC.

KTSerg
15.03.2018, 05:57
KTSerg, гуглевание по копирайту приводит сюда: http://www.vintagecomputer.net/fjkraan/comp/mirror/z80cpu.eu/archive/rlee/L/LOOSECPM/244/

SUPER CPM Z80-8080 DIS-ASSEMBLER VER 4.00 / (C)COPYRIGHT 1978 MICRO COM, INC.
Размер файлов одинаковый, отличается переводом, в версии disasm вопросы переведены на русский в КОИ8.
Цепляю disasm который есть у меня.