1

Тема: Дизассемблированный листинг сисмона

У кого-нибудь есть?
Интересуют два момента:
1. Механизм определения загрузочного контроллера в ходе сканирования слотов про холодном старте.
2. Есть ли свободные ячейки в сисмоне, чтобы разместить сигнатуры версии/ревизии (новодельной) генплаты?

P.S. Все на фронте что ли? Ваще мертвецкая тишина на форуме...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

2

Re: Дизассемблированный листинг сисмона

1) Сигнатура, байты по смещениям 0 2 4. И, возможно, последние 4 байта (но это только у девятки).
Отличия девятки от семёрки в том, что одна ищет вверх по слотам, вторая - вниз. Вроде семёрка вниз, девятка - вверх.

2) Крайне сложно найти. В девятке для этого можно использовать регион процедур работы с магнитофоном - он всё равно убитый там из-за ошибки. А вот в семёрке - почти никак. Т.е. искать-то можно, например, может где-то мелкая дырка найдётся между процедурами, или, например, выкинуть процедуры, работавшие с расширенной базовой памятью - всё равно это только на бумаге осталось. Но есть риск того, что кто нибудь вдруг захочет использовать какие-то их части, даже не по назначению. Например, сослаться на RTS, анализируя стек или считать CRC для определения архитектуры машины. Это мало вероятно всё, но возможно.

Однако зачем для этого делать заметки в ПЗУ ? Если новодел будет иметь дополнительный функционал, то именно контроллер этого функционала и должен отзываться на запросы. На сигнатурную запись или ещё что-то.

ЗЫ Я тут всё время. Если есть вопросы ко мне - отзываюсь, но пока не было.

3

Re: Дизассемблированный листинг сисмона

1. С начальными байтами $Cx0y более-менее понятно, там осысленный машинный код. А вот последние байты страницы - там может побитно что-то значит? Есть листинг сисмона?

Voldemar0 пишет:

или, например, выкинуть процедуры, работавшие с расширенной базовой памятью - всё равно это только на бумаге осталось.

2. ???

3. Начиная отсюда идут утверждения, что сисмон умеет манагить допозу... Есть листинг сисмона?

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

4 Отредактировано Voldemar0 (28-09-2017 20:06)

Re: Дизассемблированный листинг сисмона

0) Листинг может и есть, но пользы от него ровно столько же, сколько с bin-файла прошивки. Там же не C, а тот же нативный ассемблер с максимум одним комментарием в начале - "сисмон". И всё. Метки тоже будут мало о чём говорить - букв там не больше 3-5.

С другой стороны: сисмон - вовсе не самая сложная прога. Её можно разобрать за пару вечеров в IDA Pro, например.

(Я вообще не видел пока ни одного исходника на Агате (вот реально - ни одного!), где бы были комментарии сложнее чем "перемещение курсора на строку N". Ни какие аргументы, ни как расчитывается перемещение, ни какие особенности есть у вызова - ничего).

Но сисмон - это, процентов на 30, video BIOS, выражаясь PC-шной терминологией. А его архитектура отлично документирована Виктором Цикозой (не применительно к сисмону, но к Школьнице. Однако разница очень невелика). Надо искать на сайте, в библиотеках, по слову IOSub.

(даже гугл нашел его по словам "IOSub Агат":
http://agatcomp.ru/Reading/ebooks-cik7/ … AHIE.shtml)

1) Там тёмное дело. Есть где-то в коллекции документ, где предлагалось использовать последние 4 байта в качестве идентификаторов, на манер PCI-ных - вендор, тип устройства и что-то ещё. Был ли этот документ учтён разработчиками железеа (официального) - не уверен. Но факт, что эти 4 байта есть у 840ки и у поздней ("девяточной") 140ки в прошивке. И вроде бы... кажется... где-то в ProDOS эпловской я видел анализ этих байт (у 140ки, конечно). Так что как они задаются, кто автор, что имелось ввиду - не знаю.
Я только знаю, что они есть, а вот читает ли их сисмон - не уверен.

2) ???

3) Там вроде про девятку? А я про семёрку говорил.

В девятке сисмон только инициализирует контроллеры базовой и доп-памяти, но в девятке и не предполагалось её расширения (т.е. везде (на материнке и на допмодулях) по 128 кб и никак по другому).
Подчеркну: инициализирует, в том числе блокируя допозу, если оно при хард-ресете вдруг включилось (на модулях не предусмотрен сброс конфигурации при включении или ресете - только отключение банков, перекрывающих ПЗУ), но не особо использует (зачем-то щелкает первым сегментом, подключая к нему нулевой банк, зачем - неизвестно, не копался).

В семёрке базовая память по жизни 32 кб, но старых инструкциях на машину писалось, что базовая может быть (поддерживается контроллером) больше и даже ещё больше. Вот это самое "больше" уже требует управления и код управления есть в сисмоне семёрки. Но он, фактически, не нужен, так как серийных компов с базовым озу != 32 кб не было. Ну или пусть Игорь поправит. Во всяком случае у меня нет причин думать иначе.

5

Re: Дизассемблированный листинг сисмона

С идой лет 25 назад как-то пробовал x86 дизасмить, вот и весь опыт...

Ида ничего путного в комментах не нарисует... Мне они совершенно не нужны. Для меня проблема - отделение кода от данных, в сисмоне те же мнемоники для L-директивы хранятся вперемежку с кодом, да и еще упакованы по 5 бит по-моему... Как определить, где код, а где данные?...

Я, разумеется, понял, что ты про семерку говорил. Но все равно заинтересовало.

А про девятку тем более. Это точно сисмон деактивирует допозу во втором слоте? А если допозу в другом слоте? А если стоит четыре допозу?

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

6

Re: Дизассемблированный листинг сисмона

У меня где-то бумажный листинг валялся от Apple ][. Комментариев тоже с гулькин нос и не особо внятные имена меток. Свободных байт штук 5 кажется.

Сигнатуру загрузочного устройства я вроде тут писал:

xx $20 xx $00 xx $03 xx $3C

xx - любое значение (четные байты не проверяются)

LeoN пишет:

Это точно сисмон деактивирует допозу во втором слоте? А если допозу в другом слоте? А если стоит четыре допозу?

Мне помнится, там какой-то цикл по всем слотам.

7

Re: Дизассемблированный листинг сисмона

Данные от кода отделяются именно Идой - просто берёшь код от входной точки (ресета) и поехал. На что есть ссылки JMP/JSR/B* - то код, иначе - данные. Третьего в сисмоне не дано. Там реально почти нет свободных областей. Если где-то и найдётся - то не больше пары байт. Там же даже вот эти данные команды L и то дважды упакованы: сперва отделены команды, которые легко синтезируются из побитного анализа опкода: LDA, STA, ADD, ORA, EOR, ... восемь штук. Потом второй таблицей - ветвления. И третьей - остальные команды - которые уже вперемежку идут. Это первый уровень. А второй - все мнемоники утрамбованы по два байта на каждую - старшие биты кусь-кусь. Всего 2 Кб на всё про всё - так что там никто тебе больших окон не оставил.

(Всё, что пишу о сисмоне - это то, что я помню из своих собственных мысленных (нигде не записанных) дизасмов сисмона. Частично это делалось при разработке прог для агата, частично - при написании эмуляторов. В основном, всё получено из команды L, про Иду пишу только потому, что буквально последние несколько исследований проводил в ней - очень приятные воспоминания. За одним исключением - не знаю, как ей объяснить кодировку символов Агата. Но для сисмона это и не важно).

=----=

Сисмон в любом случае пробегает все слоты. Что в семёрке, что в девятке. Но в семёрке это делается только для поиска устройства загрузки, а в девятке (в этом же цикле!) ещё происходить сброс всего, что похоже на модули памяти. Так что слот не важен. Но я писал уже в статье "для начинающих", что допозу девятки ставиться только во второй слот в силу того, что только туда пода подведена линия блокировки основного ОЗУ.

8

Re: Дизассемблированный листинг сисмона

avivanov76 пишет:

Сигнатуру загрузочного устройства я вроде тут писал:

xx $20 xx $00 xx $03 xx $3C

xx - любое значение (четные байты не проверяются)

Это в самом конце страницы?


Voldemar0 пишет:

Сисмон в любом случае пробегает все слоты. Что в семёрке, что в девятке. Но в семёрке это делается только для поиска устройства загрузки, а в девятке (в этом же цикле!) ещё происходить сброс всего, что похоже на модули памяти. Так что слот не важен.

То есть, если нашли загрузочный контроллер, то передали на него управление, а остальные слоты игнорим?


Voldemar0 пишет:

Но я писал уже в статье "для начинающих", что допозу девятки ставиться только во второй слот в силу того, что только туда пода подведена линия блокировки основного ОЗУ.

Вот посмотри на фотки, сигнал "блокировка ОЗУ" есть А19, на всех слотах запараллелен! А значит модуль ДопОЗУ может откликаться в любом слоте, это уже головняк программера по арбитражу!

Кстати, зачем модулю ДопОЗУ выход IRQ?

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

9 Отредактировано avivanov76 (29-09-2017 14:10)

Re: Дизассемблированный листинг сисмона

LeoN пишет:

Это в самом конце страницы?

Нет, это начиная с нулевого байта ПЗУ.

LeoN пишет:

То есть, если нашли загрузочный контроллер, то передали на него управление, а остальные слоты игнорим?

Да, так. Думаю, порядок опроса слотов на 9-ке потому и изменили, что контроллер НГМД 140 "исторически" ставился в 3-й слот и наверно были программы, на это завязанные, а новый 840К ставился в 5 или 6 слот.

10 Отредактировано IgorV (29-09-2017 21:01)

Re: Дизассемблированный листинг сисмона

когда (конец 80-ых) писал операционку под кабельную сеть из агатов7 и потом 9, чтобы быстрее понять чего к чему, и не имея ни копейки литературы, сначала сделал програмку, которая в 4 столбика печатала на перфорированной бумаге листинг.  Бумага еще складывалась гармошкой.  В результате был напечатан весь листинг ПЗУ и потом ещё Бейсика + Дос.
Эти гармошки были удобны тем, что интересующий кусок можно было разогнуть, а не нужные сложить. 
Карандашом все находки отмечал - подпрограммы и чего делают. Принтер EPSON FX800.

Где то возможно ещё эти розовые книжки валяются.

А вообще разибраться сильно помогало опять же своя програмка, которая делила экран 64*32 на 2 столбца 32*32 и между ними можно было переключаться и использовать сразу оба. Так влезало в 2 раза больше текста, причем не подряд можно было.

11 Отредактировано Voldemar0 (30-09-2017 05:17)

Re: Дизассемблированный листинг сисмона

LeoN пишет:

То есть, если нашли загрузочный контроллер, то передали на него управление, а остальные слоты игнорим?

Кстати, зачем модулю ДопОЗУ выход IRQ?


Нет, цикл всегда пробегает все слоты, но, в зависимости от отклика устройства, выполняются разные действия: если оно загрузочное, то сохраняется его адрес, если память - она сбрасывается и т.д. Был ещё вариант (очень похожий код используют и разные операционки, программы), что цикл прокручивается дважды - на первом проходе V=0, на втором V=1. Что на каком проходе делается - не помню, но запомнил эту методику, потому что находил в ней ошибки. Там команда BIT использовалась как NOP, но программеры забывали, что это всё таки не NOP и V-флаг она таки меняет. И это иногда могло приводить к зависанию цикла (V ставился в 1 по логике работы, а потом командой BIT обратно сбрасывался, в результате всё уходило в бесконечный цикл). Кажись, эта ошибка есть в ИКП - он может зависнуть в зависимости от состояния ОЗУ при отсутствии ячейки принтера.

Однако тут я уже лезу в слишком далеко в дебри, так что могу ошибаться в чём-то. Лучше смотреть код, тем более он там почти рядом с точкой входа reset.

IRQ там нет. Если называешь какие-то сигналы, указывай не название (они даже в Мымрине в разных таблицах разные), а контакт.

http://agatcomp.ru/Reading/ram128.shtml

Блокировка ОЗУ - контакты А24/Б24, слева:

http://agatcomp.ru/Reading/ram128/page2.png

12

Re: Дизассемблированный листинг сисмона

Более-менее разобрался с ДопОЗУ:
для нормального функционирования ячейка должна генерить сигналы "Блокировка ПЗУ" (А20) и "Блокировка ОЗУ" (А19). С первым у ячейки все в порядке, а вот со вторым разработчики все вывернули через ж........ :( Захватили чужую систему приоритетизации (дейзи-цепочка маскируемых прерываний с наивысшим приоритетом в 1-ом слоте и наименьшим приоритетом в 6-ом слоте), перевернули приоритеты, и извратились с "затычкой" А24-А19 во втором слоте генплаты... :(
Для чего? Все равно арбитраж нескольких ячеек ДопОЗУ - это головняк программера...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

13 Отредактировано Voldemar0 (01-10-2017 16:42)

Re: Дизассемблированный листинг сисмона

Подобрал исходники

Версии разные, в чём разница и какая из них оригинал - не знаю. Надо собирать и сравнивать результат с прошивкой

Post's attachments

Attachment icon mon.rar 12.31 kb, 319 downloads since 2017-10-01 

14

Re: Дизассемблированный листинг сисмона

Э-э-э... А в виндовой кодировке можно?

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

15

Re: Дизассемблированный листинг сисмона

http://agatcomp.ru/Soft/dos33c2.shtml
Экспорт сделаешь ("e") - будет виндовая или досовская (в зависимости от выбранной версии проги)

16

Re: Дизассемблированный листинг сисмона

Спасибо, Владимир.
Экспортнул, глянул, все листинги оказались семерошные... (во всех выводит заставку ** АГАТ **)

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

17 Отредактировано Voldemar0 (03-10-2017 07:20)

Re: Дизассемблированный листинг сисмона

Нету ничего больше :((

18

Re: Дизассемблированный листинг сисмона

Если актуально.
Вот нашёл случайно:
http://www.applelogic.org/files/AIIETECHREF4.pdf
С 28 страницы.
Может и не то, а может и пригодится.

19

Re: Дизассемблированный листинг сисмона

Dohtur Frag, спасибо.
Интересный дизассемблер.

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

20

Re: Дизассемблированный листинг сисмона

Че-то посмотрел на него и не впечатлился.
Нашел как объявить кусок дампа кодом. Нашел как создать метку. Получилась у меня команда jsr Init. Это хорошо. Рылся, как теперь перейти к метке Init - так и не нашел. Как-то в ida386 это всё было понятнее.
Судя по куче поддерживаемых процов и архитектур, возможно, эта штука полезна для тех случаев, которые ей знакомы.
Но для generic-6502 как-то не очень. А если она ещё и агатовскую кодировку текста не поймёт - то смысл совсем небольшой.

21 Отредактировано LeoN (20-12-2019 08:05)

Re: Дизассемблированный листинг сисмона

На страницах 357-358 листинга монитора от "Яблочка ][e" в адресах $FAB4-$FB08 лежит процедурка поиска загрузочного ROMа. Идет проверка сигнатур на равенство ($Cs00)=$20 & ($Cs02)=$00 & ($Cs04)=$03.
Разбора побитно сигнатур ни в начале ($Cs0x), ни в конце ($CsFx) загрузочного ROMа нет...

Турбо АГАТ-9/16 (ЦП 65C802, 5 Махов, dual-port SRAM).

22

Re: Дизассемблированный листинг сисмона

........ а должен быть?