Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
b.inst(Lda(Immediate), 1);
b.inst(Sta(Absolute), CONTROLLER_REG); // set controller strobe
b.inst(Sta(ZeroPage), 255); // store a 1 at 255 - used to check when all bits are read
b.inst(Lsr(Accumulator), ()); // clear accumulator
b.inst(Sta(Absolute), CONTROLLER_REG); // clear controller strobeна самом деле просто иное представление такого кода на ассемблере 6502:LDA #1
STA CONTROLLER_REG
STA $FF
LSR A
STA CONTROLLER_REGТо есть, обычный код на Rust под 6502 вы таким образом не соберёте. Технически, конечно, можно обучить LLVM собирать код под 6502 (что используется в NES), но такой код вряд ли будет быстрым. Как минимум из-за того, что в 6502 нет инструкций для быстрого доступа к значениям на стеке, а локальные переменные и аргументы функций должны размещаться в стеке, если мы хотим сохранить реентерабельность функций.Интересно, а реально ли сделать емулятор NES внутри NES.
Пишем игру «Жизнь» для NES на Rust