Эмуляция инструкций процессора NES

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

Содержание

Эмуляция инструкций процессора NES

Требуется знание битовых инструкций процессора для ознакомления со статьей.

Некоторые кнопки в левой части калькулятора работают схожим образом с битовыми инструкциями процессора 6502.

Нужно предварительно включить опцию Hex (изредка Bin). Операции над Dec числами вряд ли будут тебе интересны.

Выставь режим "1 байт" или "2 байта" для более точной эмуляции 8-битного процессора.

Описание работы кнопок

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

Кнопка RoL (ROL)

Логический сдвиг битов влево. Эмулирует работу инструкции ROL лишь частично (из-за отсутствия в калькуляторе флага C).

Результат отличается в режимах "1 байт" и "2 байта".

Пример работы кнопки в режиме "1 байт"

CLC ; C = 0
LDA #$25 ; в калькуляторе #$25
ROL ; #$4A, C = 0. В калькуляторе #$4A
ROL ; #$94, C = 0. В калькуляторе #$94
ROL ; #$28, C = 1. В калькуляторе #$29, вручную ставим бит0 = 0 для #$28
ROL ; #$51, C = 0. В калькуляторе #$50, вручную ставим бит0 = 1 для #$51
ROL ; #$A2, C = 0. В калькуляторе #$A2
ROL ; #$44, C = 1. В калькуляторе #$45, вручную ставим бит0 = 0 для #$44
ROL ; #$89, C = 0. В калькуляторе #$88, вручную ставим бит0 = 1 для #$89

Пример работы кнопки в режиме "2 байта"

CLC ; C = 0
LDA #$25 ; в калькуляторе #$25
ROL ; #$4A, C = 0. В калькуляторе #$4A
ROL ; #$94, C = 0. В калькуляторе #$94
ROL ; #$28, C = 1. В калькуляторе #$0128
ROL ; #$51, C = 0. В калькуляторе #$0250, вручную ставим бит0 = 1 для #$0251
ROL ; #$A2, C = 0. В калькуляторе #$04A2
ROL ; #$44, C = 1. В калькуляторе #$0944
ROL ; #$89, C = 0. В калькуляторе #$1288, вручную ставим бит0 = 1 для #$1289

Кнопка RoR (ROR)

Логический сдвиг битов влево. Эмулирует работу инструкции ROR лишь частично (из-за отсутствия в калькуляторе флага C).

Результат отличается в режимах "1 байт" и "2 байта".

Пример работы кнопки в режиме "1 байт"

CLC ; C = 0
LDA #$25 ; в калькуляторе #$25
ROR ; #$12, C = 1. В калькуляторе #$92, вручную ставим бит7 = 0 для #$12
ROR ; #$89, C = 0. В калькуляторе #$09, вручную ставим бит7 = 1 для #$89
ROR ; #$44, C = 1. В калькуляторе #$C4, вручную ставим бит7 = 0 для #$44
ROR ; #$A2, C = 0. В калькуляторе #$22, вручную ставим бит7 = 1 для #$A2
ROR ; #$51, C = 0. В калькуляторе #$51
ROR ; #$28, C = 1. В калькуляторе #$A8, вручную ставим бит7 = 0 для #$28
ROR ; #$94, C = 0. В калькуляторе #$14, вручную ставим бит7 = 1 для #$94

Пример работы кнопки в режиме "2 байта"

CLC ; C = 0
LDA #$25 ; в калькуляторе #$25
ROR ; #$12, C = 1. В калькуляторе #$8012
ROR ; #$89, C = 0. В калькуляторе #$4009, вручную ставим бит7 = 1 для #$4089
ROR ; #$44, C = 1. В калькуляторе #$A044
ROR ; #$A2, C = 0. В калькуляторе #$5022, вручную ставим бит7 = 1 для #$50A2
ROR ; #$51, C = 0. В калькуляторе #$2851
ROR ; #$28, C = 1. В калькуляторе #$9428
ROR ; #$94, C = 0. В калькуляторе #$4A14, вручную ставим бит7 = 1 для #$4A94

Кнопка Or (ORA)

Побитовое "ИЛИ". Эмулирует работу инструкции ORA.

После нажатия кнопки введи дополнительный байт, затем нажми кнопку "=" или клавишу Enter для получения результата.

Результат в режимах "1 байт" и "2 байта" не отличается.

Пример работы кнопки

LDA #$25 ; #%00100101
ORA #$5D ; #%01011101
; #%01111101 = #$7D

Кнопка Xor (EOR)

Исключающее "ИЛИ". Эмулирует работу инструкции EOR. Помогает вычислить правильный операнд для инструкции EOR в своем коде.

После нажатия кнопки введи дополнительный байт, затем нажми кнопку "=" или клавишу Enter для получения результата.

Результат в режимах "1 байт" и "2 байта" не отличается.

Пример работы кнопки

LDA #$25 ; #%00100101
EOR #$5D ; #%01011101
; #%01111000 = #$78

Чтобы вычислить операнд для инструкции EOR при начальном байте #$25 в регистре A и желаемом результате #$78, нужно в калькуляторе ввести 25, нажать кнопку Xor и ввести 78. Результатом будет 5D.

Кнопка Lsh (ASL)

Арифметический сдвиг битов влево. Эмулирует работу инструкции ASL.

После нажатия кнопки введи количество сдвигов, например 1. Далее нажми кнопку "=" или клавишу Enter для получения результата.

Результат в режимах "1 байт" и "2 байта" отличается лишь наличием старшего байта.

Пример работы кнопки

LDA #$25
ASL ; #$4A
ASL ; #$94
ASL ; #$28
ASL ; #$50
ASL ; #$A0
ASL ; #$40
ASL ; #$80
ASL ; #$00

Кнопка Rsh (LSR)

Арифметический сдвиг битов вправо. Эмулирует работу инструкции LSR.

После нажатия кнопки введи количество сдвигов, например 1. Далее нажми кнопку "=" или клавишу Enter для получения результата.

Результат в режимах "1 байт" и "2 байта" не отличается.

Пример работы кнопки

LDA #$25
LSR ; #$12
LSR ; #$09
LSR ; #$04
LSR ; #$02
LSR ; #$01
LSR ; #$00

Кнопка Not (EOR #$FF)

Побитовое отрицание. Эмулирует работу инструкции EOR #$FF.

Результат в режимах "1 байт" и "2 байта" не отличается.

Пример работы кнопки

LDA #$25 ; #%00100101
EOR #$FF ; #%11111111
; #%11011010 = #$DA

Кнопка And (AND)

Побитовое "И". Эмулирует работу инструкции AND.

После нажатия кнопки введи дополнительный байт, затем нажми кнопку "=" или клавишу Enter для получения результата.

Результат в режимах "1 байт" и "2 байта" не отличается.

Пример работы кнопки

LDA #$25 ; #%00100101
AND #$5D ; #%01011101
; #%00000101 = #$05