The Svin > Оригинальный AY имеет 3 генератора прямоугольных колебаний + генератор шума (16 уровней громкости) но что-то добавить - дело не долгое, это же программа. всего-то 250 строчек, правда на С++, но если нада, то перепесать на асм могу. Да там и лишнего много, что можно выкинуть . Всего-то генерируется меандр заданной частоты, а потом проигрывается через DirectSound
ну, очень подробно - лучше читать мануалы, и задавать вопросы конкретно, если что-то неясно, так как я сам 2 года лпт не касался, с тех пор как поставил 2000 винду, и еще с месяц точно касаться не буду, так как загружен. в общих чертах: лпт - это три банальных однобайтных регистра, два на вывод, один - на вход. на вывод - один регистр данных, один - управления, на ввод - регистр статуса. в регистрах управления и статуса используются не все биты, а регистр данных в современных машинах может также и вводить данные в режиме ЕСР. назначение его - подключение принтера, поэтому упрощенно печать можно описать следующим образом: считываем байт состояния и анализируем состояние принтера (т.е. биты) - включен ли он, готов ли, есть ли бумага, нет ли ошибки - если все нормально - записываем в регистр данных байт для отправки на принтер, например, код символа, и записываем байт в регистр управления, в котором установлен бит "строб" (помоему, в "0"; или в "1", а на выходе ноль - уже точно не помню), после этого в цикле читаем регистр статуса, контролируя бит "подтверждение". по его получению снимаем бит "строб" записью в регистр управления соотв. байта - передача байта на принтер произведена. а теперь о кофеварках - никто не запрещает нам писать в регистры лпт и читать их, при этом напряжения на выводах данных и управления будут соответствовать записанным байтам (в крайнем случае с инверсией), а байты, считанные с регистра статуса, будут соответствовать уровням на входе. на вход сигналы можно подавать землей - земля - 0, нет земли - 1. короткого замыкания лпт не боится (наверное , так устроены линии с открытым коллектором, а вот подачи потусторонни напряжений, выходящих за пределы 0-2.4 В (ТТЛ-уровни) - опасно! поиграться можно в досе, лучше если иметь папу ДБ-25: подпаять пару проводков - один - к выводу 2, другой - 24, присоединить к тестеру с установленным пределом 5-10 В и прямо в досе в дебаггере писать байты 0 и FF в порт 0378Н, или подпаяться ко входу, и коротить на землю - отпускать, читая параллельно байты из регистра 037х (не помню выводы и порт, нет под рукой спецификации - все дома, по-моему, порт статуса будет 037АН, но могу и ошибаться). можно замкнуть выход на вход, записывать и читать, смотреть, что получается, но это врядли полезно, хотя именно так сканируется матричная клава.
Мож это спасёт: http://borland.xportal.ru/forum/viewtopic.php?t=12937&sid=f46f3835d415aa3c8091ec68f811b713
0 от базы (например 378) можно использовать тоже на ввод, надо CR3 установить на ввод и можно получать в обратном направлении от 0го в комп. Это причём можно во всех трёх режимах, даже в самом простом SPP.
The Svin дело не в режиме, а в аппаратной части. не каждый будет играться с лпт портом в нормальной машине, а не все мультикарты позволяют читать обратно. это можно даже посмотреть у некоторых, какой буфер стоит на выходе - однонаправленый или двунаправленный. Spawn я вот вспомнил, что пользовался Джордейном, когда занимался этим - там отдельная глава об этом порте, но он у меня "бумажный".
вот уж философская истина: наличие хорошего старого тормозит освоение нового! из-за наличия "специалиста" не осваивал интенсивно лпт - не сраниться лпт с вв-шкой!, тем более, что через лпт я до сих пор печатаю (на роботроне 1988 года выпуска - все, гад, никак не поломается, тьфу-тьфу) я для опытов использую советский лпт-порт иса на ттлш элементах, и ты мне, кстати, подкинул идейку: а не переделать ли мне его в двунаправленный?