Регистр статуса процессора

Вернуться на главную страницу

Содержание

Status Register

Регистр флагов - 8-битный регистр статуса процессора. Каждый бит этого регистра отвечает за определенный флаг. По флагам определяется текущее состояние процессора.

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

Выбери флаг из списка, чтобы посмотреть по нему информацию.

Раздел еще в разработке, ссылки будут добавлены постепенно.

Бит 7 6 5 4 3 2 1 0
Флаг V U B D I

N (Negative)

Указывает на то, что в результате выполнения инструкции получился отрицательный байт. Если байт положительный (диапазон #$00-#$7F), тогда N = 0. Если байт отрицательный (диапазон #$80-#$FF), тогда N = 1. Проще говоря, состояние бита7 у результата копируется во флаг N.

В примере в регистр A загружается сначала положительный байт, а затем отрицательный.

Состояние флага можно проверить инструкциями BPL и BMI.

V (Overflow)

U

B

D (Decimal)

I (Interrupt)

Z (Zero)

Указывает на то, что в результате выполнения инструкции получился байт, равный нулю (#$00), в этом случае Z = 1. Если получившийся байт не равен нулю (диапазон #$01-#$FF), тогда Z = 0.

В примере в регистр A загружается сначала байт, равный #$00, а затем любой другой.

Состояние флага можно проверить инструкциями BNE и BEQ.

C (Carry)

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

Подробнее про работу этих инструкций читай в разделе с инструкциями процессора.

Например, если при сложении байта из регистра A с другим байтом получится результат больше, чем #$FF, тогда C = 1, в противном случае C = 0. А также текущее состояние флага C учитывается при сложении.

После выполнения первой инструкции ADC при сложении байтов #$F0 и #$18 получился результат #$08 (#$0108), то есть больше #$FF, поэтому C = 1. При дальнейшем сложении #$08 и #$38 получился результат #$41 (#$40 + C), то есть #$FF или меньше, что привело к C = 0.

Состояние флага можно выставить вручную инструкциями CLC и SEC.

Состояние флага можно проверить инструкциями BCC и BCS.

ADC (Add with Carry)