1

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

На самом деле, изначально видео на РК никак не планировал проигрывать.
Тема была в том, на сколько максимально быстро можно прокручивать экран вертикально и горизонтально, используя трюки со стеком (в играх 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



5

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

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

Спойлер

     +------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
     |  .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.: Надеюсь, кому-то и пригодится.



10

(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-технологии молодому поколению программистов…



11

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

Зд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.: На данный момент, из-за мелких неполадок ПК, заниматься разработкой получается раз в неделю…

12

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

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

Говоря на языке 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



13

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

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

Име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.

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



14

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

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

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

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

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

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

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

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

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



15

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

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

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


uav1606 пишет:

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

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

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


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



ASCII-Демка



18

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

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

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


uav1606 пишет:

По поводу эмулятора...
Консоль JavaScript при каждом нажатии на Trace выдаёт:
Uncaught TypeError: Object . has no method 'repeat' (program):440

Элементaрную функцию повтора строки n-раз разработчики внедряли в JS более 25 лет! big_smile
Зря я решил отказаться от собственной функции в пользу этой repeat…
Вроде как исправил…

Надо было мне сразу дать ссылку на вариант эмулятора с самопальной реализацией повтора строки. Эта версия у меня для проверки в Opera 12… lol
(Нажмите на Reset и потом на Start. Область дисплея должна начать очищаться, а таблица команд и дизассемблинг должны отображать активность трассировки. Проверял сейчас специально в Opera 12)

uav1606 пишет:

Здесь всё в порядке, схема рисуется. Правда, чтобы она нарисовалась, нужно, после выбора из выпадающего списка названия схемы, нажать Image или Movie, иначе на картинке показана она же в ASCII. Так и стоит, пока я, например, не введу что-нибудь, хотя бы пробел, в текстовое поле, тогда картинка превращается уже в графическую схему. "Жук" в режиме Movie тоже бегает.

Да, проблема наблюдается и в том, что и под Opera 12 не работает. А ведь когда-то проверял - работало! Сейчас - вообще ничего не отображает.
Видимо в GitHub они что-то всё-таки поменяли, раз эмулятор отказал и ascii-схемки.
(Почти всегда проверял в Opera 12: Если в ней работало, значит и в других должно)

P.S.: Спасибо за содействие!
Мелочь, но всё же…
(Смотрю вот, за границей у них сейчас мода типа строить компьютеры на транзисторной рассыпухе. У нас на форумах очень часто относятся, если не скептически, то без особого интереса.
Думаю, если открыть отдельную тему о моей концепции процессора (не реализации или идеи - они крайне безобразные) и попытаться в дискуссии обсудить некоторые "тонкие" моменты - не очень плохо?)


uav1606 пишет:

У меня тоже Chrome, только старый - 24-й. К сожалению, более новые на моём компьютере не работают (нет SSE2).
Старый вариант эмулятора под ним заработал вроде бы нормально, по крайней мере, я вижу трассировку и т.п. А вот новый - ни в какую, ни на какие клавиши не реагирует и т.п.
Чуть позже попробую под более новыми браузерами.

Кaк ни крути, а вина - программиста… Выходит, в новых скриптах я что-то не то сделал.
А консоль ошибки какие выдаёт? Напротив, вот как раз на старом Хроме хорошо было бы тоже добиться запуска. Раньше я старался аккуратно придерживаться правил кроссбраузерности. Но, так как разработки по большей части не покидали просторы моего дискового пространства, я стал "безобразничать". roll
Ниже - гифка с таблицей системы команд эмулируемого процессора. Очень похожа на ту цветную таблицу из журнала РАДИО тех далёких лет. Да, напоминает ту самую от 580ИК80. Так как там многое - то же самое, но перегруппированно в соответствии с концепцией.
Так, команда останова HLT у процессора i8080 имеет код 076h, а у i8086 - 0F4h. Тогда как здесь верное решение - код 00, как в строчках. К сожалению, у x86 код 00 означает ADD и без средств защиты, как под плоским DOS, прыжок на "нулевую" область зацикливалось сложением.
Короче говоря, что с детства "наболело", то и реализовал в эмуляторе (пока) с амбициями прошить всё в DE1.

uav1606 пишет:

Насчёт парсера ASCII-схем - может быть, стоило бы использовать для вертикальных линий "трубопровод" - "|" ?
Мне кажется, они бы так смотрелись лучше, чем из восклицательных знаков, и это не псевдографика, а чистый ASCII.

Знак "!" вместо "|" мною использовался лишь как дань РАДИО-86РК по-привычке. Это не принципиально и можно исправить. smile
Но, главное же - это генерируемая в canvas схема! Или, простите, парсер тоже ошибку даёт и ничего, кроме самих ASCII-схем не видно? А "жук" с символом параграфа по проводам схемы тоже не бегает? smile Консоль что пишет? (Старый вариант с псевдографикой работает?)
Например, выбрав схему АОНа, через секунд 20-40 (в зависимости от производительности ПК) должна появиться схема как в прилагаемой выше гифке (radio199309)…


uav1606 пишет:

В принципе, интересная идея. Только у меня эти схемы больше не с "Радио" ассоциируются, а с FIDO, там часто размещали такие небольшие схемки в эхах.

Вo времена FIDO я только осваивался в Бейсике РК и постигал тайны машинного кода, прогуливая школу wink

uav1606 пишет:

Я так сходу и не пойму, что тут изображено - слишком много разных типов символов. В отличие, например, от вот такого:
Хотя тут не чистый ASCII, но выглядит нагляднее.

Изначально первая версия скрипта обрабатывала схемы с символами псевдографики. Но, на практике требовался специализированный текстовый процессор (как ФОТОН под DOS 3.1) с поддержкой блочного выделения текста и псевдографического рисования. Что выходило за рамки функций встроенных редакторов на форумах и часто превращало схему в груду &#-амперсандов.

uav1606 пишет:

Единственное "но" - мне кажется, что Ваши обозначения в ASCII-вариантах схем как-то не совсем наглядны.

Планировалось, для "сторонних" и ленивых сделать редактор с мышью. А ограничение 96 ASCII-кодами диктуют свои правила также. Тем более, для обмена схемами можно пожертвовать визуальной эстетикой исходника, если требуется стабильность парсинга и экспорта в CAD. Искущённые же могут без особого труда освоиться в специфике символики.

uav1606 пишет:

А нельзя как-то парсер настроить, чтобы он понимал именно такого рода ASCII-схемы? Возможно, с какими-то небольшими модификациями? Т.е. некий гибрид Вашего варианта и "классического"?

Как я уже сказал, первый вариант так и работал. Но небыло стабильности. И это крайне бы затрудняло бы экспорт, что скрипт из инструмента обмена схемами с перспективой их непосредственного экспорта для запуска симулятором превращает в простую эстетическую и бесполезную игрушку.
Однако, ответ положителен: Если заглянете в исходники, найдёте текстовое представление каждого элемента и его регулярное выражение в шаблонах.
Очень открытый пример (меньше 300 скрипт-строк) - должен работать.
Резистор кодируется так:

01    .....    0-угол, 1-палитра
...    .....
.9.    -\\-.    9-очередь прорисовки
...    .....
0,1    .....    0,1-позиция
02    .....
...    .....
.9.    -//-.
...    .....
0,1    .....
11    ..!..
...    ..\..
.9.    ..\..
...    ..!..
1,0    .....
12    ..!..
...    ../..
.9.    ../..
...    ..!..
1,0    .....

И "реагирует" на -\\- или -//-. Если сменить на [//], их и будет парсить.

uav1606 пишет:

Насчёт эмулятора 8080, я, если честно, не понял, как он работает - может, расскажете подробнее? Т.е. я открыл ту ссылку, что Вы дали, а дальше? На Start и Trace он у меня почему-то никак не реагирует.

Так как этот скрипт - потомок, написанный с нуля и пока официально не представляемого, в нём есть некоторые интерфейсные недочёты. Например, отсутствует справка.
Так, клавиша F7 - селектор (FPS, IPS, и т.д.), клавиши F6/F8 - инкремент/декремент (для FPS, IPS и т.д.), F1 - один шаг эмуляции, F4 - старт эмуляции.
Возможно, проблема с браузером? Тестирую всё в Chrome, хотя и FF тянет вполне.
Попробуйте старый вариант. Или в этом варианте нажмите F4. Хм… Ничего не работает?

P.S.: В целом, большое спасибо за замечания… И за то, что позволили здесь "помусорить".
Увидел Мегапроцессор и прослезился.
Считаю и уверен, что даже 8-битные процессоры зря забросили из быта (нету планшетов с Андроидом под 8-битным процессором, например). Как я выше писал, мой проект x80 - попытка встряхнуть i8080 хорошенечко так, чтобы и система команд стала визуально в таблице "ровнее", и появилась перспектива на линейку с обратной совместимостью.
С одной стороны, мнемонически несколько x86-совместим, а с другой - для реализации "вживую" на транзисторах тоже достаточно годен…



Здравствуйтe!

Имея специфическое хобби, занимаюсь разработкой в сфере устаревших технологий. big_smile

Парсер принципиальных ASCII-схем является реализацией идеи описания электрической схемы алфавитно-цифровой текстовой комбинацией (пример схемы усилителя и схемы АОНа), несколько раз публиковавшихся на страницах журнала РАДИО (смотрите в прилагаемом файле). В перспективе, расчитывалось добавить функцию трассировки ascii-схемы для составления полноценного списка узлов с экспортом как в svg, так и netlist под spice. На специализированных форумах используются специальные Java-движки для визуального рисования схем и архивирования. Тогда как ascii-схемы можно экранировать особым bb-тэгом для визуализации, подобно математическим формулам.
На многих форумах эта идея активно критикуется как шаг назад в пещерную эпоху алфавитно-цифровых терминалов.
Думаю, на данном форуме идея найдёт своих сторонников. Возможно, поддержку тоже (в частности, консультирования по части экспорта и редактирования)…

Эмулятор i8080 как часть проекта x80.
Особенность скрипта в том, что ядро процессора описывается не switch-case-древом. Передав функции скрипта шаблон, аналогичный в некоторой степени справочным таблицам по конкретному процессору, генерируются специальные структуры, обеспечивающие функционирование комплекса ассемблер+дизассемблер+эмулятор.
Тем самым, в режиме реального времени можно изменять таблицу системы команд процессора через текстовое поле.
Скрипт разрабатывался с расчётом эмуляции как i8080/z80 или 6502, так и более сложные. На данный момент шаблонного описания i8086 пока не разработано, но вполне возможно в перспективе и в принципе…

P.S.: Надеюсь, что не ошибся с выбором форума и тематика найдёт заинтересовавшихся… roll