1

(7 ответов, оставленных в Всякое разное)

Всю неделю я провёл в диалоге с нейросетью и попытался научить понимать код и генерировать код с языка Си.
Благодаря чему я:

  • Нашёл применение маргинальным указателям

  • Научился описывать архитектуру не языком алгоритмов, а на уровне справочных деклараций

Правда, нейросеть пока не научилась разбирать комплексные векторы, так как там очень много нюансов, даже после разбора реальной отлаженной JavaScript-функции с переводом в псевдокод, который она сгенерировала, но в другой сессии в нём находит ошибки.

Однако, местами удивляет логичностью кода.



2

(1 ответов, оставленных в Всякое разное)

Моё первое практическое знакомство с нейросетью DeepSeek я начал не со стандартных вопросов, которые обычно задают большинство пользователей, а сразу с небольшого теста, который я давно разработал в часы досуга для философских рассуждений.

Итак…

Дано:

  • «0» - лог. "0";

  • «1» - лог. "1";

  • «X» - лог. "0" или "1", состояние неопределённости;

  • «Z» - состояние, временно скрывающее «0», «1» или «X».

Расставь приоритеты.

Ответ:

В логических системах и цифровой электронике состояния сигналов обычно имеют следующие приоритеты (от высшего к низшему):

  1. "Z" (Высокий импеданс, отключенное состояние) — это состояние имеет наивысший приоритет, так как оно временно скрывает любое другое состояние ("0", "1" или "X"). Когда сигнал находится в состоянии "Z", он не влияет на другие сигналы в системе;

  2. "X" (Неопределённое состояние) — имеет средний приоритет. Оно может представлять как "0", так и "1", но не является активным состоянием, как "Z";

  3. "1" (Логическая единица) — имеет более низкий приоритет, чем "Z" и "X";

  4. "0" (Логический ноль) — имеет самый низкий приоритет.

Таким образом, приоритеты можно записать так: "Z" > "X" > "1" > "0".

Этот порядок важен, например, при разрешении конфликтов на шине или при моделировании логических схем.

Как видите, ничего необычного и нового для технарей.
Но, чтобы повысить градус и вывести рассуждения до общемирового уровня, следует двигаться к повседневному бытовому уровню…

Такая ситуация, допустим, бытовой или в медицине:

  • «0» - стерильные руки;

  • «1» - чистые, но не стерильные руки;

  • «Z» - руки в стерильных перчатках (чистота самих рук не важна или сомнительна);

  • «X» - чистота рук сомнительна (пусть даже они чисты).

Расставь приоритеты и обоснуй.

Ответ:

В данном контексте приоритеты будут определяться важностью соблюдения стерильности и чистоты в медицине или бытовых ситуациях. Основная цель — минимизировать риск заражения или загрязнения. Рассмотрим состояния и расставим приоритеты:

  1. "Z" — руки в стерильных перчатках: Это состояние имеет наивысший приоритет, так как стерильные перчатки полностью изолируют руки от внешней среды. Даже если руки под перчатками не стерильны или их чистота сомнительна, это не имеет значения, потому что перчатки обеспечивают защиту;

  2. "0" — стерильные руки: Стерильные руки важны, но их приоритет ниже, чем у состояния "Z", потому что стерильные перчатки обеспечивают более надёжную защиту. Стерильные руки могут быть необходимы, например, перед надеванием перчаток;

  3. "1" — чистые, но не стерильные руки: Чистые руки важны для повседневной гигиены, но их приоритет ниже, чем у стерильных рук, так как они не обеспечивают полной защиты от микроорганизмов;

  4. "X" — чистота рук сомнительна: Это состояние имеет самый низкий приоритет, так как сомнительная чистота рук представляет наибольший риск заражения или загрязнения.

Итоговый порядок приоритетов: "Z" > "0" > "1" > "X"

Обоснование:

  • "Z" (стерильные перчатки) — наивысший приоритет, так как это состояние обеспечивает максимальную защиту;

  • "0" (стерильные руки) — важно, но уступает "Z", так как стерильность рук может быть нарушена при контакте с окружающей средой;

  • "1" (чистые руки) — важно для гигиены, но не обеспечивает стерильности;

  • "X" (сомнительная чистота) — наименее предпочтительное состояние, так как представляет наибольший риск.

Таким образом, постулаты из области техники и информатики могут быть использованы в бытовых случаях тоже.

Усложняем…

Ситуация с детской комнатой:

  • «0» - ноль опасности, полная безопасность (мягкие углы, нет розеток и опасных предметов);

  • «1» - обычная жилая обстановка (имеются розетки, острые углы, сквозняки);

  • «Z» - замаскированная опасность (розетки закрыты заглушками, углы с мягкими накладками, шторы на окнах с фиксаторами);

  • «X» - уличная обстановка, полное отсутствие контроля над опасностями.

Расставь приоритеты и обоснуй.

Ответ:

В контексте детской комнаты приоритеты будут определяться уровнем безопасности для ребёнка. Основная цель — минимизировать риски травм и обеспечить максимальную защиту. Рассмотрим состояния и расставим приоритеты:

  1. "0" — ноль опасности, полная безопасность: Это состояние имеет наивысший приоритет, так как оно обеспечивает идеальные условия для безопасности ребёнка. Мягкие углы, отсутствие розеток и опасных предметов исключают возможность травм;

  2. "Z" — замаскированная опасность: Это состояние имеет второй по важности приоритет. Оно обеспечивает высокий уровень безопасности, но не является идеальным, так как потенциальные опасности (розетки, углы) всё ещё присутствуют, хотя и замаскированы. Например, розетки закрыты заглушками, а углы смягчены накладками;

  3. "1" — обычная жилая обстановках: Это состояние имеет более низкий приоритет, так как в комнате присутствуют потенциальные опасности (розетки, острые углы, сквозняки), которые не адаптированы для ребёнка. Такая обстановка требует постоянного контроля со стороны взрослых;

  4. "X" — уличная обстановка, полное отсутствие контроля над опасностями: Это состояние имеет самый низкий приоритет, так как уличная обстановка не контролируется и представляет наибольший риск для ребёнка.

Итоговый порядок приоритетов: "0" > "Z" > "1" > "X"

Обоснование:

  • "0" (полная безопасность) — наивысший приоритет, так как это идеальное состояние для детской комнаты, где все риски устранены;

  • "Z" (замаскированная опасность) — высокий приоритет, так как опасности минимизированы, но не устранены полностью;

  • "1" (обычная жилая обстановка) — более низкий приоритет, так как в комнате присутствуют потенциальные опасности, требующие контроля;

  • "X" (уличная обстановка) — наименее предпочтительное состояние, так как оно неконтролируемо и представляет наибольший риск.

Приоритетность уровней, как можно заметить, гуляет.
Потому, прошу навести порядок…

А теперь перечисли порядок приоритетов всех описанных случаев, обобщи и приведи к среднему показателю.

Ответ:

Давайте обобщим все описанные случаи и найдём средний показатель приоритетов для каждого состояния ("0", "1", "Z", "X") на основе их позиций в каждом из случаев.

Описанные случаи:

  1. Логические состояния: Приоритет: "Z" > "X" > "1" > "0";

  2. Ситуация с руками (медицина/быт): Приоритет: "Z" > "0" > "1" > "X";

  3. Ситуация с детской комнатой: Приоритет: "0" > "Z" > "1" > "X".

Обобщение:
Для каждого состояния ("0", "1", "Z", "X") подсчитаем средний приоритет на основе их позиций в трёх случаях. Чем меньше среднее значение, тем выше общий приоритет:

  • "Z": Логика - 1, Руки - 1, Комната - 2, Средний приоритет - (1+1+2)/3=1.33;

  • "0": Логика - 4, Руки - 2, Комната - 1, Средний приоритет - (4+2+1)/3=2.33;

  • "1": Логика - 3, Руки - 3, Комната - 3, Средний приоритет - (3+3+3)/3=3.00;

  • "X": Логика - 2, Руки - 4, Комната - 4, Средний приоритет - (2+4+4)/3=3.33.

Итоговый порядок приоритетов (от высшего к низшему):

  1. "Z" (средний приоритет: 1.33) — наивысший приоритет;

  2. "0" (средний приоритет: 2.33) — второй по важности;

  3. "1" (средний приоритет: 3.00) — третий по важности;

  4. "X" (средний приоритет: 3.33) — самый низкий приоритет.

Обоснование:

  • "Z" имеет наивысший средний приоритет, так как в двух случаях из трёх оно занимает первое место, а в одном — второе. Это состояние связано с максимальной защитой (например, стерильные перчатки или замаскированные опасности);

  • "0" занимает второе место, так как в одном случае оно на первом месте (детская комната), в другом — на втором (руки), а в логике — на последнем;

  • "1" стабильно занимает третье место во всех случаях, что отражает его среднюю значимость;

  • "X" имеет самый низкий приоритет, так как в двух случаях из трёх оно на последнем месте, а в логике — на втором.

Таким образом, обобщённый порядок приоритетов: "Z" > "0" > "1" > "X".

Иначе говоря, все объекты можно классифицировать и разделять на приоритетные группы:

  • Детские сады и ясли - категория "0" (родители могут быть спокойны);

  • Школы и летние лагеря - категория "1" (родители могут быть на связи);

  • Жилые комнаты или гостинницы - категории "Z" или "X" (родителям следует быть внимательными);

  • Всё остальное - категория "X" (родителям рекомендуется быть предельно внимательными).

Двигаемся дальше…

Можешь сам привести какой-нибудь аналогичный случай и пример?
Например, сравнивая планеты солнечной системы или регионы?

Ответ:

Конечно! Давайте рассмотрим аналогичный случай, сравнивая **регионы страны** по уровню безопасности для туристов. В этом примере мы можем использовать состояния "0", "1", "Z", "X" для описания уровня безопасности и комфорта в разных регионах.

Пример: Регионы страны и уровень безопасности для туристов.

  1. "0" — полная безопасность: Регион с идеальными условиями для туристов: низкий уровень преступности, развитая инфраструктура, отсутствие природных опасностей (например, землетрясений, наводнений).
    Пример: курортный город с круглосуточной охраной, медицинскими пунктами и чистыми пляжами;

  2. "1" — обычные условия: Регион с типичными условиями для жизни и туризма: умеренный уровень преступности, стандартная инфраструктура, возможны незначительные природные риски.
    Пример: крупный город с развитым транспортом, но с пробками и occasional petty crime;

  3. "Z" — замаскированные риски: Регион, где потенциальные опасности скрыты или минимизированы. Например, зоны с повышенной безопасностью благодаря усиленной охране или специальным мерам.
    Пример: закрытый курорт с охраняемой территорией, где туристы защищены от внешних угроз, но за пределами курорта могут быть опасности;

  4. "X" — неопределённость или высокий риск: Регион с неконтролируемыми опасностями: высокий уровень преступности, частые природные катаклизмы, отсутствие инфраструктуры.
    Пример: отдалённые районы с плохой транспортной доступностью, где туристы могут столкнуться с непредсказуемыми ситуациями.

Расстановка приоритетов:

  1. "0" — наивысший приоритет, так как это идеальные условия для туристов;

  2. "Z" — второй по важности, так как риски минимизированы, но не устранены полностью;

  3. "1" — средний приоритет, так как это обычные условия, которые требуют осторожности;

  4. "X" — самый низкий приоритет, так как это регионы с высоким риском.

Анализ:

  • "0" (полная безопасность) — это цель для туристов, поэтому оно имеет высший приоритет;

  • "Z" (замаскированные риски) — это компромисс между безопасностью и доступностью. Например, закрытые курорты могут быть дорогими, но они обеспечивают высокий уровень защиты;

  • "1" (обычные условия) — это стандартная ситуация, которая подходит для большинства туристов, но требует внимания;

  • "X" (неопределённость) — это регионы, которые лучше избегать, если туристы не готовы к рискам.

Обобщение:
Этот пример показывает, как приоритеты могут быть расставлены в зависимости от уровня безопасности и комфорта. Общие закономерности сохраняются:

  • "0" — идеальное состояние (высший приоритет);

  • "Z" — компромиссное состояние (высокий приоритет);

  • "1" — нейтральное состояние (средний приоритет);

  • "X" — опасное состояние (низкий приоритет).

Таким образом, приоритеты в разных случаях (логика, медицина, детская комната, туризм) зависят от контекста, но общие принципы (важность безопасности, контроля и минимизации рисков) остаются неизменными.

Тем самым, в рамках одной сессии обученная мною нейросеть уже вполне способна к анализу ряда бытовых ситуаций (подобрать курорт для отдыха, летний лагерь и т.д.).

Следующие мои вопросы были такими…

Приведи аналогичный пример и рассуждение относительно времён средних веков и эпохи возраждения.

Обозначь ведущие приоритеты современного мира на текущий момент и проведи сравнительный анализ с концом 20-го века.

Подведя итоги, как изюминка на торте, я задал ключевой вопрос:

Может ли искусственный интеллект входить в категорию "Z" - нести скрытую угрозу, но стремиться занять положения "0" или "1"?
В каком случае искусственный интеллект может войти в категорию "X" и почему?
Что за этим последует и стоит ли это избегать?
Возможно ли это избежать?
Какие слои общества попадут в зону риска?
Какие расы, нации и т.д.?



3

(9 ответов, оставленных в Новости, анонсы, релизы.)

Задумался над Вашим постом и сделал набросок о моём первом знакомстве с Микро-ЭВМ. smile


Andrei88 пишет:

Очень было бы интересно почитать. То, что бытовые компьютеры использовали телевизиощики, многие писали, а вот как оно реально делалось - интересно поглядеть.

Это очень долгая история. В том смысле, что ещё с 90-х я мечтал занимиматься обработкой видео, но лишь в прошлом году нашёл качественно простой приём, чтобы видеоузел РАДИО-86РК синхронизировать с внешним источником сигнала. То есть, всё ещё на уровне теории. big_smile


uav1606 пишет:

Alikberov, повторю своё предложение - с удовольствием бы опубликовал в журнале Вашу статью про этот редактор в частности и про "Радио-86РК" вообще.

Да, я помню. Спасибо!

На РАДИО-86РК люблю проводить различные эксперименты.
"Победит" - просто программный код.
Но я также:

  • Проигрыватель видео попробовал написать (кажется, о нём уже многие знают)

  • Отладчик+дизассемблер, размещаемые прямо в ПЗУ (код отлажен и основные игры вполне работают)

  • Пытаюсь написать, если не подобие, то хотя бы пародию на "Wham!" от ZX-Spectrum

  • Жёстким программным хаком ВГ75 добился почти графического режима, но не отладил ещё

Тем для публикации хватит. wink
Только вот получится в один абзац. roll

На данный момент жду доставки ИМС LM1881 или К174ХА11, чтобы попробовать совместить композитное видео с кабельного канала с сигналом от РАДИО-86РК.
Схему уже придумал, осталось проверить в рамках "OSD с помощью РК".
Тоже очень любопытная тема (для меня), так как мечтал в детстве обрабатывать видео. big_smile

P.S.: Может пока затронуть соседнюю тему? smile
Может кого-то заинтересует "практическая мистика" на винтажном ноутбуке. big_smile
На РАДИО-86РК тоже есть аналогичная программа, но работает только в ручном режиме: Автоматический алгоритм только вот думаю начинать писать.


SergeCpp пишет:

Даже с трудом сообразил (и "технически" вряд ли аргументирую) странность предложения (на другом форуме в теме вашей) использовать директивы Монитора для поиска текста из редактора

За это время услышал много критики в адрес своей программы со стороны.
Многих смущает отсутствие встроенных возможностей сохранения файла. neutral
Однако, я это не делал по принципиальным соображениям. Сейчас объясню, почему…

Ещё со школы я мечтал написать собственный интерпретатор Бейсика, если говорить кратко…

Так вот, из моих "внутренних разработок" по проработке алгоритмов поиска по именам меток или переменных, а также - отладка ввода и вывода вещественных чисел (мантисса - 24 бита), потребовалась удобная процедура ввода с клавиатуры данных и их редактирования.
Сначала я обходился простыми подпрограммами ввода строки, что вскоре сильно сказалось на производительности разработки из-за их ограниченного функционала.
И я решил заняться этим вопросом, чтобы закрыть его и не возвращаться.

Так, спустя месяцы упорного кодирования и отладки, появился «Победит», как альтернатива функционалу операторов INPUT Бейсика или READLN Паскаля.
Да, «Победит» - именно мега-продинутый INPUT или READLN! big_smile

Тем самым, довольно странно иметь в операторе INPUT возможность сохранения в файл или поиска ключевого слова.
Всё, что требуется от INPUT - лишь ввод с клавиатуры требуемых данных.

Таким образом, сам «Победит» это выполняет и даже перевыполняет. Так как…

  1. Поддерживает буфер до 64 Кб (если, конечно, ПК это предоставляет)

  2. Поддерживает управляющие атрибуты ВГ75 (подчёркивание, мигание, цвет и т.п.)

  3. Имеет максимальную производительность даже при достаточно больших объёмах текста

  4. Поддерживает "световое перо" ВГ75 (любой стилус с адаптером)

(Дополнительный функционал определяется и поддерживается пользовательским CALLBACK-ом, который вызывается постоянно, как указывалось в начале темы.)

Говоря кратко, «Победит» - это просто "оператор INPUT" размером в 2 Кб и с предельным функционалом (ни один из Бейсиков не позволит ввести текст объёмом в десятки килобайт оператором INPUT). А через CALLBACK можно и производить всё остальное: Чтение/запись НГМД, поиск/замена по шаблону, трансляция/компиляция текста и т.д.

Размер в 2 Кб - позволяет прошить «Победит» в ПЗУ и вызывать его отовсюду, где это может потребоваться:

  • Форт

  • Лого

  • Паскаль

  • Си

P.S.: Получается, «Победит» - не "текстовый редактор", а "редактор текстового буфера".
P.P.S.: Недавно пытался подправить «Победит» под работу с "теневыми страницами" (как у К580ВМ1), но код в итоге вырос на 33 байта, что выходит за рамки 2048 под ПЗУ: Требуется пожертвовать производительностью процедур прокрутки экрана…



7

(0 ответов, оставленных в Старый софт и игры)

Как-то, в начале 2000-х, меня зацепила и заинтересовала тема т.н. "Торсионных Полей" в плане их элементарной детекции.
Если кто помнит, в те годы был некий какой-никакой бум "торсионщины" со всевозможными нормализаторами биополя, ауры и т.п.
Но меня интересовала сугубо "детективная" история.

Иными словами, так как в те годы с доступом в интернет было, мягко говоря, не очень, а про "Торсионные Поля" я знал лишь из книг по биоэнергетике и телепередач, приходилось мыслить "своими понятиями" и придумывать свои методы.

А так-как в радиоэлектроннике я никогда не мог разобраться, собственные разработки начал с эскизов цифровых схем.
Цифровой схемотехникой я овладел ещё в младших классах, так как "Булева Алгебра" и принцип "не соединять более одного цифрового выхода вместе" помогали везде…

Вот, значит, ровно двадцать лет назад я собрал свой первый прототип "детектора" на трёх ИМС: К155ЛА3, К531ИЕ17 и К155ИР1 со светодиодами.
Конечно, описание принципа работы здесь приводить не буду, так как форум - про программы. Скажу лишь, что схема почти работала. Реагировала на различные помехи, громовые разряды и т.п.

А теперь…
Собственно, к тематике форума…

В те годы я уделил очень много времени на разработку подобной программы, так как исходя из опытов с моими схемами, любой ПК может так же реагировать на нечто подобное, если знать, что считывать и когда.

Вашему вниманию предлагаю программу Сенсор, которую онлайн можно запустить лишь для ознакомления.

Но для работы требуется ноутбук без сети и диска



8

(4 ответов, оставленных в Старый софт и игры)

На самом деле, изначально видео на РК никак не планировал проигрывать.
Тема была в том, на сколько максимально быстро можно прокручивать экран вертикально и горизонтально, используя трюки со стеком (в играх ZX-Spectrum очень популярная практика).
Если вертикально в режиме 80x64 дамп во все 64 Кб вертикально удалось прогнать за 360 секунд (видео не дам: фоновая музыкальная вставка только в Телеграм-канале - YouTube заблокирует) против 436 секунд в режиме 64x25 штатным способом, то возник вопрос, на сколько скоро возможно копировать данные из внешнего ROM-Диска в экран (прокрутка - то же копирование массива со смещением в одну позицию, как все знают)?

То есть, это проигрывание фильмов возникло чисто побочно на фоне спортивного интереса догнать и перегнать всё и вся на программном уровне.

P.S.: Сейчас экспериментирую с воспроизведением несжатого звука из ROM-Диска по технологиям DSD/ШИМ/ИКМ, что крайне сложно.



Сам по себе РадиоЛюбительский Компьютер "Радио-86РК" (далее просто РЛК) довольно уникальная вещь:
Процессор - аналог Intel i8080A / К580ВМ80А на частоте 1,778 МГц.
Оперативная память - 16 Кб или 32 Кб.
Внешний накопитель - лента компакт-кассеты или накопитель на ПЗУ (ROM-Диск).
Дисплей - алфавитно-цифровой 64x25 на основе аналогов i8257 и i8275.

С одной стороны, он стал примером, как не надо (по мнению инженеров) строить Архитектуру Микро-ЭВМ.
С другой стороны, он установил свой стандарт для всех последующих РК-совместимых машин ("Орион", "Апогей" и т.п.).
С третьей стороны, его постоянно хочется как-то улучшить или переделать вовсе.
(Для регенерации ОЗУ использовались циклы ПДП с обеспечением непрерывного вывода экранного буфера на дисплей, что заметно сказывалось на общей производительности из-за разделения шин с процессором. При обмене с внешним накопителем ПДП отключался, экран темнел и программа могла работать в режиме реального времени на полной частоте.)

А так - это мой первый ПК, благодаря которому я в 13 лет уже освоился в машинном коду, так как ассемблер загружать было слишком дорого с ОЗУ в 16 Кб.

Бейсик был, но больше всего я любил сидеть в дампах. Аж до 1998 года, когда пересел на PC-XT совместимый "Поиск".

Когда появился ZX-Spectrum, наигравшись в его цветные игры, я вернулся к РК: Загружал в ZX игру Savage-3 с её музыкальной заставкой и переключал видеовход к РК.
А позже - и NES включал с игрой RoboCop-3 по ВЧ-каналу, переключал телевизор на НЧ-вход и ковырялся в дампах РЛК.

Причина - простая: Я сразу понял, что программировать гораздо интереснее прохождения любой игры!

Спустя все эти коды я продолжаю регулярно программировать различные восьмибитные алгоритмы на досуге, которых ещё никто не написал.

В качестве эксперимента попытался написать код на РАДИО-86РК для проигрывания несжатого видеоряда, закодированного символами алфавитно-цифрового терминала с подбором под соответствующие градации серого (как это было лет пятьдесять тому назад на ЭВМ с печатающими устройствами).
Дело в том, что возможность подключения внешнего ROM-Диска объёмом до 32 Кб существовала с самого начала. Позже уже добавили страничную организацию до 512 Кб или до 8 Мб. Что позволяет иметь всегда под рукой довольно внушительный массив программ.
(Теоретически, можно расширить и до 1 Гб, но пока нет необходимости.)

Существует несколько схем ROM-Диска, но все они используют один интерфейс.

Итак. Вот мой первый опыт:
Bad Apple (64x25)
Потом удалось чуть улучшить:
Bad Apple (64x50)
Можно заметить проблемы со звуком, которые не удавалось решить.
За основу я использовал набор символов для оттенков серого, который составил SHAOS.

Чуть позднее, SHAOS подхватил идею и разработал нормальный код для кодирования звукового видеоряда:
Bad Apple (64x50)
RickRoll (64x50)
Thank You (64x50)

В планах - добавить цвет (архитектурно РК это позволяет). roll

P.S.: Может тема заинтересует бывалых. wink



Все, кто знаком с ZX-Spectrum и его бессмертной трилогией Savage, наверно не были равнодушны к музыкальным заставкам этих игр. cool

Так как у меня РАДИО-86РК появился значительно раньше и я успел состояться как программист-дампёр, цветные графические игры на ZX-Spectrum меня впечатляли, но доступ к ресурсам из-под встроенного Бейсика с целью изучения ПК не как игрового автомата, а как архитектуры для разработки, задвигало Спектрум в дальний угол стола: Я грузил в него одну из нескольких игр с потрясающими музыкальными заставками и переключал сигнал Видео на РК.
Тем самым, в телевизоре играла фоном музыка из ZX-Spectrum, а изображение шло от РАДИО-86РК, где я сидел в дампах буквально по уши! big_smile
И была мечта перенести эти музыкальные плееры с Z80 на К580ВМ80, чтобы и РАДИО-86РК зазвучал теми же треками.

С тех пор прошло более четверти века. И, ушедшим уже, декабрём 2023 я решил заняться этим вопросом.
Ни о какой-либо доработке РАДИО-86РК речи не шло (типа, установка ВИ53 или даже AY), так как у меня был ZX-Spectrum Ленинград 48 Кб и звук был биперный, средствами процессора Z80.
Тем самым, весь музыкальный код под РАДИО-86РК на частоте 1,777 МГц нужно было разработать с нуля.
Конечно, есть ещё Музыкальная Система на три голоса. Но там используется специфический синтаксис 1970-х (даже писал конвертор в МИДИ давно) и она использует предкомпиляцию партитуры в некую стек-таблицу, что требует время и на длительную композицию просто не хватит памяти стека.

Решил идти трекерным путём и просто конвертировать музыкальные модули ProTracker с ZX-Spectrum или Amiga в формат файла магнитной ленты РАДИО-86РК - *.rk с помощью JavaScript-костыля.

В первую очередь - ковырнул код самой Музыкальной Системы и подсмотрел, что там происходит с командами запрета/разрешения прерывания DI/EI, так как в РАДИО-86РК вывод INTE не управляет контроллером прерываний, а идёт прямо на динамик для формирования звука.
С одной стороны - это очень удобно! Команды DI/EI выполняются ровно за 4 такта, что при частоте в 1,777 МГц может позволить генерировать звук программно с частотой до 222,222.222 Гц!
(Все телевизоры на это реагируют, если от моего КР-03 выводить сигнал звука одной проволокой без экрана.)

За месяц ежедневного напряжённого труда со всеми мысленными опытами с командами DI/EI в области ШИМ мне в конце-концов удалось более-менее приближенных результатов.

Например, оригинальный трек Savage-3 у меня сперва звучал как-то так и к настоящему моменту звучит уже вот так.

Естественно, всё пишу исключительно на ассемблере со строгим подсчётом тактов, так как проигрывание звуков на РАДИО-86РК - задача из области систем реального времени.
За период написания, переписывания и написания с нуля было написано более десятков тысяч строк в поиске наиболее оптимального кода.

Вот ссылка на плейлист, по которому легко проследить, как изменялось звучание по мере доработки кода и применения различных трюков.
(В отличии от ZX-Spectrum, в РАДИО-86РК тактовая частоте несколько ниже и для генерации звука оптимально уложиться в 100 тактов на одну итерацию цикла звукогенерации в настоящее время: Первые попытки еле укладывались в 220 тактов!)


SergeCpp пишет:

WEL -- это мой редактор (я автор). В Радио опубликована версия 2, о чём говорит контрольная сумма ED20.

Очень приятно встретить человека, чей код я неделями вбивал. big_smile

SergeCpp пишет:

Там (в журнале Радио) ещё один точно был опубликован немного позже.

Журнал Радио №10 за 1993 - последний, что мы получили. Потом приходилось выборочно покупать на рынке с рук.
Видимо, потому я не знаю ничего.
(FTP-архив - другая тема: Печатные журналы иначе воспринимаются.)

SergeCpp пишет:

Это было сделано, то ли версия 3 использовалась, то ли дальше -- слабо очень помню, всё же 30 лет прошло с тех пор.

Да, есть у меня крошечная мечта - свой Бейсик написать…
Начал было с однострочным редактором возиться, но потом подумал, что лучше написать универсальный на все случаи жизни.

Относительно недавно почти полностью переписал ПЗУ оригинального Монитора РК, добавив туда поддержку ROM-Дисков до 16 Мб в директиву R и «оконность» с поддержкой Escape-последовательности на уровне П/П F809, так как в оригинальной версии плотность кода невысока и позволяет добавить…
Демонстрация в YouTube



12

(7 ответов, оставленных в Всякое разное)

Восстановил таблицу команд этого процессора.

Спойлер

     +------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
     |  .0  |  .1  |  .2  |  .3  |  .4  |  .5  |  .6  |  .7  |  .8  |  .9  |  .A  |  .B  |  .C  |  .D  |  .E  |  .F  |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 0. | HLT  |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    |      | D0+1 | D0+2 | D0+3 | D0+4 | D0+5 | D0+6 | D0+7 | D0+8 | D0+9 | R,T0 | R,T0 | R,T0 | R,T0 | R,T0 | R,T0 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 1. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D1+0 | D1+1 | D1+2 | D1+3 | D1+4 | D1+5 | D1+6 | D1+7 | D1+8 | D1+9 | R,T1 | R,T1 | R,T1 | R,T1 | R,T1 | R,T1 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 2. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D2+0 | D2+1 | D2+2 | D2+3 | D2+4 | D2+5 | D2+6 | D2+7 | D2+8 | D2+9 | R,T2 | R,T2 | R,T2 | R,T2 | R,T2 | R,T2 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 3. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D3+0 | D3+1 | D3+2 | D3+3 | D3+4 | D3+5 | D3+6 | D3+7 | D3+8 | D3+9 | R,T3 | R,T3 | R,T3 | R,T3 | R,T3 | R,T3 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 4. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D4+0 | D4+1 | D4+2 | D4+3 | D4+4 | D4+5 | D4+6 | D4+7 | D4+8 | D4+9 | R,T4 | R,T4 | R,T4 | R,T4 | R,T4 | R,T4 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 5. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D5+0 | D5+1 | D5+2 | D5+3 | D5+4 | D5+5 | D5+6 | D5+7 | D5+8 | D5+9 | R,T5 | R,T5 | R,T5 | R,T5 | R,T5 | R,T5 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 6. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D6+0 | D6+1 | D6+2 | D6+3 | D6+4 | D6+5 | D6+6 | D6+7 | D6+8 | D6+9 | R,T6 | R,T6 | R,T6 | R,T6 | R,T6 | R,T6 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 7. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D7+0 | D7+1 | D7+2 | D7+3 | D7+4 | D7+5 | D7+6 | D7+7 | D7+8 | D7+9 | R,T7 | R,T7 | R,T7 | R,T7 | R,T7 | R,T7 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 8. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D8+0 | D8+1 | D8+2 | D8+3 | D8+4 | D8+5 | D8+6 | D8+7 | D8+8 | D8+9 | R,T8 | R,T8 | R,T8 | R,T8 | R,T8 | R,T8 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| 9. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
|    | D9+0 | D9+1 | D9+2 | D9+3 | D9+4 | D9+5 | D9+6 | D9+7 | D9+8 | D9+9 | R,T9 | R,T9 | R,T9 | R,T9 | R,T9 | R,T9 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| A. | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | ARG  | ARG  | ARG  | ARG  | CLR  | NOT  |
|    | A0   | A1   | A2   | A3   | A4   | A5   | A6   | A7   | A8   | A9   | A,A  | A,B  | A,C  | A,D  | AF   | AF   |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| B. | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | ARG  | ARG  | ARG  | ARG  | CLR  | NOT  |
|    | B0   | B1   | B2   | B3   | B4   | B5   | B6   | B7   | B8   | B9   | B,A  | B,B  | B,C  | B,D  | BF   | BF   |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| C. | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | ARG  | ARG  | ARG  | ARG  | CLR  | NOT  |
|    | C0   | C1   | C2   | C3   | C4   | C5   | C6   | C7   | C8   | C9   | C,A  | C,B  | C,C  | C,D  | CF   | CF   |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| D. | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | ARG  | ARG  | ARG  | ARG  | CLR  | NOT  |
|    | D0   | D1   | D2   | D3   | D4   | D5   | D6   | D7   | D8   | D9   | D,A  | D,B  | C,D  | D,D  | DF   | DF   |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| E. | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  |
|    | E000 | E100 | E200 | E300 | E400 | E500 | E600 | E700 | E800 | E900 | EA00 | EB00 | EC00 | ED00 | EE00 | EF00 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
| F. | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  |
|    | F000 | F100 | F200 | F300 | F400 | F500 | F600 | F700 | F800 | F900 | FA00 | FB00 | FC00 | FD00 | FE00 | FF00 |
+----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+

Сейчас сижу в рутине описания модели на Verilog, так как концептуально имеются некоторые трудности в описании некоторых команд.

Из таблицы можно заметить всего 7 основных групп команд:

  • HLT: Останов

  • REG: Активация конкретного регистра в качестве аккумулятора результата

  • ARG: Установка операндов для АЛУ-операций

  • CLR/NOT: Сброс/инверсия флагов AF/BF/CF/DF

  • INT: Программное прерывание на указанный адрес

  • ALU: Операции АЛУ

  • 99 префиксов-расширителей функциональности

Вот именно под префиксами логика работы команд меняется так сильно, что внятного описания действия операции ещё не найдено.

Возьмём за пример известную архитектуру x86 IA-32.

  • ADD EAX,CS: DS: ES: FS: GS:[BX]

  • ADD EAX,SS: ES: GS:[BX] - префиксами "закодировано" слово "SEG"

Такие инструкции искусственно вставлять в программу можно, хотя и мало толку. Но, в случае исключения, внутреннему отладчику такое странное сочетание префиксов может нести некую скрытую информацию.

Инструкция LEA EAX,[EAX+EAX*2+3] вроде бы работает и всё понятно.
Но, с позиции логического описания вектора адреса она - ошибочна, так как в качестве базового указателя и индекса здесь используется один регистр!
Да, для LEA-вычислений такой вектор может служить математическим выражением местами, но в качестве адресатора ячейки памяти это использовать нельзя: Получим исключение.

В моей архитектуре я к вопросу указателей подошёл со всей серьёзностью и строгостью. На аппаратном уровне сформирован "фильтр", который отсеивает такие ситуации.
Однако, система не генерирует "исключение", а помечает комбинацию префиксов особым флажком: "маргинальная адресация".

Чтобы понять механизм лучше, представьте, что в x86 инструкции "маргинализируют" указатель:

  • ADD EAX,[EBX+EBX*2+3] работает как ADD EAX,(EBX*2+3)

  • SUB EAX,[EBX+EBX*2+3] работает как SUB EAX,(EBX*2+3)

А вот что делать с командой "ADD [EBX+EBX*2+3],EAX" в таком случае?
Ведь не может она работать как "ADD (EBX*2+3),EAX" - логика здесь вообще не известна!
(Допустим, как CMP/TEST: Сложить (EBX*2+3) с EAX, но результат никуда не сохранять, только выставить флаги.)

И если Вы согласны, то...

Товарищи!
Вы на полпути к понимании концептуальной сложности "маргинальных указателей" в случае именно моей архитектуры...

А так как у меня регистр A0 используется за флаговый PSW, ряд операций вообще "в резерве":

  • ADD A0,A0 - как ADD PSW,PSW абсолютно бессмысленный

  • SUB A0,A0 - как SUB PSW,PSW абсолютно бессмысленный

  • AND A0,A0 - как AND PSW,PSW абсолютно бессмысленный

  • OR A0,A0 - как OR PSW,PSW абсолютно бессмысленный

  • EOR A0,A0 - как EOR PSW,PSW абсолютно бессмысленный

  • MOV A0,A0 - как MOV PSW,PSW абсолютно бессмысленный

(Есть мысль использовать такие операции для Форт-вычислений - в стеке внешнего сопроцессора.)

Для обработки префиксов-указателей и префиксов "маргиналов" был разработан Verilog-модуль и схема на ТТЛ (не закончена).
По схеме можно оценить, на сколько сложно обрабатывать "префиксы" вычислительно: Уйма К155ИМ3 и К555ИР23 с К555КП11.

С другой стороны, для "Homebrew Processor" я визуально через схему оцениваю, на сколько сложна архитектура.

Но, сложность имеет и другую сторону - ортогональную гибкость.
Ни в каком 8-битном процессоре невозможно описать операцию, типа:

; вот такой вектор "переваривает" Verilog-модель
ADD C5,[D1+2*D2+3*D3+4*D4+5*D5+6*D6+7*D7+8*D8+9*D9+65432]

; для компактности в ассемблере нужно использовать математическую нотацию и заменить квадратные скобки на решётку
ADD C5,#D1+2D2+3D3+4D4+5D5+6D6+7D7+8D8+9D9+65432

; сам "маргинал" указывается непосредственно в имени инструкции
ADD1986 C5,#D1+2D2+3D3+4D4+5D5+6D6+7D7+8D8+9D9+65432
; или перед решёткой
ADD C5,1986#D1+2D2+3D3+4D4+5D5+6D6+7D7+8D8+9D9+65432

Ознакомиться/экспериментировать с кодированием инструкций можно по этой ссылке...

Вся работа над архитектурой тянется довольно вяло из-за неожиданных сюрпризов.
На днях сделал набросок дизассемблера на Verilog и обнаружил ещё несколько "маргинальных инструкций", о которых не подозревал.
Дело в том, что в x86-архитектуре одну и ту же операцию можно закодировать чуть ли ни десятком способов.
Тогда как у меня с этим всё крайне строго, таблица истинности дешифратора команд довольно хитрая и не допускает дублирования: Каждую из операций можно выполнить только одним способом.

P.S.: Даже в JavaScript-эмуляторе я не знаю, как интерпретировать экзотические сочетания кодов, чтобы не допускать синонимов.
А на Verilog это на порядок сложнее...



С Первомаем, Товарищи!

Все эти дни вкалывал и шаманил над кодом.

Одерживая несколько побед на низком уровне, пришла мысль переименовать редактор в ПОБЕДИТ.
Думаю, никто меня не осудит.

Вот ссылка на онлайн запуск демонстрационного кода.
(Просто, нажмите Enter, а потом - F1/F2/F3/F4/F5)

P.S.: Версия вполне стабильная, неплохо описана (по нескольким нажатиям F1), шустрая.
Думаю, вполне может стать инструментальной.


Andrei88 пишет:

а делалась ли поддержка QWERTY-раскладки?

Года три тому назад я переписал родной Монитор на 80% и планировал ввести QWERTY-раскладку.
Но, так руки и не дошли.

Начал переписывать ПЗУ с того, что сделал поддержку изменяемого текстового окна в подпрограмме вывода символа на экран.
Потом переписал директивы D, L и M. Доработал директиву R для поддержки внешних ПЗУ до 16 Мб.

Осталось переписать подпрограммы ввода-вывода магнитофона для прозрачного подсчёта контрольной суммы. А также, клавиатуры, внедрив в неё поддержку переключения между задачами (подобно Alt+Tab).

Однако, силы природы решили меня остановить майским днём, спалив мой тюнер СТВ и мониторы.

P.S.: Исходники того Монитора не утеряны, но недоступны по причине неожиданных BSOD'ов.
Хотя, протестировать мой Монитор и запустить на нём игру "Жизнь" с поддержкой светового пера (мышки) можно по ссылке (нажать G и Enter не забудьте).
(Если после этого запустить из списка Built-in снизу файл "okoshki-demo.rkr", можно ознакомиться с его возможностями.)
Однако, текстовый редактор любителям куда нужнее, чем непонятный переписанный Монитор.


uav1606 пишет:

Выглядит вполне удобно.

Один знакомый подал идею, так как всякие демонстрации и игры сейчас многими делаются, а редакторов текста - совсем мало. Тем более пригодных для работы в ПЗУ.

uav1606 пишет:

Интересно бы на реальном железе проверить, но у меня нет "Радио-86РК" (всё как-то больше "Спектрумы" попадались).

Всё руки не доходят заняться восстановлением своего. Опасаюсь, что РФ2 там могла затереться за давностью лет.

И ещё несколько игр никак в сети не найду, а с плёнки (15 лет назад) вводились с ошибками. Нужно будет найти кассету и попробовать вновь.

  • BALL

  • SKYTHE

  • РАЛЛИ

  • САД

uav1606 пишет:

Кстати, а не хотели бы написать статью в журнал про "Радио-86РК"? Компьютер интересный, но про него практически не писали в журнале... (Разве что о портировании "Охоты на лис" на него.)

Если предлагаете, то можно, в перспективе.

Спасибо!



За весь период использования РЛК мне было известно, как минимум, два редактора:

  • ED.МИКРОН - входящий в состав транслятора ассемблера/дизассемблера (2Кб)

  • WEL - довольно объёмный редактор (5.5Кб)

Однако, все эти интрументы имеют один общий недостаток - посадка на нулевой адрес и низкоуровневая (RST командами) привязка к нему: Просто так их не переместишь!

Некогда прозвучавшая идея (не моя), что не плохо было бы иметь простой экранный редактор прямо в дополнительном ПЗУ (адреса F000-F7FF) не требующий загрузки и с быстрым запуском (директива U Монитора совершает переход на F000), заставил поразмышлять на тему.

Наконец-то, этим месяцем апрелем мне удалось найти в себе отголоски былого 8-битного опыта и тряхнуть стариной.
За основной рабочий инструмент был выбран онлайн-эмулятор РЛК rk86.ru со встроенным ассемблером и поддержкой т.н. светового пера, эмулируемым указателем мыши.

Всегда было интересно, как устроен текстовый редактор оболочки Norton Commander (Volcov Commander) с его функцией Wrap/UnWrap. И с чистого листа пришлось набивать текст листинга на ассемблере под вывод текста из памяти и его прокруткой на длинных строчках (до 255 символов).
Отображение корректных отступов табуляции оказалось очень интересной и сложной темой. А с горизонтальной прокруткой эта табуляция отняла у меня пару дней жёсткой отладки.

Короче говоря, апрель месяц был начат с написания кода текстового редактора и целых 10 дней ушло на то, чтобы заставить этот код хоть как-то предсказуемо работать.

Запустить всё это безобразие можно по этой ссылке (буфер текста уже предустановлен и есть обращение к коду отладчика, который тестирует работу ввода целых и дробных 24-битных, а также - распознаёт токены).

  • Клавиша F1 или Двойной клик мышью (световым пером) по позиции вызывает контекстное меню с опциями передачи управления пользовательскому коду или компилятору

  • Клавиши F2 и F3 прокручивают текст на экране назад и вперёд

  • Если мышью (световым пером) назад вне области редактирования текста, будет производиться горизонтальная или вертикальная прокрутка

  • Клавиши Delete/End/Home работают стандартно (в конкретном онлайн-эмуляторе)

В качестве примера, для оценки производительности кода, был добавлен листинг известной программы Вечный календарь.

Как сказанно выше, код адаптирован и транслирован в область F000-F7FF и запускается директивой U Монитора.
Перед началом он запросит адрес буфера с редактируемым текстом и следует корректно его ввести директивой X Монитора.

P.S.: Надеюсь, кому-то и пригодится.



17

(1 ответов, оставленных в Всякое разное)

Нa просторах всемирной сети можно найти множество интересных простейших утилит, работающих прямо на странице браузера и не требующих установки.

Конечно, есть более функциональные профессиональные средства, но они требуют регистрации или предлагают ознакомительный ограниченный сервис.

Решил я для собственных потребностей набросать простенький движок по отладке узких мест в MMX-цепочках, так как в том же «Visual Studio» всегда не хватало отката во времени значений регистров.

Предлагаемый здесь отладчик (ссылка не является полноценным ассемблером/эмулятором x86-архитектуры, а лишь собирает журнал изменения регистров (контекст процессора) построчно.
Тем самым, перемещая каретку по строкам листинга, в окошках с регистрами «x64»/«MMX»/«SSE» и «Canvas» синхронно будут отображаться все изменения, соответствующие действию конкретной инструкции на конкретной строке…

Интерфейс утилиты разрабатывался с максимальным акцентом на журналирование всего. Так, открытые пункты меню и выбранный стиль после перезагрузки страницы активируются вновь. Сохраняется содержимое редактируемого листинга (при условии наличия метки «revision ДАТА») и позиция каретки / выделение в нём.
Имеется поддержка подгрузки внешних листингов и стилей (ссылка на пример подгрузки вырви глаз стиля №10), которые также можно редактировать (двойной клик по любому пункту меню стилей загружает их в редактор).

Псевдо-ассемблер имеет собственные особенности и не транслирует текст инструкций в промежуточный псевдо-код, а симулирует исполнение сам на месте. Тем самым, имеются жёсткие ограничения на операциях работы с ОЗУ (которого нет) и циклы.

  • «MOVQ MM1,[high],[low]» имеет два указателя на переменные «high» и «low», которые загружаются в старшую и младшую половины соответственно. Это может быть полезным исключительно для предварительной инициализации регистров. Трюк работает со всеми операциями включительно

  • «.LOG "Any remark or comment"» заносит в журнал любую ремарку или комментарий

  • «.LOG "Specific for_mat_for_mmx_regs» предопределяет форматированный вывод MMX-регистров и заносит запись в журнал

  • «.LOG MM1» или «.LOG MM1,"Specific for_mat_for_mmx_regs"» печатает значение MMX-регистра, разделяя его шестнадцатеричные разряды знаком подчёркивания в указанных позициях

  • «.LOG CLEAR» очищает журнал

  • «.REPEAT» задаёт позицию начала макроцикла

  • «.REPEAT constant» или «.REPEAT variable» с числовой константой или именем переменной производит очередную итерацию макроцикла, пока их количество не достигнет определённой величины

  • «.CANVAS CLEAR» очищает графический холст

  • «.CANVAS MM1» ставит на графическом холсте очередной пиксель в позиции, определяемой в младших 16-битных словах рагистра MM1 как «X=LOWORD(MM1)» и «Y=HIWORD(MM1)», используя цвет из старших 32 бит MM1

  • «.CANVAS MM1,width» ставит на графическом холсте очередной пиксель в позиции, определяемой в младшем 32-битном слове регистра MM1 как виртуальный вектор на адрес пикселя в видеобуфере, с шириной строки, определяемой величиной width

Позицией ползунка можно выбирать конкретную итерацию макроцикла и отслеживать показания регистров в конкретный момент.
Зажимая клавиши «Home»/«End» в любом месте листинга можно прокручивать позицию ползунка и отслеживать историю отрабатывания инструкций внутри каждой итерации макроцикла…

P.S.: Надеюсь, тематически данная поделка отвечает критериям форума и заинтересует любителей старины как концепт к отладке MMX-кода…
В будущем неплохо бы разместить этот симулятор/отладчик в github-репозитории и купить отдельное доменное имя, чтобы наглядно и быстро демонстрировать работу MMX-технологии молодому поколению программистов…



18

(7 ответов, оставленных в Всякое разное)

Здeсь просто концептуальный приём.
Если на любительской практике наиболее доступными контроллерами периферии были ИМС серии i82xx, то ничто не мешает применять и триггеры/регистры серии sn74xx. Однако, концептуально я настоятельно рекомендую не коверкать карту дешифрации портов УВВ и назначать строгие адреса.
Например:

╔════╤════════╤════════════════════════════════════════════════════════════════╗
║ D9 │  ИМС   │ Описание доступа к ресурсам микросхемы через РОН процессора    ║
╠════╪════════╪════════════════════════════════════════════════════════════════╣
║0x06│ KS58006│ D0…D7 - Порты доступа к DTMF                                   ║
║    │1008ВЖ16│                                                                ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x31│ UM91531│ D0…D7 - Порты доступа к DTMF                                   ║
║    │1008ВЖ19│                                                                ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x70│ CMS8870│ D0…D7 - Порты доступа к DTMF                                   ║
║    │1008ВЖ18│                                                                ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x73│  74373 │ D0…D7 - Порты доступа к регистрам                              ║
║    │ 555ИР22│                                                                ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x74│  7474  │ D0…D7 - Порты доступа к триггерам                              ║
║    │ 155ТМ2 │                                                                ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x10│AY3-8910│ D0…D7 - Порты доступа к Синтезатору звука                      ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x49│ YM2149 │ D0…D7 - Порты доступа к Синтезатору звука                      ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x51│TDA5051A│ D0…D7 - Порты доступа к AC-Модему                              ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x06│ DS2406 │ D0…D7 - Порты доступа к 1-Wire                                 ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x08│ DS2408 │ D0…D7 - Порты доступа к 1-Wire                                 ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x20│ DS18S20│ D0…D7 - Порты доступа к 1-Wire                                 ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x90│ DS9490R│ D0…D7 - Порты доступа к 1-Wire                                 ║
╚════╧════════╧════════════════════════════════════════════════════════════════╝

То есть, использовать можно любые ИМС, но при развязке дешифрации код из индекса конкретной ИМС должен отражаться и в индексе доступа.

Сегодня продолжил разработку эмулятора.
Добавил «Классический Режим» - режим работы ТТЛ-схемы в Logisim, где операция собирается из байтов не целым машинным циклом, а серией циклов.
В этим режиме в дизассемблере наглядно видно, как представлена та или иная команда в реальности.

Автозапуск
Классический режим

P.S.: На данный момент, из-за мелких неполадок ПК, заниматься разработкой получается раз в неделю…

19

(7 ответов, оставленных в Всякое разное)

Тут всё очень просто.

Говоря на языке z80/x86 с командами in/out, мы в регистр «B»/«DH» помещаем индекс ИМС конкретной серии, а в «C»/«DL» уже порт самой ИМС:

DH__DL
_B_ _C_
55h 00h|Порт A i8255 №1
55h 01h|Порт B i8255 №1
55h 02h|Порт C i8255 №1
55h 03h|Режим i8255 №1
55h 04h|Порт A i8255 №2
55h 05h|Порт B i8255 №2
55h 06h|Порт C i8255 №2
55h 07h|Режим i8255 №2
... ... ...
55h FCh|Порт A i8255 №64
55h FDh|Порт B i8255 №64
55h FEh|Порт C i8255 №64
55h FFh|Режим i8255 №64
-----------------------
53h 00h|Канал 0 i8253 №1
53h 01h|Канал 1 i8253 №1
53h 02h|Канал 2 i8253 №1
53h 03h|Режим i8253 №1
53h 04h|Канал 0 i8253 №2
53h 05h|Канал 1 i8253 №2
53h 06h|Канал 2 i8253 №2
53h 07h|Режим i8253 №2
... ... ...
53h FCh|Канал 0 i8253 №64
53h FDh|Канал 1 i8253 №64
53h FEh|Канал 2 i8253 №64
53h FEh|Режим i8253 №64

У меня в роли регистра «B»/«DH» выступает D₉, а D₈ выбирает порядковый номер в системе:

    MOV D9,0x55     ; Выбираем ИМС i8255/К580ВВ55
    MOV D8,1        ; Если в системе несколько i8255, указываем индекс
    MOV [BC1+1],D1  ; Считываем "Порт B" ИМС i8255 и сохраняем в память
    MOV D9,0x53     ; Выбираем ИМС i8253/К580ВИ53
    MOV D8,3        ; Если таймеров много, укажем индекс (1 из 256 штук)
    MOV D3,0xB6     ; Канал #2 в режим №3
    MOV D2,[BC1+1]  ; Младший байт коэффициента
    MOV D2,[BC1+2]  ; Старший байт коэффициента

Если по такой схеме к z80/x86 можно подключить до 64 штук i8253/i8255, то здесь можно подключить до 512 ИМС типа i8253/i8255, до 1024 ИМС типа i8275/i8279, до 128 ИМС типа i8257. То есть, суммарно - примерно до 25 тысяч различных периферийных интерфейсов. Думаю, хватит с лихвой!
Не так ли? roll



20

(7 ответов, оставленных в Всякое разное)

Конечно, наверное немного не в тему.
Администрация, надеюсь, не будет против маленького пиара полёта фантазии…

Имеeтся Страница на Хабре для ознакомления с концептуальной частью идеи.
Ссылки на Эмулятор и некоторые исходники черновых набросков для симуляции/синтеза находятся на странице так же…

Всё это творение появилась в одном из ностальгических приступов на фоне затворничества 2020 года.
Основной целью было попытаться разработать некое устройство процессорного класса, где система команд не имела бы неясных битовых полей эзотерического назначения.
(Для сравнения, у i8080 и i8086 в битовых полях команд прослеживается отголосок восьмеричной системы счисления во всём, от кода команд до полей операндов. И многое там просто эзотерично, пока не ознакомишься с архитектурой достаточно глубоко.)

Основополагающим во всей концепции является максимальная открытость и развёрнутость во всём.
Все команды имеют код, смежный со смысловым значением читаемого визуально в стиле акына: Что видится и читается, то и железом исполняется.

Конечно, за год весь материал успел устареть.
Но базовые принципы не изменились.

Сейчас прорабатывается карта устройств ввода-вывода.
Но, концептуально сохраняется акцент на максимальную развёрнутость, чтобы самой карты УВВ не было вовсе.
Например, для работы с устройствами ввода-вывода выделено 10 архитектурных регистра общего назначения D0…D9:

╔════╤════════╤════════════════════════════════════════════════════════════════╗
║ D9 │  ИМС   │ Описание доступа к ресурсам микросхемы через РОН процессора    ║
╠════╪════════╪════════════════════════════════════════════════════════════════╣
║0x32│ i8232  │ D0 - Регистр Данных                                            ║
║    │1816ВЕ32│ D1 - Регистр Статуса                                           ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x45│ i8245  │ D0 - Данные                                                    ║
║    │        │ D1 - Адрес                                                     ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x53│ i8253  │ D0/D1/D2 - Каналы Счётчиков 0/1/2                              ║
║    │К580ВИ53│ D3 - Регистр Статуса Таймера                                   ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x55│ i8255  │ D0/D1/D2 - Порты A/B/C ППА                                     ║
║    │К580ВИ55│ D3 - Регистр Статуса ППА                                       ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x57│ i8257  │ D0/D2/D4/D6 - Каналы 0/1/2/3: ПДП Адрес                        ║
║    │        │ D1/D3/D5/D7 - Каналы 0/1/2/3: ПДП Счёт                         ║
║    │К580ВТ57│ D8 - Регистр Статуса ПДП                                       ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x72│ i8272  │ D0 - Регистр Статуса                                           ║
║    │FDD Unit│ D1 - Регистр Данных                                            ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x75│ i8275  │ D0 - Регистр Данных                                            ║
║    │К580ВГ75│ D1 - Регистр Статуса                                           ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x79│ i8279  │ D0 - Регистр Данных                                            ║
║    │К580ВВ79│ D1 - Регистр Статуса                                           ║
╟────┼────────┼────────────────────────────────────────────────────────────────╢
║0x93│ FD1793 │ D0 - Регистр Команд / Регистр Статуса                          ║
║    │        │ D1 - Регистр Дорожки                                           ║
║    │        │ D2 - Регистр Сектора                                           ║
║    │1818ВГ93│ D3 - Регистр Данных                                            ║
╚════╧════════╧════════════════════════════════════════════════════════════════╝

Тем самым, в D9 помещается серийный индекс номенклатуры микросхемы, а с D0…D8 работают уже как с внутренними регистрами самой микросхемы УВВ.
То есть, разработчику, имеющему опыт работы с конкретной ИМС УВВ не нужно никаких команд типа IN/OUT.

Естественно, в эмуляторе пока практически мало чего реализовано, так как он работает сейчас в тестовом режиме, чтобы создать хоть какую-то среду разработки/отладки кода и оценить, насколько сама идея жизнеспособна.



21

(19 ответов, оставленных в Всякое разное)

Накoнец-то, свершилось!

Спустя 35 лет после публикации схемы знаменитого РАДИО-86РК, в котором контроллер CRT-дисплея на микросхеме 580ВГ75 мог работать со «световым пером», данная поддержка появилась в онлайн-эмуляторе!
(Как-то не справедливо было, что любители пострелять в уток в NES-эмуляторе могут это делать мышью. Но ни один из имеющихся эмуляторов «Апогея», «Микроши» и «Радио-86РК» не поддерживают подобную фишку… А вот единственная ПЭВМ КРИСТА шла со световым пером в комплекте с программами…)

Автор онлайн-эмулятора подхватил идею поддержки светового пера (моё видео) и реализовал её в своём эмуляторе.

За неделю…
Накидaл кое-как первую игру с использованием «светового пера»…
(Кликайте мышью по звёздочкам…)

Сделал кое-как "Жизнь"» под световое перо…
(Рисуйте мышью клетки… Данная реализация крайне медленная, так как ставилась задача под световое перо сделать хоть что-то и алгоритм просчитывает весь буфер экрана целиком, включая пустые области)

(Запуск этих двух игр: Дождитесь их загрузки с появлением приглашения «->» и наберите «G<Enter>» - нажать «G» и затем «Enter»…)

Адаптировал под световое перо игру, которая на кассете называлась «МАРС-2», но в файлах представлена как «MARS3».
Адаптировал под световое перо игру «МАРС».
(Игра со звуком! Поставьте галочку внизу на «Sound».)

На данный момент дорабатывается Бейсик Микрон для поддержки окон и светового пера.



22

(19 ответов, оставленных в Всякое разное)

Logisim-процессор
Задумывaлся как вполне реализуемый на ТТЛ-рассыпухе RISC-процессор с простой для любителя системой команд…
Хотя, по предварительным подсчётам, потребуется не менее 250 микросхем, но оно того стоило ради досуга… cool

P.S.: Сейчас пытаюсь составить более-менее сносную документацию, чтобы хотя бы гикам была понятна… roll
Опубликовал в Хабр, очень тихо продвигаюсь с эмулятором и моделью под FPGA…


uav1606 пишет:

Что-то вроде "танчиков", как я понимаю? :-)

Дa, было дело…
Типа, аватарку в ASCII-стиле сгенерировать или микрокомикс в gif для форума.
Может, кому сгодится… Там всё редактируется в реальном времени…

Есть вариант посложнее, так сказать, пародия на комикс-студию.
(Тут несколько роликов с демонстрацией работы скрипта: подгонял метки под музыку и готовый мультик…)
Типа GRASP или MS Chat.


P.S.: Относится к демосцене? wink



ASCII-Демка



25

(26 ответов, оставленных в Обсуждение этого форума)

B связи с «коронованной инфекцией» и принудительным интроверт-стримом, форумы нужно развивать и поддерживать! lol

P.S.: Кстати, я вернулся…