<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[ПЭВМ "Агат" 7-9: Форум &mdash; Вопрос по контроллеру 840К]]></title>
		<link>https://forum.agatcomp.ru//viewtopic.php?id=464</link>
		<atom:link href="https://forum.agatcomp.ru/extern.php?action=feed&amp;tid=464&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Вопрос по контроллеру 840К».]]></description>
		<lastBuildDate>Sun, 15 May 2022 17:40:46 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6753#p6753</link>
			<description><![CDATA[<p>Пожалуйста :) Пиши, у меня советов ещё много :)))</p><p>==</p><p>&gt;&nbsp; Больше похоже на какие-то понты на пустом месте :) </p><p>Это было в куске защищённой от копирования проги, где-то как раз рядом с &quot;секретным&quot; загрузчиком.<br />Так что могло быть два варианта: 1) чуть-чуть обфускация; 2) автор помнил про процедуру, которая есть в сисмоне, но не имел никакого справочника процедур. Просто набрал F000LLLLLLLLL и дальше где-то нашел то, что нужно. А то, что это не окно F800..FFFF, может не заметил, а может заметил, но решил - и так сойдёт.</p><p>&gt; Последние 4 байта в нем это именно идентификатор</p><p>Да, это именно идентификатор. В старой 140ке там просто FF FF FF FF.<br />Мне кажется. что про эти 4 байта фирма Ниппель вроде бы и писала документ, чтобы там сделать ID для разных новых модулей и предлагала конкретные коды (class, vendor, product id...). Но это не точно :)</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Sun, 15 May 2022 17:40:46 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6753#p6753</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6752#p6752</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Короче, хотя заставку не видно, но все более-менее работает.</p></blockquote></div><p>Вы правы:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/hL4Hmgq/photo1652632896.jpg" alt="https://i.ibb.co/hL4Hmgq/photo1652632896.jpg" /></span></p></div></div><p>Я пока буду считать, что загрузка с фдд как-то работает, теперь надо отлавливать ошибки в работе Агата и доделывать недоделанное, но видимо, продолжать надо в другой теме, чтобы эту не захламлять.</p><p>Voldemar0, спасибо огромное за помощь!!! Не знаю, сколько бы я еще искал косяк с синхробитом.</p>]]></description>
			<author><![CDATA[null@example.com (zpilot)]]></author>
			<pubDate>Sun, 15 May 2022 16:46:34 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6752#p6752</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6751#p6751</link>
			<description><![CDATA[<div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p>&gt; Я имел ввиду другое, что использовали недокументированные возможности</p><p>Это было вынуждено.</p></blockquote></div><p>Я когда читаю вот это:<br /></p><div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p> в реальной девятке есть два окна сисмона: $F000..$F7FF и $F800..$FFFF.<br />Второе - документирование, а вот первое - нет. А мне доводилось встречать софт, хоть и редко, который ссылался на процедуры сисмона именно по первому окну.</p></blockquote></div><p>то мне не кажется, что обращение к монитору по адресам $F000..$F7FF было вынужденным. Больше похоже на какие-то понты на пустом месте :) Если это была &quot;защита&quot; от запуска на Агат-7 или Apple ][, то монитор - сам по себе защита, у него масса входных точек на других местах.</p><div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p>Допустим, для опознания контроллера дисковода можно найти какую-то уникальную сигнатуру в его ПЗУ.</p></blockquote></div><p>Кстати, для девятки, похоже, разработали некую систему идентификации ПЗУ. Последние 4 байта в нем это именно идентификатор, позволяющий определить тип контроллера. ИКП-шный загрузчик для девятки эти идентификаторы использует и со старого контроллера 140 К просто загрузиться не сможет, потому что там в ПЗУ какое-то недопустимое значение лежит.</p><div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p>Это ИКП: только не ясно: почему он на первой картинке не цветной?</p></blockquote></div><p>Я так понял, на первой картинке скриншот с сайта.</p><p>А загружается он с мусором в текстовом режиме потому что для заставки ИКП нужен цветной графический режим высокого разрешения, а он не реализован:</p><div class="quotebox"><cite>zpilot пишет:</cite><blockquote><p>Я пытаюсь сделать синтез Агат-9, у меня сейчас 128 КБ памяти(sdram, вообще-то ее 8 Мегаслов, те она 16 битная и по этому нечетные блоки лежат в старших битах слова, сделано для облегчения вывода <strong>графического многоцветного режима, но он пока не реализован</strong>)</p></blockquote></div><p>Короче, хотя заставку не видно, но все более-менее работает.</p>]]></description>
			<author><![CDATA[null@example.com (avivanov76)]]></author>
			<pubDate>Sun, 15 May 2022 09:19:38 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6751#p6751</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6750#p6750</link>
			<description><![CDATA[<p>&gt; Я имел ввиду другое, что использовали недокументированные возможности</p><p>Это было вынуждено.<br />Допустим, для опознания контроллера дисковода можно найти какую-то уникальную сигнатуру в его ПЗУ.<br />А как распознать, к примеру, модули ДопОЗУ?&nbsp; У них нет ПЗУшек видимых.<br />Можно было бы попробовать как-то попереключать режимы работы и посмотреть, что будет происходить в системе.<br />Но лень, много операций. Поэтому и сокращали до 1-2 характерных байт, которые, вроде бы, ни с чем больше не совпадают.</p><p>Где-то в 90-х появился документ, причем не от ЛЭМЗ (разработчика Агата), а от кооперативов, которые допмодули на агат проектировали, там предлагалась хоть какая-то унификация этого процесса (соглашения об использовании пространства ПЗУ для нужд идентификации устройств), но к тому времени агатовская тема стала уже стала сходить на нет.</p><br /><p>&gt;&nbsp; но практически полностью отсутствует как Агат взаимодействует с контроллером.</p><p>Контроллер и есть часть агата. Или речь о взаимодействии драйвера и контроллера?</p><p>Если есть пример взаимодейсвия, из него не следует, что произойдёт если отойти от примера (или мануала).<br />А мне, когда я писал эти статьи, было интересно именно то, как устроена схема и что будет в случае тех примеров ПО,<br />которое не следует документации. Т.е. эти статьи посвящены именно вопросам конструкции железа. Это больше для эмуляторщиков<br />и тех, кто попытается проектировать собственный контроллер, работающий с дискетами; или с накопителем формата, максимально<br />к дискете близкого (т.е. этот контроллер позволит запускать всё, что могло быть записано на дискеты, включая всевозможные нестандартные форматы).</p><p>А ПО уже написано, и даже если кому-то захочется написать новое, для этого можно либо смотреть<br />примеры старых драйверов или официальную документацию - там вполне расписано как работать с железом.<br />По 840к ты уже нашел эти тексты, а по 140ке - .... там проще всё заного написать, очень уж многое в доках не описано<br />(Я бы так сказал: документация официальная на 140ку - это научно-популярная статья, а не руководство программиста).<br />Лучше, конечно, смотреть именно старые драйвера - там ошибок существенно меньше, чем в доках ;)<br />Или брать книжки по Apple][: я в своих статьях упоминал Джима Сазера - вот там всё очень подробно о взаимодействии ПО<br />и железа. Агатовская 140ка по логике работы практически повторяет Disk ][ от Apple ][.</p><br /><p>&gt; А это для какого контроллера?</p><p>140k</p><br /><p>&gt; Хотел уточнить, те диски, которые вы давали, они все читали из 0 дороги?</p><p>example30 имеет BRK сразу после чтения сектора 0/0.<br />example40 читает 0/0, затем дочитывает из трека 0 свой RWTS, что-то ищет в оборудовании, затем BRK (непосредственно перед первым вызовом своего RWTS).</p><p>example 10 и 20 без BRK.</p><br /><p>&gt; Есть такой диск:</p><p>А вопрос-то в чём ?<br />Это ИКП: только не ясно: почему он на первой картинке не цветной?<br />Версии для девятки цветные, версии для семёрки - ч/б.</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Sun, 15 May 2022 03:03:57 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6750#p6750</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6749#p6749</link>
			<description><![CDATA[<p>Есть такой диск:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/sV9VrP6/photo1652560476.jpg" alt="https://i.ibb.co/sV9VrP6/photo1652560476.jpg" /></span></p></div></div><p>Заргужается он у меня вот так:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/R4pJzR9/photo1652560460.jpg" alt="https://i.ibb.co/R4pJzR9/photo1652560460.jpg" /></span></p></div></div><p>А ели нажать энтер?<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/ZdBC7qC/photo1652559830.jpg" alt="https://i.ibb.co/ZdBC7qC/photo1652559830.jpg" /></span></p></div></div><p>А если повыбирать в слепую? Да, это еще и работает:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/y03QNqR/photo1652560518.jpg" alt="https://i.ibb.co/y03QNqR/photo1652560518.jpg" /></span><br /><span class="postimg"><img src="https://i.ibb.co/BVHwqFf/photo1652560572.jpg" alt="https://i.ibb.co/BVHwqFf/photo1652560572.jpg" /></span><br /></p></div></div><p>И даже в Контроле диска совпала контрольная сумма.</p>]]></description>
			<author><![CDATA[null@example.com (zpilot)]]></author>
			<pubDate>Sat, 14 May 2022 23:34:50 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6749#p6749</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6748#p6748</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>&quot;Велосипед&quot; - это, обычно, написание своего кода, вместо уже существующего, причем свой не сильно лучше существующего. Но с агатом ситуация немного другая: на него было очень мало софта</p></blockquote></div><p>Я имел ввиду другое, что использовали недокументированные возможности. Их использование всегда затрудняет перенос кода, да даже взять Агат-9, прикинь, решили бы добавить в схему подтяжку по данным и уже бы все развалилось.<br /></p><div class="quotebox"><blockquote><p>С этим контроллером всё выглядит так:<br />например, в инструкции пишут (не цитата, я примерно вспоминаю): читаем регистр чтения по такому-то адресу, записываем в регистр записи по такому-то адресу. Чтобы включить запись щёлкаем такой-то регистр, чтобы прочитать состояние датчика защиты записи читаем такой-то регистр. После того, как ЦП читает слово из регистра чтения, контроллер начинает считывать следующее слово с диска.</p></blockquote></div><p>А это для какого контроллера? Для 840 я такого не находил, я видел, что вв55 можно программировать записывая в регистр программирования 0 в 7-бит, а 3-1 биты указывают на номер бита куда можно установить или снять 1 (то что в 0 бите). Я это сделал.<br /></p><div class="quotebox"><blockquote><p>Подробности про контроллеры 140 или 840:</p></blockquote></div><p>Да, с этого начинал, там очень хорошо расписан секвенсер и все что происходит в самом контроллере, но практически полностью отсутствует как Агат взаимодействует с контроллером. Я нашел техническое описание на контроллер 840, примеры его программирования, но этого мало, я вот долго не мог понять, почему Агат не считывает 2 раза один и тот же байт данных. Как сбрасывается rdy. Пока случайно, где-то в примерах программирования, не увидел фразу, что при чтении из вв55 бит rdy сбрасывается сам.</p><p>Хотел уточнить, те диски, которые вы давали, они все читали из 0 дороги?</p>]]></description>
			<author><![CDATA[null@example.com (zpilot)]]></author>
			<pubDate>Sat, 14 May 2022 12:28:18 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6748#p6748</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6747#p6747</link>
			<description><![CDATA[<p>&gt; велосипедисты&nbsp; - беда того времени.</p><p>&quot;Велосипед&quot; - это, обычно, написание своего кода, вместо уже существующего, причем свой не сильно лучше существующего. Но с агатом ситуация немного другая: на него было очень мало софта.<br />Я, например, когда начинал работать с агатом, нуждался даже просто в хорошем копировщике файлов.<br />Был FID, но он требовал указать номер слота контроллера-источника, привод на контроллере, контроллер-приёмник, привод на контроллере и имя файла ввести вручную (там была возможность указать что-то типа &quot;маски&quot;, но об этом нигде в интерфейсе не было сказано, я это нашел почти случайно).</p><p>Поэтому я на агате очень много времени проводил в разработке системного ПО. Прикладное тоже писал, но заметно меньше. </p><p>И поскольку агаты ставились в школы, очень многие будущие агат-программисты начинали своё творчество ещё будучи школьниками. И мы агат видели как единственно возможную систему. Это же был СССР, времена дефицита, в том числе ВТ ... Есть агат и не было даже мыслей о том, что его оборудование кто-то будет как-то развивать, что надо будет думать о совместимости. Что сам написал или спаял - то и будет у тебя.</p><br /><p>&gt; А как в окне $F000..$F7FF вектора обрабатываются, там же BRK, старт?</p><p>А как оно может обрабатываться ? Проц вектора запрашивает в адресах FFFA..FFFF.<br />Так что это окно не имеет к ним отношения.</p><br /><p>&gt; Я стараюсь хитрые вещи обходить...</p><p>Избегать хитростей самому, особенно в коде проги (если только ты не добиваешся какой-то эффективности) - это хорошо. Но речь идёт об эмуляции уже существующего железа и исполнения уже существующих прог.<br />Так что никуда не денешся.</p><p>С этим контроллером всё выглядит так:<br />например, в инструкции пишут (не цитата, я примерно вспоминаю): читаем регистр чтения по такому-то адресу, записываем в регистр записи по такому-то адресу. Чтобы включить запись щёлкаем такой-то регистр, чтобы прочитать состояние датчика защиты записи читаем такой-то регистр. После того, как ЦП читает слово из регистра чтения, контроллер начинает считывать следующее слово с диска.</p><p>Это всё будет работать, да.<br />Но если вам встретится странный драйвер, который действует совсем не так (но тоже работает нормально), то знайте:<br />регистр в этом контроллере всего один. Он читается по любому из 16 адресов.<br />Но обращение на любой из 16 адресов переключает один из 8 бит управления (чётный адрес выключает, нечётный - включает бит, номер которого указывают линии A3..A1 шины адреса).</p><p>Поскольку автомат управления контроллером как раз и управляется 3 из 8 бит управления (ещё 4 идут на управление двигателем головки и ещё 1 выбирает один из двух приводов), то любое чтение или запись могут менять режим работы контроллера.<br />И, например, чтение датчика защиты записи обязательно, так как это тоже переключение автомата для правильного вход в режим записи.</p><p>Контроллер вообще не интересуется - успевает ЦП читать что-то там или нет: набрался байт с дискеты в регистр - ок, начался следующий байт - старый сбрасывается, набирается следующий. Кто не успел - тот опоздал.</p><p>А запись в регистр, в режиме записи на диск - это вообще легендарная баллада: контроллер захватывает байт на определённый такт системой шины, и ему не важно что там будет, какую команду ЦП будет выполнять (хоть чтение).</p><p>Подробности про контроллеры 140 или 840:<br /><a href="http://agatcomp.ru/agat/Hardware/DZU.shtml">http://agatcomp.ru/agat/Hardware/DZU.shtml</a><br />Там есть что почитать, если надоело смотреть в схему.</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Sat, 14 May 2022 05:18:48 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6747#p6747</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6746#p6746</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>а потом косяки уже разработчиков софта</p></blockquote></div><p>велосипедисты&nbsp; - беда того времени.. есть такой компьютер Орион-128, так там вообще контроллеры ФДД висят на разных портах.. в разных ОС, я комп-то синтезировал, а потом смотрел на него как баран, не зная что с этим огородом дальше делать.<br /></p><div class="quotebox"><blockquote><p>в реальной девятке есть два окна сисмона:</p></blockquote></div><p>А как в окне $F000..$F7FF вектора обрабатываются, там же BRK, старт?<br />Кстати, сигналы f и onrom я сделал как в реальном Агате, те с использовантием кода оригинальных ПЗУ, то у меня тоже есть это окно, как его проверить?</p><p>Проверил, действительно по F000 и F800 одни и теже данные..</p><div class="quotebox"><blockquote><p>этот контроллер много-много более хитрый, чем описывает инструкция</p></blockquote></div><p>Я стараюсь хитрые вещи обходить, если это возможно, многие из них внутри наворочены до безобразия, а &quot;наружу&quot; выходит 3 бита и байт данных как с контроллером 840 кБ, главное понять когда и как.</p><p>Я тут подумал над wire free_slot = c200 | c400 | c500 | c600; и удалил это кусок совсем. Теперь, когда процессор читает, если нет ответа от слотов или устройств, всегда получает старший байт адреса.</p><div class="quotebox"><blockquote><p>Кстати, вы сами исходник проца писали или готовый брали?</p></blockquote></div><p>T65(b) core</p><p>Как бы там не было, но пока я разбирался/писал код его железа, проникся его крутостью, это очень хороший компьютер, его наработки есть и в Орионе и в Векторе&nbsp; и еще много где. На основе контрукции его блоков, с использованием других процессоров, получились бы огонь машинки. Хотя время было такое, что мы не понимали: где хорошо, а где плохо, да и не только мы, вон, на Коммодор посмотрите, его контроллер ФДД это второй Коммодор, но его любят и лилеют.</p><p>Короче, хочу доделать и выложить на гитхаб. Стараюсь не использовать особенности Альтерры, чтобы легко переносить на любые ПЛИС.</p>]]></description>
			<author><![CDATA[null@example.com (zpilot)]]></author>
			<pubDate>Fri, 13 May 2022 20:56:45 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6746#p6746</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6745#p6745</link>
			<description><![CDATA[<p>Это не совсем хак, это некоторый недосмотр разработчиков железа, а потом косяки уже разработчиков софта (которые, скорее всего, вообще не представляли природу появления этого Cx и считали его чётко правильным и всегда гарантированным).</p><p>И это - не единственный сюрприз.</p><p>Вот ещё один: в реальной девятке есть два окна сисмона: $F000..$F7FF и $F800..$FFFF.<br />Второе - документирование, а вот первое - нет. А мне доводилось встречать софт, хоть и редко, который ссылался на процедуры сисмона именно по первому окну.</p><p>А вот почему быстропускалка (example10, example20) не заработали (а сейчас они работают?) - это уже интересный вопрос для меня, как автора их кода ;)).</p><p>С0F0 - я не помню, можно оттуда что-то читать или нет. Скорее всего нет.<br />Так что возвращайте всё ту же $C0.</p><p>Вот ещё заметка: порт клавиатуры описан у обеих (7 и 9) одинакого: старший бит - готовность порта, остальные биты - код.</p><p>Но в схемотехнике есть одна особенность: после очистки регистра клавиатуры (обращение на C01x) у семёрки все биты сбрасываюся в 0, а у девятки - только старший бит. Некоторые проги (редкие, по счастью) к этому небезразличны.</p><p>А к схемам можно много чего дописывать... Это был бы большой роман :)<br />Я так полагаю, у нас тут никто до конца, до последнего пина, не знает как это работает.<br />Разбираем по частям всю эту логику, по мере ремонтов и вопросов. Особенно замысловато на девятке устроен дисплейный контроллер.</p><p>/* Кстати, а знаете что у девятки можно читать регистр управления ДК ? Не помню, говорится об этом в инструкции или нет. У семёрки - нельзя, будет просто возвращать $FF. */</p><p>А уж что будет, если воссоздавать агат заного, на плисах или ещё как-то - там ещё на три романа всплывает всякого разного.</p><p>А вот ещё интересное: в доках пишут, что обращение к C03x вызывает перемещение мембраны динамика, одна команда - в одну сторону. Но это не так: перемещение происходит в каждом такте, в котором ЦП обратился к C03x. Но в разных командах ЦП делает разное число обращений. Бывает одно, бывает два. Можно и три сделать.</p><p>Я когда первый эмулятор агата писал (который досовкий), тоже только в доки смотрел. Но когда начал только разбирать схемотехнику контроллера 140к, понял, что проще с нуля код переписать, чем что-то исправить - этот контроллер много-много более хитрый, чем описывает инструкция.</p><p>У агата довольно сложная схемотехника и подводных камней полно как для программистов так и для разработчиков железа.</p><p>Кстати, вы сами исходник проца писали или готовый брали?<br />У процессора есть хитрый десятичный режим, который настолько хитрый, что полностью правильно его сэмулировать непросто. У меня даже валялся тест, который проверяет его работу, могу поискать, если интересно. Правда, мало кто пользовался в прогах всеми особенностями этого режима, но всё таки в игрушках он иногда используется. Да и в досах расчёт свободного пространства на диске - это случай применения десятичного режима.</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Fri, 13 May 2022 17:36:30 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6745#p6745</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6744#p6744</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Запиши и прибей на стену:</p></blockquote></div><p>Это бы разместить не только тут, а на сайте, где лежат схемы к Агатам. Я объяснюсь, вот смотрю схему и не понимаю почему ответ на С08х должен содержать в старшем бите 1? У Д54 есть только 3 выхода: 0, 1 и 3 бит, откуда 7 бит в 1? Были бы подтягивающие резисторы в ШД, было бы ясно почему. Ну хорошо, может какие из микросхем имеют подтяжки? Какие есть микросхемы на шине: 555ИР22, читаем даташит - Z состояние, ИР23 - тоже самое, я обыскался эту 1. Что оказалось? Хак связанный с емкостной составляющей этого узла. Ответ узнал из вашего сообщения в теме по ремонту Агатов, как только сделал wire free_slot = c200 | c400 | c500 | c600; Агат заработал без глюков, но про С0хх там не было, от того и возвращаю 0. <br />Есть вопрос, что должен вернуть С0F0? тоже С0?</p>]]></description>
			<author><![CDATA[null@example.com (zpilot)]]></author>
			<pubDate>Fri, 13 May 2022 12:23:38 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6744#p6744</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6743#p6743</link>
			<description><![CDATA[<p>Маленько продвинулись, вечером следующие образы подготовлю.<br />Вроде 40 пример правильно проходит и не зависает - уже хорошо.</p><p>&gt; по всему диапазону (кроме фдд С0В0) возвращаются 0.<br />&gt; Похоже на сбой с бегущей вверх звездочкой, бипером и выводом на экран BRK по 03FD.</p><p>с040 - включение таймера, если у тебя только сисмон в памяти, то всё просто зависнет (что мы и наблюдаем).<br />Но вопрос не об этом, вопрос в том, что процессор получит при чтении этого порта ?</p><p>Объясняю подробно:<br />алгоритмы определения оборудования ожидают вполне конкретные ответы от установленных устройств.<br />Если ответы соответствуют известным (например, контроллер дисковода опознаётся по 0 2 4 байтам ROM загрузчика сисмоном и по 4 последним байтам - при поиске некоторыми операционками), <br />то считается, что устройство присутствует. Иначе - отсутствует. Но это с контроллером флопа всё легко и просто - вряд ли 3-4 байта совпадут в случае отсуствия контроллера.<br />Для других устройств опрос иногда делается по одному байту. Если у тебя отствутвующие устройства будут отзыватся нулями или ещё каким-то случайным образом, алгоритмы могут глючить. Они и так-то могут глючить (например, пресловутый ИКП может стать неадекватным, если не найдёт ячейку принтера, но это не всегда (известная ошибка в его коде)), а уж на нестандартной аппаратуре - тем более.</p><p>Запиши и прибей на стену:</p><p>- У агат-7 любой порт, бит порта (даже не байт!) который не отвечает на запрос, возвращает 1. Например, порт кнопки джойстика использует только старший бит, он выставляется с кнопки пульта. Другие биты этого регистра будут 1. Если с040 включает таймер - это не значит, что кто-то при этом управляет шиной данных, а значит ЦП получит оттуда 0xFF. И т.д. Это обеспечивается группой pullup-резисторов на модуле ЦП.</p><p>- У агат-9 почти то же самое, за исключением того, что там разработчики сьэкономили 8 pullup-резисторов и поэтому проц при чтении неотвечающих портов, получает последнее состояние ША (т.е. из предыдущего такта). Как правило это будет старший разряд адреса. Т.е. у тебя c040 должен читаться как 0xC0, c800 - 0xc8 и т.д. Теоретически, в зависимости от команды чтения, наверное можно получить и другие значения, но обычно к Сxxx обращаются командами косвенной адресации, так что возвращать старший байт адреса в любом случае вполне хорошо.</p><p>Это касается, кстати, и регистра управления LC : C08x. Если посмотришь схему, там возвращается только 3 или 4 младших разряда, соответственно, остальные будут возвращаться из того же байта 0xC0.</p><p>Лисин этого не будет проверять, его вообще мало что интересует кроме модулей ДопОЗУ и базового ОЗУ. А вот операционки могут вести себя внезапно.</p><p>Возможно, конечно, что сейчас у тебя баг не в этом, но это тоже нужно исправлять.</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Fri, 13 May 2022 05:12:55 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6743#p6743</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6742#p6742</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>по регионам C090..C0FF</p></blockquote></div><p>по всему диапазону (кроме фдд С0В0) возвращаются 0.<br /></p><div class="quotebox"><blockquote><p>c040</p></blockquote></div><p>Похоже на сбой с бегущей вверх звездочкой, бипером и выводом на экран BRK по 03FD.</p>]]></description>
			<author><![CDATA[null@example.com (zpilot)]]></author>
			<pubDate>Fri, 13 May 2022 01:56:22 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6742#p6742</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6741#p6741</link>
			<description><![CDATA[<p>example10.dsk:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/D1SgcQP/photo1652405860-9.jpg" alt="https://i.ibb.co/D1SgcQP/photo1652405860-9.jpg" /></span></p></div></div><p>example20.dsk, остановилось на этом:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/9v9yXWM/photo1652405860-8.jpg" alt="https://i.ibb.co/9v9yXWM/photo1652405860-8.jpg" /></span></p></div></div><p>example30.dsk, остановилось на этом:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/pWxVNZ3/photo1652405860-7.jpg" alt="https://i.ibb.co/pWxVNZ3/photo1652405860-7.jpg" /></span></p></div></div><p>регионы памяти:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/7C69j5h/photo1652405860-6.jpg" alt="https://i.ibb.co/7C69j5h/photo1652405860-6.jpg" /></span><br /><span class="postimg"><img src="https://i.ibb.co/GR1NYbx/photo1652405860-5.jpg" alt="https://i.ibb.co/GR1NYbx/photo1652405860-5.jpg" /></span><br /><span class="postimg"><img src="https://i.ibb.co/t4fSZj6/photo1652405860-4.jpg" alt="https://i.ibb.co/t4fSZj6/photo1652405860-4.jpg" /></span><br /><span class="postimg"><img src="https://i.ibb.co/n7PyC0y/photo1652405860-3.jpg" alt="https://i.ibb.co/n7PyC0y/photo1652405860-3.jpg" /></span><br /><span class="postimg"><img src="https://i.ibb.co/pxRh4hb/photo1652405860-2.jpg" alt="https://i.ibb.co/pxRh4hb/photo1652405860-2.jpg" /></span><br /><span class="postimg"><img src="https://i.ibb.co/dL1s5gm/photo1652405860-1.jpg" alt="https://i.ibb.co/dL1s5gm/photo1652405860-1.jpg" /></span><br /></p></div></div><p>example40.dsk:<br /></p><div class="quotebox" style="padding: 0px;"><div onclick="var e,d,c=this.parentNode,a=c.getElementsByTagName('div')[1],b=this.getElementsByTagName('span')[0];if(a.style.display!=''){while(c.parentNode&&(!d||!e||d==e)){e=d;d=(window.getComputedStyle?getComputedStyle(c, null):c.currentStyle)['backgroundColor'];if(d=='transparent'||d=='rgba(0, 0, 0, 0)')d=e;c=c.parentNode;}a.style.display='';a.style.backgroundColor=d;b.innerHTML='&#9650;';}else{a.style.display='none';b.innerHTML='&#9660;';}" style="font-weight: bold; cursor: pointer; font-size: 0.9em;"><span style="padding: 0 5px;">&#9660;</span>Spoiler</div><div style="padding: 6px; margin: 0; display: none;"><p><span class="postimg"><img src="https://i.ibb.co/C5L9dX5/photo1652405860.jpg" alt="https://i.ibb.co/C5L9dX5/photo1652405860.jpg" /></span></p></div></div>]]></description>
			<author><![CDATA[null@example.com (zpilot)]]></author>
			<pubDate>Fri, 13 May 2022 01:46:06 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6741#p6741</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6740#p6740</link>
			<description><![CDATA[<p>А по какому нибудь адресу вроде c040 что вернётся? Или по регионам C090..C0FF ?</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Fri, 13 May 2022 01:41:54 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6740#p6740</guid>
		</item>
		<item>
			<title><![CDATA[Re: Вопрос по контроллеру 840К]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=6739#p6739</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>как у тебя реализован регион C000.CFFF ?</p></blockquote></div><p>Если я правильно понимаю, то имеется в виду, что возращается процессору в случае обращения по пустым слотам:<br /></p><div class="codebox"><pre><code>// free slots
wire free_slot = c200 | c400 | c500 | c600;
..
dii &lt;= free_slot ? addr[15:8] : ...</code></pre></div><p>Если слот не пустой, например Диспетчер памяти или LC, то возвращается либо подключеный банк памяти: <br />С110<br />С110 - 11<br />либо конфиг LC.</p>]]></description>
			<author><![CDATA[null@example.com (zpilot)]]></author>
			<pubDate>Fri, 13 May 2022 01:24:39 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=6739#p6739</guid>
		</item>
	</channel>
</rss>
