<?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; Pusher]]></title>
		<link>https://forum.agatcomp.ru//viewtopic.php?id=137</link>
		<atom:link href="https://forum.agatcomp.ru/extern.php?action=feed&amp;tid=137&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Pusher».]]></description>
		<lastBuildDate>Sat, 10 Apr 2021 16:43:44 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4877#p4877</link>
			<description><![CDATA[<div class="quotebox"><cite>avivanov76 пишет:</cite><blockquote><p>Интересно, что обе версии позволяют выключить звук. Старая при нажатии 4 на функциональной клавиатуре, новая - при нажатии F2. Еще прикол, как это сделано: в процедуре генерации звука адрес $C030 патчится на $C020. То есть, при выключенном звуке он все равно генерируется, но идет в магнитофонный порт :)</p></blockquote></div><br /><p>А вот что интересно: такое часто попадается в играх.</p><p>Я помню да, про подключение внешнего динамика через &quot;МАГ&quot; у поздних ЛЭМЗ. Но дело наверное не совсем в этом.<br />Вот что написал один из авторов:</p><p><em>&quot;Всё просто. <br />Играть звук - это время, это синхронизация. <br />Если просто не играть звук - то графика начинает работать быстрее, <br />значит игра без звука будет бегать быстрее.<br />Чтобы таково не было надо звук играть всегда.<br />Значит надо перенаправить его куда-то. С020 самое безопасное место.&quot;</em></p>]]></description>
			<author><![CDATA[null@example.com (garnizon)]]></author>
			<pubDate>Sat, 10 Apr 2021 16:43:44 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4877#p4877</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4496#p4496</link>
			<description><![CDATA[<p>Ещё докидаю заметки про пушер, раз уж начали его полоскать:</p><p>==</p><p>В некоторых версиях есть проверка типа операционной системы.<br />По косвенным признакам проверяет, является ли система ИКП-base или BTK-base.<br />Быстропускалка ей кажется похожей на BTK, хотя, на самом деле, она больше похожа на DOS3.3.<br />В зависимости от результата pusher использует разные обращения к RWTS.</p><p>If $03E3^ == $A9 &amp;&amp; $03E5^ == $A0 &amp;&amp; $03E7 == $60 then IKP</p><p>В ИКП по этим адресам стоит загрузка адреса таблицы управления RWTS:<br />03E3 -&nbsp; &nbsp;A9 05 ..&nbsp; &nbsp;&quot;).&quot;&nbsp; &nbsp; LDA&nbsp; &nbsp;#05<br />03E5 -&nbsp; &nbsp;A0 57 ..&nbsp; &nbsp;&quot; w&quot;&nbsp; &nbsp; LDY&nbsp; &nbsp;#57<br />03E7 -&nbsp; &nbsp;60 .. ..&nbsp; &nbsp;&quot;ю&quot;&nbsp; &nbsp; &nbsp;RTS</p><p>Код этой проверки находится где-то в первом секторе игрули,<br />обычно он вызывается как одна из первых подпрограмм.</p><p>Исправленные версии для Быстропускалки:</p><p>If $03E3^ == $A9 then IKP (т.е. обращения к RWTS будут через $3E3 и $3D9)<br />else BTK (обращения к RWTS по правилам BTK)</p><p>==</p><p>Файл уровней ищется собственным файловым менеджером, он использует две ДОСовких процедуры:<br />$3E3 и $3D9.</p><p>Имя файла уровней ищется в каталоге примерно здесь:</p><p>24B2 -&nbsp; &nbsp;B1 D4 ..&nbsp; &nbsp;&quot;1T&quot;&nbsp; &nbsp; LDA&nbsp; &nbsp;(D4), Y<br />24B4 -&nbsp; &nbsp;F0 22 ..&nbsp; &nbsp;&quot;П.&quot;&nbsp; &nbsp; BEQ&nbsp; &nbsp;24D8<br />24B6 -&nbsp; &nbsp;C9 FF ..&nbsp; &nbsp;&quot;IЪ&quot;&nbsp; &nbsp; CMP&nbsp; &nbsp;#FF<br />24B8 -&nbsp; &nbsp;F0 13 ..&nbsp; &nbsp;&quot;П.&quot;&nbsp; &nbsp; BEQ&nbsp; &nbsp;24CD<br />24BA -&nbsp; &nbsp;A0 03 ..&nbsp; &nbsp;&quot; .&quot;&nbsp; &nbsp; LDY&nbsp; &nbsp;#03<br />24BC -&nbsp; &nbsp;A2 00 ..&nbsp; &nbsp;&quot;&quot;.&quot;&nbsp; &nbsp; LDX&nbsp; &nbsp;#00<br />24BE -&nbsp; &nbsp;B1 D4 ..&nbsp; &nbsp;&quot;1T&quot;&nbsp; &nbsp; LDA&nbsp; &nbsp;(D4), Y<br />24C0 -&nbsp; &nbsp;DD 0D 26&nbsp; &nbsp;&quot;]..&quot;&nbsp; &nbsp;CMP&nbsp; &nbsp;260D, X<br />24C3 -&nbsp; &nbsp;D0 08 ..&nbsp; &nbsp;&quot;P.&quot;&nbsp; &nbsp; BNE&nbsp; &nbsp;24CD<br />24C5 -&nbsp; &nbsp;E8 .. ..&nbsp; &nbsp;&quot;Х&quot;&nbsp; &nbsp; &nbsp;INX&nbsp; &nbsp;<br />24C6 -&nbsp; &nbsp;C8 .. ..&nbsp; &nbsp;&quot;H&quot;&nbsp; &nbsp; &nbsp;INY&nbsp; &nbsp;<br />24C7 -&nbsp; &nbsp;C0 21 ..&nbsp; &nbsp;&quot;@.&quot;&nbsp; &nbsp; CPY&nbsp; &nbsp;#21<br />24C9 -&nbsp; &nbsp;D0 F3 ..&nbsp; &nbsp;&quot;PС&quot;&nbsp; &nbsp; BNE&nbsp; &nbsp;24BE<br />24CB -&nbsp; &nbsp;F0 0D ..&nbsp; &nbsp;&quot;П.&quot;&nbsp; &nbsp; BEQ&nbsp; &nbsp;24DA<br />24CD -&nbsp; &nbsp;A5 D4 ..&nbsp; &nbsp;&quot;%T&quot;&nbsp; &nbsp; LDA&nbsp; &nbsp;D4<br />24CF -&nbsp; &nbsp;18 .. ..&nbsp; &nbsp;&quot;.&quot;&nbsp; &nbsp; &nbsp;CLC&nbsp; &nbsp;<br />24D0 -&nbsp; &nbsp;69 23 ..&nbsp; &nbsp;&quot;иё&quot;&nbsp; &nbsp; ADC&nbsp; &nbsp;#23<br />24D2 -&nbsp; &nbsp;85 D4 ..&nbsp; &nbsp;&quot;.T&quot;&nbsp; &nbsp; STA&nbsp; &nbsp;D4<br />24D4 -&nbsp; &nbsp;90 DA ..&nbsp; &nbsp;&quot;.Z&quot;&nbsp; &nbsp; BCC&nbsp; &nbsp;24B0<br />24D6 -&nbsp; &nbsp;B0 BF ..&nbsp; &nbsp;&quot;0?&quot;&nbsp; &nbsp; BCS&nbsp; &nbsp;2497<br />24D8 -&nbsp; &nbsp;18 .. ..&nbsp; &nbsp;&quot;.&quot;&nbsp; &nbsp; &nbsp;CLC&nbsp; &nbsp;<br />24D9 -&nbsp; &nbsp;60 .. ..&nbsp; &nbsp;&quot;ю&quot;&nbsp; &nbsp; &nbsp;RTS&nbsp; &nbsp;</p><p>==</p><p>Ещё есть не бадеровский цветной пушер, для режима 128x128.</p><p>==</p><p>В разных версиях игры рабочие буфера расположены в совершенно разных местах.<br />При этом они объявлены в исходнике статически. Предполагаю это из того, что,<br />например, буфера таблицы расположения секторов PUSHER.LEVELS всегда выровнены по краю страницы (XX00).</p><p>Игруха категорически не предназначена для запуска под dos33, так как использует кучу памяти в регионе &gt; $9000. В некоторых версиях прямо залезает на $BXXX.</p><p>==</p><p>Файл уровней - 121 блок (теперь выяснилось, что игруля сама понимает размер файла и он может быть произвольным в некоторых пределах).</p><p>Нулевой блок не используется, вероятно. Во всяком случае первые 256 байт.<br />В них входят первые 4 байта размера и длинны, но т.к. pusher читает файл своими процедурами,<br />эти байты не относятся к формату.</p><p>Уровни нумеруются от 1 до 80.<br />01й уровень находится в 1 и 2 блоках (пропуская 0-й блок)<br />80й уровень находится в предпоследнем и последнем блоке.</p><p>Чтение уровня происходит в буфер $9400..95FF.</p><p>Размер уровня (предположительно) - 32x30 элементов<br />Описание каждого уровня - $180 байт<br />Зашифрованы несколькими EOR</p><p>Первые $18 байт имеют различное назначение, в остальных закодирована карта уровня, по 3 бита на элемент.</p><p>&nbsp; // нач поз&nbsp; &nbsp; - buf[$00..$01]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; // контрольки - buf[$02..$03]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; // рекорд&nbsp; &nbsp; &nbsp;- buf[$04..$08]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />&nbsp; // имя&nbsp; &nbsp; &nbsp; &nbsp; - buf[$09..$17]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p><p>Кому надо - есть исходник на C, который умеет парсить файл уровней (генерирует PNG с картинками всех уровней). Для сборки нужна imlib2.</p><p>==</p><p>Заметки про сборник Пушер+Клондайк.</p><p>Привет от Бадера</p><p>Внутри следующие штуки:</p><p>- Загрузчик: представляет собой что-то вроде BTK, но с отключенной заставкой. Не знаю, сколько<br />там от реальной BTK, но по объёму и виду кода - там полноценная операционка, вроде<br />даже есть системный монитор, но так же и I/O для 140 и 800к дисков, и, похоже, виртуальный<br />диск.</p><p>- Где-то перед чтением VTOC физического диска ищется нечто, которое должно быть расположено<br />на 17-й дорожке, где-то после 8...9 сектора. Должно представлять собой сбой синхро,<br />байт $95 и ещё примерно 3 байта. Первая встретившаяся фигня пропускается, вторая<br />используется в дальнейшем как ключ для расшифровки файлов-игр (см метку LoadSel).</p><p>- На оригинале (полученном физическом диске) каталог был убит нахрен. CRC в порядке, но сектора заполнены мусором.<br />Следствие показало, что всё таки там ожидается именно обычный каталог. В образах<br />видны три T/S-листа, как раз соответствующие файлам klondike, pusher и pusher.levels.<br />Возможно, при загрузке будет игнорироваться точка загрузки, указанная внутри файлов,<br />но это не факт. Причем точка, заданная снаружи, кажется, совпадает с той, что указана<br />в файлах.</p><p>- После расшифровки ищется небольшая сигнатура внутри файлов и управление передаётся<br />почти на неё (а не на начала образов!). Если сигнатура не найдена до $8000-го адреса<br />- управление уходит примерно на него, в результате чего имеем BRK/HLT - по вкусу.</p><p>- Ошибка чтения файла-игры также не смущает декодер (он просто не проверяет флаг<br />результата) и дальше всё идёт по прежнему сценарию.</p><p>- Один из байт ключа копируется в адрес $200 (== $CA), но пока не обнаружено, чтобы он<br />где-то использовался. Его контроль происходит в теле игр.<br />Также могут проверяться $265 (== $A2), $266 (== $19) и $800 (== $0E) - это всё относится к локам.</p><p>- Ещё одна ячейка - $3A - там слот с парпортом с навешанной мышью. Если он есть,<br />например, во втором слоте, в $3A будет $20.</p><p>Resume: пока что механизм защиты видится довольно несложным. Сложность была лишь<br />в огромном объёме уникального кода, на анализ которого ушло почти шесть часов.</p><p>===============</p><p>В system\binstall есть инсталятор ключа, там же подробный разбор его логики.<br />Помимо описанных выше фенечек есть ещё ряд других, которые, вероятно, проверяются<br />уже внутри тел игр.</p><br /><p>===============</p><p>AK:</p><p>Вроде то же самое, но, кажется, другие версии. Защита аналогична или неизвестно чем отличается.</p><p>===============</p><p>При очередном анализе выявился также следующий косяк:</p><p>Процедура &quot;Bload??&quot; (чтение B-файла в память) имеет ряд аргументов,<br />которые указывают точку загрузки. Точка вычисляет по различным алгоритмам,<br />выбор алгоритма определяется содержимым ячейки $61 (это вполне стандартное поведение<br />BTK-подобных систем, на основе которой сделан лоадер). Но Бадер где-то забыл<br />добавить инициализацию этой ячейки. Там должен быть 0, но в случае некоторого мусора<br />возможны варианты...</p><p>===============</p><p>KLONDIKE.FIL - дешифрованный, с инициализацей всех нужных ключей. Возможно, хвост<br />имело смысл обрезать - получилось бы на сектор короче.</p><p>===============</p><p>Образы в UnTested/ имеют не совпадающие файлы, но изучения их не проводилось.<br />Вроде бы ключ защиты фиксирован, но, быть может, существовали другие версии инсталяторов<br />с другими ключами - тогда и зашифрованные файлы будут отличаться даже при совпадении<br />кода программ.</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Sun, 24 Jan 2021 14:50:43 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4496#p4496</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4494#p4494</link>
			<description><![CDATA[<p>У меня долго тюкает чтением секторов, минут 10 ждал. </p><p>На сайте положил подправленные версии (там 168 уровней). <br /><a href="http://agatcomp.ru/agat/Software/Game/Almaz/Pusher.shtml">http://agatcomp.ru/agat/Software/Game/A … sher.shtml</a></p><p>Но с ходу игра не заработала в быстропускалке: <br />там в пушере есть проверка типа операционной системы<br />она по косвенным признакам проверяет, является ли система ИКП-base или BTK-base<br />быстропускалка ей кажется похожей на BTK, хотя она должна быть похожа на DOS3.3</p><p>Это тоже подправлено (давно).</p><p>Кстати, на диске с &quot;Клондайк&quot; есть цветная версия ПУШЕРА аж 1994 года, но чем отличается от 93 я не знаю и сравнить их в лоб не получается. Поздняя на абсолютных адресах диска.<br /><a href="http://agatcomp.ru/agat/Software/Game/Almaz/Klondike.shtml">http://agatcomp.ru/agat/Software/Game/A … dike.shtml</a></p><br /><div class="quotebox"><cite>avivanov76 пишет:</cite><blockquote><p>Так что старая версия, скорее всего, вообще была для внутреннего пользования.</p></blockquote></div><p>Похоже что примерно так и есть, я думаю что это ранняя отладочная версия в графике. <br />Известно что первые версии (88год) были в текстовом режиме Т32. Собственно и графические имеют клетку 32х32 тайла (32х30 сетка игры и две горизонтальные строки с инфой (Рекорд, уровень, ходы...) )</p>]]></description>
			<author><![CDATA[null@example.com (garnizon)]]></author>
			<pubDate>Sat, 23 Jan 2021 22:10:45 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4494#p4494</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4493#p4493</link>
			<description><![CDATA[<p>У меня версия 1.29.2. При выборе уровня 170 сначала минуту непрерывно идет звук чтения секторов, потом пять минут тишина, но редко редко раздается звук чтения сектора. Потом игра снова предлагает выбрать номер уровня (вроде ничего не ломается). Семерка и девятка ведут себя одинаково.</p>]]></description>
			<author><![CDATA[null@example.com (avivanov76)]]></author>
			<pubDate>Sat, 23 Jan 2021 20:39:15 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4493#p4493</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4492#p4492</link>
			<description><![CDATA[<div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p>Но есть ещё один странный баг: если игрушка всё таки лезет на 255й трек (т.е. на 127 цилиндр) то олеговский эмуль почему-то у меня это схавывает (где-то по полминуты или больше напряженно думая), а у Игоря почему -то виртуальная машина зависает совсем. Если кому не лень - попробуйте у себя: pushernew из первого сообщения, ИГРА -&gt; 170.</p></blockquote></div><p>Опробовал PUSHERnew из первого сообщения на эмуляторе Олега, версия 1.29, Windows 10. При выборе уровня 170 система мусолит дисковод и ничего не происходит. Ждал больше двух минут, потом надоело. Попробовал загрузить уровень 010 - загрузка занимает около секунды. Всё это опробовал в конфигурациях 7 и 9.</p>]]></description>
			<author><![CDATA[null@example.com (AlexBel)]]></author>
			<pubDate>Sat, 23 Jan 2021 04:29:36 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4492#p4492</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4490#p4490</link>
			<description><![CDATA[<p>Нашёл ошибка в игрухе с чтением файла уровней:<br />Уровень в файле занимает 1.5 сектора.<br />У ранних версий игры файл уровней занимал: 80 уровней * 1.5 + 1 пустой сектор в начале файла = 121 сектор, у более поздних 170 уровней * 1.5 + 1 пустой = 256. Должно быть 256, реально 255.</p><p>Игруха использует досовский драйвер или btk&#039;шный для доступа к дисководу, но файл ищет и читает сама.<br />Она его находит в каталоге, затем считывает все его TSL, собирая две таблицы адресов: номера треков всех блоков файла и номера секторов всех блоков файла.</p><p>Вероятно, из-за переполнения счётчика, если файл содержит 256 секторов, то игра считает его пустым - не даёт прочитать никакой уровень.</p><p>Но секторов 255. Поэтому читаются почти все уровни. Но последний - 170-й уровень попадает на 255й сектор файла и на 256й. 255й читается успешно, но 256-го нет, и игруха пытается читать диск в любом мусорном месте (ячейка таблицы не инициализирована). В эмуляторе это может быть и сектор 0/0 и 255/255 - как повезёт с загрузчиком и с мусором в памяти. Что было на реале - понятно.</p><p>Простое лечение: урезать файл на один сектор. В этом случае игрушка правильно понимает, что секторов 168. При этом 169 и 170й просто не пытается читать.</p><p>--</p><p>Но есть ещё один странный баг: если игрушка всё таки лезет на 255й трек (т.е. на 127 цилиндр) то олеговский эмуль почему-то у меня это схавывает (где-то по полминуты или больше напряженно думая), а у Игоря почему -то виртуальная машина зависает совсем. Если кому не лень - попробуйте у себя: pushernew из первого сообщения, ИГРА -&gt; 170.</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Fri, 22 Jan 2021 17:09:58 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4490#p4490</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4272#p4272</link>
			<description><![CDATA[<p>не, не , это не просьба была а вопрос. Просто у нас в школе именно новые версии и с звуком были. Их легко отличить - в старой 80 уровней в новой 170. Вот я и подумал, это сами сделали или одна из авторских версий?</p><p>Да, на сайте надо по возможности ближе к оригиналу выкладывать, я в соседней теме про ЛОДЕ так и писал. <br />На сайте надо положить новую версию ч\б и цветную они ждут в файле 170 комнат и могут пользоваться общим файлом с уровнями. А старую версию просто на другом диске или как-то еще подумать.</p>]]></description>
			<author><![CDATA[null@example.com (garnizon)]]></author>
			<pubDate>Tue, 08 Dec 2020 05:20:19 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4272#p4272</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4271#p4271</link>
			<description><![CDATA[<p>Согласен с <strong>avivanov76</strong> - что, в данном случае, даст это изменение игры? Исправить то, что мешает программе нормально работать - необходимость. Добавление звука туда, где его не было - совершенно неоправданное изменение программы. Тем более, как я считаю, это будет не совсем корректно по отношению к автору программы.</p>]]></description>
			<author><![CDATA[null@example.com (AlexBel)]]></author>
			<pubDate>Tue, 08 Dec 2020 02:54:27 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4271#p4271</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4270#p4270</link>
			<description><![CDATA[<p>Ну, вроде как можно попробовать. Не меняя размер кода, к сожалению не получится. Придется добавить вызов дополнительной процедуры и найти свободное место, куда ее саму можно будет добавить.</p><p>Но, во-первых, звук не будет один в один. Тут же звук генерируется одновременно с выводом графики: одну строку отрисовали, пискнули динамиком, еще отрисовали - снова пискнули. Бадер в новой версии некоторые циклы оптимизировал, так что временные задержки изменятся и частота звука будет другой.</p><p>А во-вторых, непонятно, чего мы пытаемся достичь? Сделать идеальную версию, которой никогда в природе не было? Мне казалось, что эти игрушки надо по возможности сохранять в исходном виде, в крайнем случае управление поправить, чтобы в эмуляторе пальцы не вывихнуть :) В конце концов, выложить обе версии - со звуком и без.</p>]]></description>
			<author><![CDATA[null@example.com (avivanov76)]]></author>
			<pubDate>Mon, 07 Dec 2020 20:39:32 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4270#p4270</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4268#p4268</link>
			<description><![CDATA[<p>А в новую версию никак нельзя добавить этот звук при раздвижении экрана?</p>]]></description>
			<author><![CDATA[null@example.com (garnizon)]]></author>
			<pubDate>Mon, 07 Dec 2020 16:24:54 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4268#p4268</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=4266#p4266</link>
			<description><![CDATA[<div class="quotebox"><cite>garnizon пишет:</cite><blockquote><p>Мне неоднократно попадались проги, которые имели почему-то звук именно через запись, а не чтение.</p></blockquote></div><p>Основная польза звука через запись - аккумулятор не забивается мусором и никакие флаги процессора не меняются. На сам звук это никак влиять не должно (если используется абсолютная адресация).</p><div class="quotebox"><cite>garnizon пишет:</cite><blockquote><p>В вложении две версии PUSHERа, оба диска запускаются на любой системе (7 или 9).<br />И например на девятке в новой версии нет звука когда раздвигаются полоски, когда человечек ходит звук шагов есть. И еще есть звук когда ставишь все ящики на место, такой свистящий (а вот свист есть только в новой версии).</p></blockquote></div><p>Поковырялся в обеих версиях. Ну что можно сказать: в новой версии нет звука когда раздвигаются полоски потому что он там не генерируется. Ни в семерке, ни в девятке. Это решение автора программы.</p><p>В этом есть свои резоны:<br />1) звуковой эффект в конце уровня гораздо логичнее. Типа, такая награда за успешное решение головоломки. Это намного лучше, чем тупой переход в меню в старой версии. Из-за этого старая версия выглядит недоделанной.<br />2) эти полоски раздвигаются сразу при загрузке игры - это же палево. Если учитель информатики ушел к директору, а ученики решили воспользоваться моментом и поиграть, то об этом весь этаж узнает :)<br />3) звук в старой версии не особо музыкальный, может и хорошо, что Бадер его убрал?</p><p>Интересно, что обе версии позволяют выключить звук. Старая при нажатии 4 на функциональной клавиатуре, новая - при нажатии F2. Еще прикол, как это сделано: в процедуре генерации звука адрес $C030 патчится на $C020. То есть, при выключенном звуке он все равно генерируется, но идет в магнитофонный порт :)</p><p>Еще из интересных находок. Старая версия содержит вот такой код:<br /></p><div class="codebox"><pre><code>SUB_2BA3
        LDX    #$50
        BIT    ZP_F4
        BMI    CODE_2BBE
        LDA    #$89
        STA    DATA_C083, X
        LDA    #$BF
        STA    DATA_C081, X
        JSR    SUB_2BEC
        LDA    #$FF
        STA    DATA_C081, X
        SEC
        ROR    ZP_F4

CODE_2BBE
        LDA    #$60
        STA    ZP_A1
        LDA    #$00
        STA    ZP_A0
        LDA    #$80
        STA    ZP_F1
        STA    KBDSTROBE
        JMP    CODE_2C20</code></pre></div><p>Это обработчик сочетания клавиш УПР+О. Сначала я подумал, что тут какая-то игра с фазами на контроллере НГМД, но потом понял, что просто у Бадера в пятом слоте стоял модуль последовательного и параллельного интерфейса. К нему был подключен принтер и по нажатию клавиш УПР+О печаталась какая-то отладочная информация.</p><p>Так что старая версия, скорее всего, вообще была для внутреннего пользования. В новой этого всего уже нет, как и обработки УПР+О. Зато в новой обрабатываются клавиши F1 - перейти к предыдущему уровню, и F3 - перейти к следующему уровню.</p>]]></description>
			<author><![CDATA[null@example.com (avivanov76)]]></author>
			<pubDate>Mon, 07 Dec 2020 12:30:30 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=4266#p4266</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=1543#p1543</link>
			<description><![CDATA[<div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><div class="quotebox"><cite>LeoN пишет:</cite><blockquote><div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p>Проверял, смотрел, как осцилографом на своём устройстве так и на триггере звука вольтметром.</p></blockquote></div><p>Какая адресация была для STA?</p></blockquote></div><p>понял, там была какая-то из индексных. <br />На прямой (8D), действительно, один импульс</p></blockquote></div><p>ЧИТД!</p><br /><div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p>я проверил сейчас: звук на одной конкретной плате работает именно по regsel: т.е. lda , похоже даже индексная:<br />FE18- B1 3C .. LDA (3C), Y<br />при обращении даёт один переход триггера звука</p></blockquote></div><p><a href="http://www.emuverse.ru/wiki/MOS_Technology_6502/Система_команд#LDA">Пруф</a> говорит, что &quot;LDA (zp),Y&quot; - 5* тактов: 1 такт - выборка опкода, 1 такт - выборка байта-операнда 0-й страницы, 2 такта - выборка абсолютного адреса из 0-й страницы, 1 такт - выборка аргумента по эффективному адресу (абсолютный + индекс). То есть одно обращение в последнем такте. * - если же индекс пересекает страницу (в эффективном адресе), то добавляется предпоследний такт с невалидным адресом - получаем 2 обращения.</p><br /><div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p>но sta:<br />FE46- 91 40 .. STA (40), Y<br />даёт два перехода</p></blockquote></div><p>В <a href="http://www.westerndesigncenter.com/wdc/documentation/w65c816s.pdf">этом пруфе</a> (стр. 43, 13 метод адресации) сказано, что &quot;STA (zp),Y&quot; - 6 тактов: 1 такт - выборка опкода, 1 такт - выборка байта-операнда 0-й страницы, 2 такта - выборка абсолютного адреса из 0-й страницы, 1 такт - <strong>невалидное чтение</strong> (потому что запись STA), 1 такт - выборка аргумента по эффективному адресу (абсолютный + индекс). Итого - два обращения в последних двух тактах.</p><br /><div class="quotebox"><cite>Voldemar0 пишет:</cite><blockquote><p>при этом :<br />3000- 8D 30 C0 STA C030<br />даёт один переход</p></blockquote></div><p>Абсолют уже показывал... При таком обращении к триггеру глюка не должно быть.</p><br /><p>PS. Как говорится, одна голова - хорошо, а Змей-Горыныч - лучше! ;)&nbsp; &quot;Адназначна!!!&quot; (C)</p>]]></description>
			<author><![CDATA[null@example.com (LeoN)]]></author>
			<pubDate>Sun, 07 Jan 2018 11:43:16 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=1543#p1543</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=1541#p1541</link>
			<description><![CDATA[<p>Т.е. конечно могу предположить что моя девятка глючит, но вроде обычно все работало. </p><p>Но что-то подсказывает что у семерки и девятки есть разница неочевидная. <br />Я не про те случаи как <a href="http://agatcomp.ru/Gamez/Shamus.shtml">Shamus</a>, там для звука таймер используется, соответственно, он вектора неправильно ставил для девятки. </p><p>А вот например <a href="http://agatcomp.ru/Gamez/StarBlazer.shtml">STAR BLAZER</a> , проверено на реалах - в девятке звук есть, а в семерке нет.</p>]]></description>
			<author><![CDATA[null@example.com (garnizon)]]></author>
			<pubDate>Sun, 07 Jan 2018 08:42:45 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=1541#p1541</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=1540#p1540</link>
			<description><![CDATA[<p>Звука нет и на семерке и на девятке (на реале проверялось), ну точнее именно звука раздвигающихся полосок. И вот почему было сделано записью и почему при таком раскладе он пропал и есть вопрос. <br />Т.е. в обсуждении в аське - мы почему-то пришли к мнению что Роман Бадер много где переделал на запись. <br />Но вот моя девятке, не смотря на теорию, молчит как партизан когда записью. Или где-то там чего-то шуршит - я сперва подумал что у соседей за стенкой агат :)</p><p>Теория с тем что просто приглушить звук хотелось - маловероятна. Ведь у него скорее всего Московская девятка была, а у них тумблер звука на задней стенке.</p><p>Ведь вопрос совсем не в пушере или какой-то там еще проге. Хотелось бы понять различаются ли в этом смысле агаты разных исполнений и заводов.</p>]]></description>
			<author><![CDATA[null@example.com (garnizon)]]></author>
			<pubDate>Sun, 07 Jan 2018 08:05:31 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=1540#p1540</guid>
		</item>
		<item>
			<title><![CDATA[Re: Pusher]]></title>
			<link>https://forum.agatcomp.ru//viewtopic.php?pid=1539#p1539</link>
			<description><![CDATA[<p>&gt; В вложении две версии PUSHERа, оба диска запускаются на любой системе (7 или 9).<br />И например на девятке в новой версии нет звука когда раздвигаются полоски, когда человечек ходит звук шагов есть. И еще есть звук когда ставишь все ящики на место, такой свистящий (а вот свист есть только в новой версии).</p><br /><p>Я вот че-то от этой фразы вовсе запутался: мне так помнится, что вопрос у тебя изначально (ещё когда мы в аське обсуждали) был о том, почему звук есть на семёрке, но нет на девятке.<br />Ну, допустим у меня склероз и вопрос задан как-то по другому.</p><p>Но вот тут (сейчас) не ясно: одна версия имеет звук , другая - нет. А почему не предположить, что его просто нет там (ну то есть в новой версии) ?</p>]]></description>
			<author><![CDATA[null@example.com (Voldemar0)]]></author>
			<pubDate>Sun, 07 Jan 2018 08:02:02 +0000</pubDate>
			<guid>https://forum.agatcomp.ru//viewtopic.php?pid=1539#p1539</guid>
		</item>
	</channel>
</rss>
