Перед началом

Это первая глава набора «Game & Watch из транзисторов». Мы пройдём путь от одной светящейся цифры до настоящих электронных часов ЧЧ:ММ — с мигающим двоеточием и установкой времени. Всё собирается руками, из логических вентилей, в браузерном симуляторе, на сегментном ЖК-экране — как у карманных игр Nintendo и часов CASIO 80-х.

Часы — не цель, а разминка. На них отрабатывается всё, что дальше понадобится игре: дешифратор цифр, память, счётчики, перенос, разрешение счёта, детектор нажатия кнопки, работа с настоящим временем.

Что соберём в итоге

Вот к чему ведёт набор — игра «Звёздный урожай» (рабочее название) с часами в углу, как у настоящих Game & Watch. Попробуй прямо здесь:

ЛЕВО ↑
ЛЕВО ↓
ПРАВО ↑
ПРАВО ↓
Звёздный урожай · из вентилей

Космонавт на станции ловит кристаллы, которые выкатываются из четырёх труб. Каждая кнопка сразу ставит его к своей трубе: Q / A — левые трубы (верх / низ), P / L — правые, пробел или START — новая игра. Пропустил кристалл — промах, три промаха — конец игры. Чем больше очков, тем быстрее катятся кристаллы, а пока в иллюминаторе видна комета, каждый кристалл даёт два очка. Часы в левом углу — это машина этой главы.

Здесь игра работает как программа — это модель, такт за тактом повторяющая будущую схему. В наборе та же машина собирается из вентилей: экран, часы, счётчики очков, сдвиговые регистры труб, генератор случайности, зуммеры — всего около 8–9 тысяч транзисторов. Глава 1 — первая её половина: часы.

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

Как читать: уроки идут строго по порядку, каждый продолжает предыдущий. В каждом уроке — объяснение, вывод формул и таблицы сборки: по ним схема ставится на холст элемент за элементом. В конце урока — проверка и текст для вставки Cmd+I, если хочется собрать урок одним движением.


Симулятор за пять минут

Первая лампочка

Откройте cs.khanin.info — это и есть наш симулятор. Пять минут руками, прежде чем читать дальше:

Экран симулятора cs.khanin.info
  1. 1 Power — питание: включает и выключает схему
  2. 2 Export / Import — сохранить проект в файл и открыть его
  3. 3 движок: Real — каждый транзистор, Fast — быстрее; Turbo — для процессоров, в этом наборе не нужен
  4. 4 палитра деталей; буква под кнопкой — клавиша (V, G, I, K, N, O, L…)
  5. 5 холст — сюда ставим детали
  6. 6 библиотека: здесь появятся ваши чипы (Ctrl+G); процессоры 6502 — для других наборов
Так выглядит симулятор при первом открытии: пустой холст, пустая библиотека.
  1. Источник единицы. Нажмите V и кликните по холсту — появится VCC, источник 1 («плюс батарейки»).
  2. Транзистор. Нажмите N и кликните рядом. У транзистора три ноги: затвор слева, верх и низ. Буква на корпусе — N; если там P, кликните по корпусу.
  3. Лампа и тумблер. O — лампа, I — тумблер.
  4. Провода. Тяните мышью от ноги к ноге: VCC → верх транзистора, низ → лампа, тумблер → затвор.
  5. Включите питание — кнопка Power, первая слева на верхней панели, — и щёлкайте по тумблеру. Тумблер 1 — лампа горит, 0 — гаснет. Транзистор — это выключатель, которым управляет сигнал. Из таких выключателей собрано всё в этом наборе, вплоть до игры.
  6. Метки вместо проводов. Удалите провод от тумблера к затвору (клик по проводу и Delete). Нажмите L, поставьте метку и соедините её проводом с ногой тумблера; назовите её A (двойной клик по метке — переименовать). Вторую метку A соедините с затвором. Работает, как с проводом: метки с одинаковым именем соединены. На этом держатся все таблицы сборки набора.
  7. Сохраните: кнопка Export на верхней панели.
тумблер 0 — лампа не горит, провод к ней «висит» (янтарный пунктир)

тумблер 0 — лампа не горит, провод к ней «висит» (янтарный пунктир)

тумблер 1 — транзистор проводит, путь зелёный, лампа горит

тумблер 1 — транзистор проводит, путь зелёный, лампа горит

Первая лампочка в симуляторе. Зелёный провод — 1, тёмный — 0, янтарный пунктир — ни к чему не подключено.
Две метки A вместо провода
Провод от тумблера к затвору заменён двумя метками A: каждая соединена проводом со своей ногой. Одинаковое имя — значит соединено, лампа горит, как и с проводом.

Заметили, что при выключенном тумблере провод к лампе стал янтарным пунктиром? Лампа в этот момент ни к чему не подключена — «висит». Здесь это не страшно, но в больших схемах так нельзя. В уроке 0 мы увидим, как пара транзисторов N и P решает эту проблему.

Не горит? Не включено питание (кнопка на панели); перепутаны верх и низ транзистора; на корпусе P вместо N — клик по корпусу меняет тип.

Главное о симуляторе

Холст и палитра. Слева — палитра деталей, справа — библиотека чипов. Сначала она пустая: всё, что вы соберёте и свернёте в чип, появится там; базовые вентили NOT, NAND, NOR, AND, OR, XOR вы соберёте из транзисторов в уроке 0. Деталь ставится кликом по холсту. Полезные клавиши: I — тумблер (Input), K — генератор (Clock), L — метка, [ / ] — порт входа / выхода чипа, U — кнопка, V / G — питание / земля.

Метки вместо проводов. Метка — это имя сигнала. Все метки с одинаковым именем соединены, даже если между ними нет провода. Поэтому в таблицах сборки написано не «провод отсюда туда», а «на эту ногу — метку X». Провода тоже можно тянуть: от ноги к ноге мышью.

Как читать таблицу сборки. Одна строка — одна деталь. Слева — что подаётся на её входы, справа — какую метку получает её выход:

ЭлементВходыВыход
ANDD0, D1D0D1

означает: поставить вентиль AND, на два входа — метки D0 и D1, на выход — метку D0D1. У чипов с названиями ног пишется ИМЯ=метка: CNT10E с CLK=CLK, RST=tRST — на ногу CLK метка CLK, на ногу RST метка tRST.

ЭлементВходыВыходANDD0, D1D0D1D0D1D0D1
Как читать таблицу сборки: одна строка — одна деталь. Поставить AND, на входы — метки D0 и D1, на выход — метку D0D1.

Чипы. Готовый кусок схемы сворачивается в чип: поставить порты ([ вход, ] выход), назвать их, выделить всё и нажать Ctrl+G. Чип появляется в библиотеке, и его можно ставить сколько угодно раз. Двойной клик по чипу — заглянуть внутрь, кнопка Edit — исправить (меняются сразу все его копии).

выделить всёAB[ входYвыход ]Ctrl+GANDABY→ в библиотеке справа
Чип: входы и выходы отмечают портами ([ — вход, ] — выход) и дают им имена, затем выделяют всё и нажимают Ctrl+G. Схема сворачивается в коробочку с ногами A, B, Y; её можно ставить сколько угодно раз.
внутри чипа NOT (двойной клик по чипу): порты, транзисторы P и N, VCC, GND

внутри чипа NOT (двойной клик по чипу): порты, транзисторы P и N, VCC, GND

чип NOT на холсте: на входе 0 — лампа на выходе горит

чип NOT на холсте: на входе 0 — лампа на выходе горит

Порты здесь не переименованы (на них стоит IN и OUT по умолчанию), поэтому симулятор сам назвал ноги чипа I0 и O0. Дайте портам имена — двойной клик по порту, — и ноги будут называться так же (в уроке 0 — A и Y).

Питание и движки. Кнопка питания — слева на верхней панели. Движок (тоже на панели): Real считает каждый транзистор — точно, но медленно; Fast — по вентилям, гораздо быстрее. Для проверки схемы годятся оба.

Генератор (Clock). Клик по корпусу меняет частоту: 1Hz, 2Hz, 10Hz, 60Hz — реальное время (ровно столько тактов в секунду, для часов и игр) и 4kHz … 64kHz, MAX — быстрые, для процессоров.

Сегментный ЖК (Segment LCD). Экран из нарисованных сегментов; каждый сегмент — отдельная нога (1 — виден). Шестерёнка ⚙ на корпусе открывает редактор: готовые цифры-штампы, выделение палочкой, превращение сегмента в ногу (Enter — New pin).

Проверка. Клавиша T — таблица истинности выделенного чипа (для схем без памяти). Клавиша W — осциллограф: показывает, как меняются сигналы во времени; помогает найти, где ошибка.

Вставка текстом (Cmd+I, на Windows — Ctrl+I). Схему можно не собирать руками, а вставить готовым текстом — он есть в конце каждого урока. Но смысл набора — собрать самому: вставка нужна, чтобы сверить себя или догнать пропущенный урок. (Так же Ctrl+G на Mac можно нажимать и как Cmd+G.)

Окно «Insert from code»
  1. 1 сюда вставьте текст из конца урока (кнопка «копировать» над ним)
  2. 2 Apply — схема появится на холсте, чипы — в библиотеке
  3. 3 Load file — то же из файла
Окно вставки: Cmd+I на Mac, Ctrl+I на Windows. Здесь — начало вставки урока 0: чипы NOT и NAND из транзисторов.

Экспорт. Кнопка Export на верхней панели сохраняет проект в файл — делайте это после каждого урока.