PC-01 Lviv
http://pc01.lviv.ua/forum/

Прошивки ПЗУ ПК-01 "Львов"
http://pc01.lviv.ua/forum/viewtopic.php?f=22&t=135
Page 2 of 3

Author:  liberation [ 22 Oct 2012, 10:29 ]
Post subject:  Re: ПК-I (прототип ПК-01 "Львов")

Quote:
Если со стороны требований к конфигурации:
Чтобы запустился монитор из rom03 достаточно одной вещи - возможности отключения ПЗУ по адресам 0000-3FFF и замены его на ОЗУ (при включенном экране, а именно такой режим, как я понимаю, при старте).
Стоп! Но ведь у "Львова" ПЗУ расположено по адресам 0xC000 - 0xFFFF! А rom03 предполагает, что по 0x0000 - 0x3FFF?

Author:  ivagor [ 22 Oct 2012, 11:08 ]
Post subject:  Re: ПК-I (прототип ПК-01 "Львов")

Quote:
Стоп! Но ведь у "Львова" ПЗУ расположено по адресам 0xC000 - 0xFFFF! А rom03 предполагает, что по 0x0000 - 0x3FFFF?
Как я понимаю, для того, чтобы нормально стартовать, на ПК-01 сделали так, что при включенном экране (т.к. в порте C2 при старте скорее всего 00) по адресам 0000-3FFF включено ПЗУ. Оттуда выполняется jmp в неотключаемую копию ПЗУ C000-FFFF, и фрагмент
E00D mvi a, 2
E00F out 0C2h
включает "стандартную" конфигурацию. Потом временное включение ВОЗУ (а заодно и ПЗУ) выполняется по необходимости. А в rom03 предполагается, что при включенном экране по адресам 0000-3FFF ОЗУ.
Неужели я сильно ошибаюсь и при включенном ВОЗУ по адресам 0000-3FFF в стандартном ПК-01 не ПЗУ? Думаю это уже давно проверено и где-нибудь описано.

P.S. Вобще-то модификация для запуска rom03 может быть и чуть другой - достаточно разрешить запись в основное ОЗУ по адресам 0000-3FFF при включенном экране. А читается пусть из ПЗУ. Возможно так сделано и на оригинальном ПК-01, тогда для rom03 даже и не нужно ничего модифицировать. В emu тогда достаточно добавить в разделе mm : MemMap {
строку
map[0][0000-3FFF].wo=mem1[0000]
и заменить имя образа в строке rom="Lvov\rom01.bin"

Author:  liberation [ 22 Oct 2012, 11:44 ]
Post subject:  Re: ПК-I (прототип ПК-01 "Львов")

Quote:
Как я понимаю, для того, чтобы нормально стартовать, на ПК-01 сделали так, что при включенном экране (т.к. в порте C2 при старте скорее всего 00) по адресам 0000-3FFF включено ПЗУ. Оттуда выполняется jmp в неотключаемую копию ПЗУ C000-FFFF, и фрагмент
E00D mvi a, 2
E00F out 0C2h
включает "стандартную" конфигурацию. Потом временное включение ВОЗУ (а заодно и ПЗУ) выполняется по необходимости. А в rom03 предполагается, что при включенном экране по адресам 0000-3FFF ОЗУ.
Неужели я сильно ошибаюсь и при включенном ВОЗУ по адресам 0000-3FFF в стандартном ПК-01 не ПЗУ? Думаю это уже давно проверено и где-нибудь описано.

P.S. Вобще-то модификация для запуска rom03 может быть и чуть другой - достаточно разрешить запись в основное ОЗУ по адресам 0000-3FFF при включенном экране. А читается пусть из ПЗУ. Возможно так сделано и на оригинальном ПК-01, тогда для rom03 даже и не нужно ничего модифицировать
Как я понимаю, все выглядело несколько иначе. Вот реплика, где мы об этом упоминали. В стандартном ПК-01 при включенном ВОЗУ обращение к ячейке 0x000 приводило на самом деле к обращению к ячейке 0x8000. После включения ОЗУ забито нулями, так что после небольшой пробежки по NOP'ам ЦП благополучно добирался до ПЗУ. Более толково про этот процесс надо расспросить sadfsdfsdaf, он такой, он все знает. :D
Quote:
А в rom03 предполагается, что при включенном экране по адресам 0000-3FFF ОЗУ.
Меня этот момент муляет ужасно. Как я уже где-то писал, на своем ПК-02, где была произведена соответствующая доработка, я адаптировал Mon90 под размещение в ПЗУ по адресам 0xC000-0xC7FF... Прошить ПЗУ тогда не получилось, а вот свои труды я мог отправить в Луцк одному товарищу. С другой стороны, rom03 мы получили из Польши... Да и директивы несколько разнятся. Какой-то подозрительный ребус! :?

Author:  ivagor [ 22 Oct 2012, 12:10 ]
Post subject:  Re: ПК-I (прототип ПК-01 "Львов")

Quote:
Как я понимаю, все выглядело несколько иначе. Вот реплика, где мы об этом упоминали. В стандартном ПК-01 при включенном ВОЗУ обращение к ячейке 0x000 приводило на самом деле к обращению к ячейке 0x8000.
Вон оно как, тогда без доработки компа rom03 не запустить.
Quote:
После включения ОЗУ забито нулями, так что после небольшой пробежки по NOP'ам ЦП благополучно добирался до ПЗУ.
Несколько сомневаюсь. Есть на ПК-01 кнопка "reset"?
Quote:
Quote:
А в rom03 предполагается, что при включенном экране по адресам 0000-3FFF ОЗУ.
Меня этот момент муляет ужасно. Как я уже где-то писал, на своем ПК-02, где была произведена соответствующая доработка, я адаптировал Mon90 под размещение в ПЗУ по адресам 0xC000-0xC7FF... Прошить ПЗУ тогда не получилось, а вот свои труды я мог отправить в Луцк одному товарищу. С другой стороны, rom03 мы получили из Польши... Да и директивы несколько разнятся. Какой-то подозрительный ребус! :?
Кстати, в конфиге ПК-02 rom03 работает.

Author:  liberation [ 22 Oct 2012, 12:59 ]
Post subject:  Re: ПК-I (прототип ПК-01 "Львов")

Quote:
Несколько сомневаюсь. Есть на ПК-01 кнопка "reset"?
Да, на "Львове" есть так называемый "горячий" старт... Но я особо в эти моменты никогда не вникал, стандартное ПЗУ было на периферии моих тогдашних интересов, так что будем ждать помощи от sadfsdfsdaf. Из его слов я понял, что запуск ПК-01 вообще довольно странный процесс:
Quote:
в частности, после вывода заставки заново повторяется инициализация системы (не железо, которое программируют один раз перед этим, но распределение памяти, стек, повторно копируют бейсик в ОЗУ и т.п.)

Author:  ivagor [ 22 Oct 2012, 13:41 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

В общем после попытки изучения фрагмента схемы я пришел к такому мнению:
1. После reseta все адресное пространство на чтение заполнено копиями ПЗУ (т.е. 0000-3FFF=4000-7FFF=8000-BFFF=C000-FFFF=ПЗУ), что решает проблему старта и рестарта.
2. После вывода в порт (в имеющихся ПЗУ эту задачу решает out 0 по адресу E000, который исполняется сразу после начального jmp E000) ПЗУ будет только по адресам C000-FFFF.

Author:  liberation [ 22 Oct 2012, 13:49 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

Quote:
1. После reseta все адресное пространство на чтение заполнено копиями ПЗУ (т.е. 0000-3FFF=4000-7FFF=8000-BFFF=C000-FFFF=ПЗУ), что решает проблему старта и рестарта.
Звучит фантастично. Т.е. после ресета ОЗУ должно содержать три копии ПЗУ? :shock:

Author:  ivagor [ 22 Oct 2012, 13:55 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

Quote:
Quote:
1. После reseta все адресное пространство на чтение заполнено копиями ПЗУ (т.е. 0000-3FFF=4000-7FFF=8000-BFFF=C000-FFFF=ПЗУ), что решает проблему старта и рестарта.
Звучит фантастично. Т.е. после ресета ОЗУ должно содержать три копии ПЗУ? :shock:
Нет, ОЗУ не содержит 3 копии ПЗУ, это действительно было бы фантастикой, но в адресном пространстве на чтение только копии ПЗУ. В существующих версиях ПЗУ (rom01-03) эта ситуация длится буквально 2 команды - jmp и out.

Author:  liberation [ 22 Oct 2012, 14:03 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

Quote:
Нет, ОЗУ не содержит 3 копии ПЗУ, это действительно было бы фантастикой, но в адресном пространстве на чтение только копии ПЗУ. В существующих версиях ПЗУ (rom01-03) эта ситуация длится буквально 2 команды - jmp и out.
Может быть, может быть. Любопытное наблюдение.
Надо будет попробовать детально расписать процесс запуска ПК-01, чтобы сложилась цельная картина.

Author:  liberation [ 28 Oct 2012, 22:55 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

Замечание по поводу проблемы "_ vs. Ъ". Вот что написано в моем экземпляре руководства по эксплуатации (на вкладыше):
Quote:
2. На стр. 33 в таблице 2 вместо символа "_" (подчеркивание) нижнего регистра может быть символ "Ъ" (твердый знак) верхнего регистра.
И отдельной полоской вклеено удивительно примечание:
Quote:
ВНИМАНИЕ!
Символ _ (подчеркивание) относится к символам нижнего регистра.

Author:  sadfsdfsdaf [ 14 Nov 2012, 20:50 ]
Post subject:  Re: ПК-I (прототип ПК-01 "Львов")

Quote:
Более толково про этот процесс надо расспросить sadfsdfsdaf, он такой, он все знает. :D
у меня в планах всё-таки купить чёртов логический пробник (или осциллограф) и "доисследовать" оставшиеся вопросы. пока я "вне игры" (правую руку сломал - смещение, осколки и т.п.), надеюсь к новому году получится заняться вплотную сабжем...

Author:  ivagor [ 21 Nov 2012, 17:52 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

Авторы ПЗУ Львова не устают меня удивлять. Есть там такое:
Code:
E26D                 push    psw
E26E                 nop
E26F                 nop
E270                 pop     psw
E271                 ei
E272                 ret
Этот фрагмент не только является завершающей частью процедуры, но еще и сам вызывается как отдельная процедура. Может это атавизм, и раньше между push и pop была(были) содержательная команда(команды)?
Используемые в некоторых процедурах ei и di тоже вызывают вопросы.

Author:  Zelya [ 21 Nov 2012, 18:58 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

ivagor

Насчет nop-ов, то скорее всего так и есть. Ближе к релизу затерли не нужный функционал. Правда, почему при это остались push/pop такты, они же не казенные! А вот ei/di - это страх как интересно!

Author:  ivagor [ 22 Nov 2012, 09:49 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

IMHO есть 2 основных варианта:
1. Это наследство от прототипа, от загадочной "габаритной системы". Там возможно были прерывания и рудименты от них остались. В т.ч. в бейсике rst 7 свободен, там явно оставлено место для команды перехода на обработчик.
2. Можно предложить и более надуманную версию, в которую укладываются ei/di, но которая не объясняет NOPов между push ... pop. Это как бы задел на будущее. Т.е. когда, например ч/з разъем расширения, подключат прерывания, то ПО уже в какой-то мере готово к их наличию.
Первая версия объясняет (опять же IMHO) больше странностей. Кроме всего прочего, нет "всеобщености" в применении ei/di. Можно предположить, что кое-где они остались в наследство, а кое-где их нет, т.к. часть процедур переписана/написана заново.

По фрагментам типа push nop nop pop ei ret как раз можно установить "родство" с каким-нибудь прототипом, и, заодно, узнать, что же там было :) Но, конечно, еще нужно найти, с чем сравнивать.

Author:  liberation [ 22 Nov 2012, 13:32 ]
Post subject:  Re: Прошивки ПЗУ ПК-01 "Львов"

Quote:
Этот фрагмент не только является завершающей частью процедуры, но еще и сам вызывается как отдельная процедура. [...]
Используемые в некоторых процедурах ei и di тоже вызывают вопросы.
1) А при каких обстоятельствах она вызывается как отдельная процедура?
2) И в каких еще процедурах используется парочка EI/DI?

Page 2 of 3 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/