PC-01 Lviv

It is currently 29 Mar 2024, 08:36

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00




Post new topic  Reply to topic  [ 40 posts ]  Go to page Previous 1 2 3 Next
Author Message
PostPosted: 22 Oct 2012, 10:29 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
PostPosted: 22 Oct 2012, 11:08 
Offline

Joined: 23 Aug 2012, 12:28
Posts: 123
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"


Top
   
PostPosted: 22 Oct 2012, 11:44 
Offline
User avatar

Joined: 11 Aug 2008, 17:05
Posts: 1405
Location: Украина
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 мы получили из Польши... Да и директивы несколько разнятся. Какой-то подозрительный ребус! :?

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
PostPosted: 22 Oct 2012, 12:10 
Offline

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


Top
   
PostPosted: 22 Oct 2012, 12:59 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
PostPosted: 22 Oct 2012, 13:41 
Offline

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


Top
   
PostPosted: 22 Oct 2012, 13:49 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
PostPosted: 22 Oct 2012, 13:55 
Offline

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


Top
   
PostPosted: 22 Oct 2012, 14:03 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
PostPosted: 28 Oct 2012, 22:55 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
PostPosted: 14 Nov 2012, 20:50 
Offline

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


Top
   
PostPosted: 21 Nov 2012, 17:52 
Offline

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


Top
   
PostPosted: 21 Nov 2012, 18:58 
Offline
Site Admin
User avatar

Joined: 24 Jul 2008, 12:05
Posts: 1070
ivagor

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


Top
   
PostPosted: 22 Nov 2012, 09:49 
Offline

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

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


Top
   
PostPosted: 22 Nov 2012, 13:32 
Offline
User avatar

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

_________________
Carthago delenda est, Carthaginem delendam esse


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 40 posts ]  Go to page Previous 1 2 3 Next

Forum Games WEB Tape Loader Twitter RSS

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
cron
Powered by phpBB® Forum Software © phpBB Limited