; Программа "Хаотичные лампочки" для Лампанели
; Использует формулу: Seed = (Seed * 5 + 1) mod 256
START:
MVI A, 42 ; Начальное число (Seed) для генератора
LOOP:
; --- Математика рандома ---
MOV B, A ; Копируем Seed в B
ADD A ; A = Seed * 2
ADD A ; A = Seed * 4
ADD B ; A = Seed * 5
INR A ; A = Seed * 5 + 1 (новый Seed готов!)
; --- Выбираем случайную строку (порт 4, 5, 6 или 7) ---
MOV C, A ; Сохраняем новое число в C, чтобы не потерять
ANI 03H ; Оставляем только младшие 2 бита (число от 0 до 3)
ADI 4 ; Прибавляем 4 (получаем порт от 4 до 7)
MOV E, A ; Запоминаем номер порта в регистр E
; --- Выбираем случайную комбинацию лампочек ---
MOV A, C ; Возвращаем наше случайное число
XRI 55H ; Немного перемешаем биты для хаоса
; --- Вывод на Лампанель ---
; Так как команда OUT требует точный номер порта,
; делаем проверку регистра E через сравнение:
CPI_4:
MOV B, A ; Временно сохраняем маску лампочек
MOV A, E ; Берем номер порта
CPI 4 ; Это порт 4?
MOV A, B ; Возвращаем маску в A
JNZ CPI_5 ; Если нет — проверяем следующий
OUT 4 ; Если да — зажигаем в порту 4
JMP DELAY
CPI_5:
MOV B, A
MOV A, E
CPI 5
MOV A, B
JNZ CPI_6
OUT 5
JMP DELAY
CPI_6:
MOV B, A
MOV A, E
CPI 6
MOV A, B
JNZ CPI_7
OUT 6
JMP DELAY
CPI_7:
OUT 7
DELAY:
; Задержка, чтобы лампочки не мигали слишком быстро
MVI H, 0FFH
D_LOOP:
DCR H
JNZ D_LOOP
MOV A, C ; Возвращаем Seed в регистр A для следующего цикла
JMP LOOP ; Повторяем бесконечно