Вступление

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

Эта каждая клетка является либо проводником (когда окрашена), либо “физически отсутствует” (когда нет). Мы будем раскрашивать клетки в разные цвета ради удобства нашего визуального восприятия, но для клеточного автомата они все будут совершенно равнозначны. Есть цвет - проводник. Нет цвета (черный) - не проводник.

Вы вполне можете думать о каждой из них как о медном квадратике на печатной плате со слегка скругленными углами, который сверху покрыли цветным лаком. Скругленными, чтобы не было контакта между угловыми клетками, только между торцевыми; иначе это усложнит нам правила (формально описаны в следующем разделе).

Если к этому квадратику с любого торца подать напряжение (перевести в активное состояние), то он его будет через себя проводить во все стороны. А если не подвести, то не будет.
Клетки “под напряжением” мы будем выделять более ярким цветом.

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

:x white :* white
+------------------------------------------+
|   x   *   x                              |
|   x   x   x     xx        xxxxxxxxxxx    |
|   xxxx xxx xxxxxx xx      xxxxxxxxxxx    |
|   x   x   x     xx x      xxxx   xxxx    |
|xxx xxxx   x        x      xxx xxx xxx    |
|   x   x   x     xx xx     xxxxxxx xxx    |
|   x   xxxx xxxxxx xx xxxxxxxxxx  xxxxxxxx|
|   x   x   x     xx xx     xxxxxxx xxx    |
|   x   x   x        x      xxx xxx xxx    |
|   x   x   x  xx xx x      xxxx   xxxx    |
|   x   x   xxxx xx xx      xxxxxxxxxxx    |
|   x   x   x  xx xx        xxxxxxxxxxx    |
|   x   x   x                              |
+------------------------------------------+

На месте схемы выше вы должны были сначала увидеть обычный текст, где описаны символы, их цвет и собственно схема в ASCII, а так же быстрое превращение всего этого в картинку. Если не увидели - не берите в голову, у вас хороший компьютер (смартфон, телевизор, …). Если же ничего никуда не конвертировалось, то жаль, у вас наоборот недостаточно шустрая машинка; ну либо не поддерживается wasm; или отключен js; надеюсь все же не я накосячил.

А вот такие у нас есть цвета (слева дорожка, справа дорожка под напряжением; напряжение можно переключать мышкой):

:* black
:r red :g green :b blue
:y yellow :m magenta :c cyan
:w white :o orange
+------------------------+
|                        |
| rrrrrrrrrr *rrrrrrrrrr |
|                        |
| gggggggggg *gggggggggg |
|                        |
| bbbbbbbbbb *bbbbbbbbbb |
|                        |
| yyyyyyyyyy *yyyyyyyyyy |
|                        |
| mmmmmmmmmm *mmmmmmmmmm |
|                        |
| cccccccccc *cccccccccc |
|                        |
| wwwwwwwwww *wwwwwwwwww |
|                        |
| oooooooooo *oooooooooo |
|                        |
+------------------------+

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

:x white :* yellow
:O yellow
+----------------------------------------------------------------------+
|                            ***                                       |
|                            * *                                       |
|                             x                                        |
|    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx   |
|    x x   x x   x x   x x   x x   x x   x x   x x   x x   x x   x x   |
|     O     O     O     O     O     O     O     O     O     O     O    |
|    OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO    |
|  OOO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO  |
|  O OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO OO O  |
|  O                                                                O  |
|  OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO  |
|         O                                                            |
|         O                                                            |
+----------------------------------------------------------------------+

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

Если в описании схемы есть символы “*” (сырую схему можно увидеть открыв исходный код страницы), то на них напряжение подается автоматически, на старте, на такие же N тактов симуляции.

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

:x white
+-------------------------------------------------+
|          x                                      |
|          x                                      |
|         x x                                     |
|      xxxxxxxxx                                  |
|      x   x   x      x               x           |
|     x x x x x x     x               x           |
|     xxx xxx xxx   xxx xxx xxx xxx xxx xxx xx    |
|      x   x   x    x x x x x   x x x x x x x     |
|     x x x x  x    xxx xx  xxx xxx xxx xx  x     |
|     xxx xxx  x                                  |
|      x   x   x                                  |
+-------------------------------------------------+

Дальше…

Copyright (c) 2023 Otus-Lisp