Загрузка данных


; Программа "Хаотичные лампочки" для Лампанели
; Использует формулу: 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        ; Повторяем бесконечно